第八次作业
1.输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩。
#include<stdio.h> #define N 100 int main() { double score[N],sum=0,average=0,max,min,num; int i,n; printf("请输入有多少人?\n"); scanf("%d",&n); for(i=0;i<n;i++) { printf("请输入学生成绩:\n"); scanf("%lf",&score[i]); } for(i=0;i<n;i++) { sum+=score[i]; } average=sum/n; printf("平均成绩是:%.2lf\n",average); max=score[0]; for(i=0;i<n;i++) { if(max<score[i]) { max=score[i]; } } printf("最大值为:%.2lf\n",max); min=score[0]; for(i=0;i<n;i++) { if(min>score[i]) { min=score[i]; } } printf("最小值为:%.2lf\n",min); printf("请输入需要查找的成绩:\n"); scanf("%lf",&num); for(i=0;i<n;i++) { if(score[i]==num) { printf("查找到的成绩为%.2lf的是第%d个\n",num,i+1); } } return 0; }
2.现有一个有序正整数数组(从小到大排序),输入一个数,插入到数组中,要求插入后的数组仍然有序。对插入到最前、最后、中间位置三种情况进行验证。
#include<stdio.h> #include<stdlib.h> #define N 6 int main() { int series[N]={2,4,6,8,10},number,i,ii; for(i=0;i<N-1;i++)//输出已有数列 { printf("%d ",series[i]); } printf("请输入您要插入的数字:\n"); scanf("%d",&number); if(number>series[4]) { series[5]=number; for(i=0;i<6;i++) { printf("%d ",series[i]); } exit(0); } else if(number<series[4]&&number>series[0]) { for(i=4;i>=0;i--) { if(number>=series[i]) { for(ii=N-2;ii>=i+1;ii--) { series[ii+1]=series[ii]; } series[i+1]=number; for(i=0;i<6;i++) { printf("%d ",series[i]); } break; } } } else { for(i=4;i>=0;i--) { series[i+1]=series[i]; } series[0]=number; for(i=0;i<6;i++) { printf("%d ",series[i]); } } return 0; }
3.用数组实现火柴棍等式
#include<stdio.h> #define N 10 int main() { int i,a,b,c; int vary[N]={6,2,5,5,4,5,6,3,7,6}; for(a=0;a<9;a++) for(b=0;b<9;b++) { if(a+b>9) { break; } else { c=a+b; if(vary[a]+vary[b]+vary[c]==12) { printf("%d+%d=%d\n",a,b,c); } } } /* if(vary[a]+vary[b]+vary[c]==12) { printf("%d+%d=%d",a,b,c); }*/ return 0; }
实验总结:1.第二个代码本来的想法很简单,但用代码实现就变得很麻烦。
2.火柴棍问题中的break可以替换成continue。
知识点总结:1 .只给部分数组元素赋初值,则其后的元素被初始化为0.
2.当全部数组元素赋初值时,可以不指定数组长度。
3.数组不初始化,其数组内的元素为随机值。
4.数组往往与循环相连。
5.数组下标从零开始最大到九,并允许快速访问。