第八次作业
1.输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩。
# include <stdio.h> # define N 100 int main() { int score[N],max,max1,min,min1,i,n,sum,search; float average; n=0; max1=1; min1=1; sum=0; printf("请输入成绩(输入数据小于0时将结束输入):\n"); scanf("%d",&score[n]); do { sum=sum+score[n]; if(n==0) { min=score[n]; max=score[n]; } else { if(max<score[n]) { max=score[n]; max1=n+1; } if(min>score[n]) { min=score[n]; min1=n+1; } } n++; printf("请输入成绩(输入数据小于0时将结束输入):\n"); scanf(" %d",&score[n]); }while(score[n]>=0); average=(float)sum/n; printf("平均分是%.2f,最高分是%d,该同学是%d号,最低分是%d,该同学是%d号。\n",average,max,max1,min,min1); printf("请输入你想查询的成绩(数据为整数):\n"); scanf("%d",&search); for(i=0;i<n;i++) { if(search==score[i]) { printf("%d号 ",i+1); } } return 0; }
2.现有一个有序正整数数组(从小到大排序),输入一个数,插入到数组中,要求插入后的数组仍然有序。对插入到最前、最后、中间位置三种情况进行验证。
# include <stdio.h> int main() { int i,j,x,a,b[11]={2,5,7,9,12,16,19,21,26,29}; printf("请输入一个数字:\n"); scanf("%d",&a); for(i=10;i>=0;i--) { if(a>=b[i-1]) { for(j=10;j>i;j--) { b[j]=b[j-1]; } b[i]=a; break; } if(i==0) { for(j=10;j>i;j--) { b[j]=b[j-1]; } b[0]=a; break; } } for(x=0;x<=10;x++) { printf("%d ",b[x]); } return 0; }
3.用数组实现火柴棍等式
# include <stdio.h> int main() { int x,y,z,n,a[10]={6,2,5,5,4,5,6,3,7,6}; for(x=0;x<=9;x++) { for(y=0;y<=9;y++) { z=x+y; if(z<10&&a[x]+a[y]+a[z]==12) { printf("%d+%d=%d\n",x,y,z); } } } return 0; }
附加题: 输入一行任意长的数字,用数组元素作为计数器统计每个数字出现的次数。用下标为0的元素统计0出现的次数,用下标为1的元素统计1出现的次数…
# include <stdio.h> int main() { int i,x,b[10]={0,0,0,0,0,0,0,0,0,0}; char a; printf("请输入一串数字:\n"); do { scanf("%c",&a); x=a-48; b[x]++; }while(a>='0'&&a<='9'); for(i=0;i<=9;i++) { printf("%d个%d,",b[i],i); } return 0; }
知识点总结:
1.利用a[N],来实现对大量数据的读取;
2.利用a[N]和循环来从输入的大量数据中提取有用的数据;
3.利用a[N]来对一些特殊程序进行优化。
实验总结:
1.a[N]是从a[0]开始的不是从a[1]开始的;
2.输入一串数字时用char型变量来读取,不用int;
3.两个=是等于一个=是赋值。