C 练习实例67
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
程序分析:谭浩强的书中答案有问题。
实例
#include<stdio.h>
#include<stdlib.h>
void fun(int *s,int n)
{
int i;
int max=s[0];
int a=0;
for(i=0;i<n;i++)
{
if(s[i]>max)
{
max=s[i];
a=i;
}
}
s[a]=s[0];
s[0]=max;
int j;
int min=s[n-1];
int b=n-1;
for(j=0;j<n;j++)
{
if(s[j]<min)
{
min=s[j];
b=j;
}
}
s[b]=s[n-1];
s[n-1]=min;
}
void printf_s(int *s,int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",s[i]);
printf("\n");
}
int main()
{
int s[20];
int i,n;
printf("设置数组长度(<20):");
scanf("%d",&n);
printf("输入 %d 个元素:\n",n);
for(i=0;i<n;i++)
scanf("%d",&s[i]);
fun(s,n);
printf_s(s,n);
return 0;
}
输出结果未:
设置数组长度(<20):5 输入 5 个元素: 12 123 4 65 21 123 12 21 65 4
C 语言经典100例
banhuxun
ban***un@163.com
参考解法
#include <stdio.h> int main() { int i,j,t,a[100],n=0; char c=0; int min,max; printf("请输入一组数据\n"); while(c!='\n') { scanf("%d",&a[n++]); c=getchar(); } max=0; min=n-1; for(i=1;i<n;i++) { if(a[max]<a[i]) { max=i; } } if(max!=0) { t=a[0]; a[0]=a[max]; a[max]=t; } for(j=n-2;j>=0;j--) { if(a[min]>a[j]) { min=j; } } if(min!=n-1) { t=a[n-1]; a[n-1]=a[min]; a[min]=t; } printf("交换后的数组\n"); for(i=0;i<n;i++) { printf("%d ",a[i]); } printf("\n"); return 0; }输出结果
banhuxun
ban***un@163.com
或零或百
838***162@qq.com
参考代码:
#include <stdio.h> void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b = temp; } int compare(int a[],int m) { int i; for (i = 0; i < m; i++) { if (a[i] > a[0]) { swap (&a[i],&a[0]); } } for (i = 0; i < m; i++) { if (a[i] < a[m-1]) { swap (&a[i],&a[m-1]); } } return 0; } int main() { int m,a[6]; printf("请输入 6 个整数:\n"); for (m = 0; m <= 5; m++) { scanf("%d",&a[m]); } compare(a,6); for ( m = 0; m <= 5; m++) { printf(" %d ",a[m]); } return 0; }或零或百
838***162@qq.com
HIT_CCC
117***2963@qq.com
参考方法:
#include<stdio.h> #define N 80 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main(void) { int a[N], n, maxpos = 0, minpos = 0; int max, min; printf("请输入数组元素个数:"); scanf("%d",&n); printf("请输入数组元素:\n"); for(int i = 0; i < n; i++) scanf("%d",&a[i]); max = min = a[0]; for(int i = 0; i < n; i++) { if(max < a[i]) { max = a[i]; maxpos = i; } if(min > a[i]) { min = a[i]; minpos = i; } } swap(&a[0],&a[maxpos]); swap(&a[n - 1],&a[minpos]); for(int i = 0; i < n; i++) printf("%d ",a[i]); return 0; }HIT_CCC
117***2963@qq.com
CCC
227***1980@qq.com
参考:
#include <stdio.h> void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } int main() { int N, num[1000] = {0}; printf("输入数组大小:"); while(scanf("%d", &N) != EOF) { for(int i = 0; i < N; ++i) scanf("%d", &num[i]); int min_pos = 0, max_pos =0; for(int i = 0; i < N; ++i) { if(num[i] < num[min_pos]) min_pos = i; if(num[i] > num[max_pos]) max_pos = i; } swap(&num[0], &num[max_pos]); swap(&num[N-1], &num[min_pos]); for(int i = 0; i < N; ++i) printf("%d%c", num[i], i == N-1 ? '\n' : ' '); printf("输入数组大小:"); } return 0; }CCC
227***1980@qq.com
difficult is simple
257***9013@qq.com
本题体现出了指针的优越性:指针并不会改变原有数组的值和排列顺序,却可以储存数组中最大值与最小值的位置。当知道最大值与最小值的位置时,就可以定位出最值元素在数组中的编号(例如本题定位最值的数值与位置是通过 a(max - a) 和 a(min - a) 实现的)。
#include <stdio.h> int main() { int a[5], i, *max, *min, t; printf("please input five numbers:\n"); for(i = 0; i < 5; i++) { scanf("%d", &a[i]); } max = min = a; for(i = 0; i < 4; i++) { if(*max < a[i + 1]) { max = &a[i + 1]; } if(*min > a[i +1]) { min = &a[i + 1]; } } if(a[max - a] == a[4] && a[min - a] == a[0]) { t = a[0]; a[0] = a[max - a]; a[max - a] = t; } else { t = a[min -a]; a[min - a] = a[4]; a[4] = t; t = a[max - a]; a[max - a] = a[0]; a[0] = t; } for(i = 0; i < 5; i++) { printf("%d ", a[i]); } printf("\n"); }difficult is simple
257***9013@qq.com