初试数组
1.如何写一个程序计算用户输入的数字的平均数?
#include<stdio.h>
int main()
{
int x;
double sum=0;
int cnt=0;
scanf("%d",&x);
while(x!=-1)
{
sum +=x;
cnt++;
scanf("%d",&x);
}
if(cnt>0){
printf("%f\n",sum/cnt);
}
return 0;
}
此时不需要记录输入的每个数
2.如果同时还需要输出每一个大于平均数的数呢?这时候就要想办法把前面输入的每一个数记录下来,就要用到数组了。
#1定义数组 int number[100]; 这个数组里面的每一个单元都是一个int,数组的大小为100,可以放下100个int;
#2对数组中的元素赋值 number [cnt] = x; cnt从零不断增长的过程中,我们让number这个数组中cnt这个位置上的那个单元等于x,即x不断的往后放。例如,第一个x放到number[0]的位置,第二个x放到number[1]的位置
#3遍历数组,使用数组 再通过一个循环判断并输出数组中大于平均数的数字,判断过程就是遍历整个数组的过程。
改造后如下:
#include<stdio.h>
int main()
{
int x;
double sum=0;
int cnt=0;
scanf("%d",&x);
int number[100]; //#1
while(x!=-1)
{
number[cnt]=x; //#2
sum +=x;
cnt++;
scanf("%d",&x);
}
if(cnt>0){
printf("%f\n",sum/cnt);
}
int i; //#3
for(i=0;i<cnt;i++)
{ if(number[i]>sum/cnt)
{ printf("%d\n",number[i]);
}
}
return 0;
}
但其实这个程序是危险的,后续会说到。
数组的认识
定义数组:
<类型>变量名称[元素数量];
int grades[100]; double weight[20].
数组的特点:
元素的数量是整数,且在C99之前,元素数量必须是编译时刻确定的字面量。
数组是其中所有的元素具有相同的数据类型,一旦创建,不得改变大小,且数组中的元素在内存中是联系依次排列的。
数组的单元:
数组的每个单元就是数组类型的一个变量,使用数组时放在[]中的数字叫做下标或索引,下标一定是从0开始计数的。
所以计算平均数中直接限制元素数量为100的做法是很危险的,因为无法保证输入的数量不超过100,容易出现越界的情况。如果是C99的编译器,可以这样做:
使数组的大小变成一个动态的值,随用户输入的大小而定。
数组应用:统计个数
写一个程序,输入数量不确定的[0,9]范围里的整数,统计每一种数字出现的次数,输入-1表示结束。
#include<stdio.h>
int main(void)
{
const int number = 10; //数组的大小
int x;
int count[number]; //定义数组
int i;
for(i=0;i<number;i++){ //利用for循环初始化数组
count[i] = 0;
}
scanf("%d",&x);
while(x != -1){
if(x>=0&&x<=9){
count[x]++; //数组参与运算
}
scanf("%d",&x);
}
for(i=0;i<number;i++){ //遍历数组输出
printf("%d:%d\n",i,count[i]);
}
return 0;
}