在忙碌之余,看到同学给我发来这样一个问题
她想问我数组的大小怎么定义,其实数组的大小只需要把它定义的比较大就好了,我真正的纠结之处在于如何输入一组乱序的正整数之后回车便能够将输入的数存储到数组中,这时不免想到了用到scanf函数的返回值形式
int main()
{
int arr[100] = {0};
int count = 0;
while(scanf("%d", &arr[count] == 1)
{
count++;
}
//…………
return 0;
}
可这时的问题在于的却可以将输入的数存入数组中,但是在存的时候会将输入的数全部储存起来,而只有输入符号形式时才会跳出循环,去执行下面的代码。
这时我想到了我要定义的标志是:当输入回车时就跳出循环,所以我们可以定义回车时便break
这就涉及到gerchar函数的使用:换行在getchar中吸收的格式是'\n',所以我们可将循环写成一下形式
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[100] = {0};
int count = 0;
while(scanf("%d", &arr[count]) == 1)
{
count++;
if(getchar() == '\n')
break;
}
return 0;
}
此时我们不妨检验一下
输入数的确可以存储到数组的相应位置,此时存入数的个数就是计数器count的值,我们便可以对count个数进行以后的操作
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[100] = {0};
int count = 0;
//输入一组乱序正整数
while(scanf("%d", &arr[count]) == 1)
{
count++;
if(getchar() == '\n')
break;
}
//找出最大值并打印
int maxn = arr[0];
int minn = arr[0];
int i = 0;
for(i=1;i<count;i++)
{
if(arr[i]>maxn)
maxn = arr[i];
if(arr[i]<minn)
minn = arr[i];
}
printf("%d\n%d\n", maxn, minn);
return 0;
}
接下来对arr数组中的元素进行排序,我才用qsort快速排序
#include <stdio.h>
#include <stdlib.h>
int Arr_sort(const void* e1, const void* e2)
{
return (*(int*)e1 - *(int*)e2);
}
int main()
{
int arr[100] = {0};
int count = 0;
//输入一组乱序正整数
while(scanf("%d", &arr[count]) == 1)
{
count++;
if(getchar() == '\n')
break;
}
//找出最大值并打印
int maxn = arr[0];
int minn = arr[0];
int i = 0;
for(i=1;i<count;i++)
{
if(arr[i]>maxn)
maxn = arr[i];
if(arr[i]<minn)
minn = arr[i];
}
printf("%d\n%d\n", maxn, minn);
//排序并打印
qsort(arr, count, sizeof(int), Arr_sort);
for(i=0;i<count;i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
最后检验代码是否正确
符合题意,大功告成