例7-4原题:
输入一个正整数n(1<n<=10),再输入n个正整数,将它们存入数组a中。
条件1:输出最小值和它所对应的下标
条件2:将最小值与第一个数交换,输出交换后的n个数。
课本给出的代码及我的理解
#include<stdio.h>
int main()
{
int i,index,n; //定义变量,下标,n个数
int a[10]; //定义长度为10的数组
printf("Enter n: "); //输入提示
scanf("%d",&n); //输入n
printf("Enter %d integers: ",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]); //输入n个数存入数组中
index=0; //假设第一个数最小
for(i=1;i<n;i++) //遍历数组
if(a[i]<a[index]) //进行比较
index=i; //找到更小的数,进行操作
printf("min is %d\tsub is %d\n",a[index],index);
// \t表示跳格,跳到下一制表位置,就是八个空格
return 0;
}
显然课本给出的代码只有条件1,其实加上条件2也不难,就像交换两杯果汁一样,先拿出第三个杯 “t” 再进行操作。
我的代码和解释
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n); //输入一个正整数n
int a[n],i; //定义长度为n的数组
for(i=0;i<n;i++)
scanf("%d",&a[i]); //输入n个整数存入数组中
int min,m;
min=a[0];m=0; //先假设首项最小,下标为0
for(i=1;i<n;i++) //遍历数组
{
if(a[i]<min) //找到更小的数
{
min=a[i];
m=i; //改变min m的值
}
}
printf("min=%d index=%d\n",min,m); //输出最小的数及相应的下标
int t;
t=a[0];
a[0]=a[m];
a[m]=t; //交换最小的数和首项
for(i=0;i<n;i++)
printf("%d ",a[i]); //输出交换后的数组
}
课本例子和我的 最小值 设法不太一样,课本直接一个变量搞定,我的还要多一个,算了看在数据小的份上就不理它了
有错请指出,感谢!