作业九
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include<stdio.h> #define N 100 void readscore(int score[],int n); void printscore(int score[],int n); double average(int score[],int n); int findmax(int score[],int n); int findmin(int score[],int n); int findmaxindex(int score[],int n); int findminindex(int score[],int n); int find(int score[],int n); int main() { int score[N]={0},n=0,i=0,n1,n2,n4; printf("输入人数:\n"); scanf("%d",&n); readscore(score,n); printscore(score,n); average(score,n); printf("平均数是:%.2f\n",average(score,n)); findmax(score,n); printf("最高分是%d\n",findmax(score,n)); n1=findmaxindex(score,n); printf("最高分数的学生为%d号\n",n1+1); findmin(score,n); printf("最低分是%d\n",findmin(score,n)); n2=findminindex(score,n); printf("最低分数的学生为%d号\n",n2+1); n4=find(score,n); if(n4!=-1) { printf("%d号得到这个分数\n",n4); } else { printf("未找到"); } return 0; } void printscore(int score[],int n) { int i; printf("学生成绩是:"); for(i=0;i<n;i++) { printf("%5d",score[i]); } printf("\n"); } void readscore(int score[],int n) { int i; for(i=0;i<n;i++) { printf("输入成绩:\n"); scanf("%d",&score[i]); } } double average(int score[],int n) { int sum=0,i; double average; for(i=0;i<n;i++) { sum=sum+score[i]; } average=(double)sum/n; return average; } int findmax(int score[],int n) { int i=0,max; max=score[0]; for(i=0;i<n;i++) { if(score[i]>max) { max=score[i]; /*最大值*/ } } return max; } int findmin(int score[],int n) { int i=0,min; min=score[0]; for(i=0;i<n;i++) { if(score[i]<min) { min=score[i]; /*最大值*/ } } return min; } int findmaxindex(int score[],int n) { int i=0,max,n1; max=score[0]; for(i=0;i<n;i++) { if(score[i]>max) { max=score[i]; n1=i; } } return n1; } int findminindex(int score[],int n) { int i=0,min,n2; min=score[0]; for(i=0;i<n;i++) { if(score[i]<min) { min=score[i]; n2=i; } } return n2; } int find(int score[],int n) { int i=0,n3=0,n4=0; printf("输入一个分数:\n"); scanf("%d",&n3); for(i=0;i<n;i++) { if(score[i]==n3) { n4=i+1; } else { n4=-1; } } return n4; }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include<stdio.h> int main() { int a=0,b=0,c=0; for(a=1;a<=100;a++) { if(a%3==0||a%7==0) { continue; } else { printf("%5d",a); c++; } if(c%10==0) { printf(" \n"); } } printf("有%d个",c); return 0; }
附加题
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
#include<stdio.h> #define N 100 int main() { int shuzu[N]={0},a,b,i,m,n,n1; printf("输入要平移的位数:\n"); scanf("%d",&m); printf("原数组为:"); for(a=0,b=1;a<N;a++,b++) { shuzu[a]=b; printf("%d\t",shuzu[a]); } n1=N-m; for(i=0;i<m;i++) { n=shuzu[n1]; shuzu[n1]=shuzu[i]; shuzu[i]=n; n1++; } printf("\n\n\n"); printf("数组变成:"); for(i=0;i<N;i++) { printf("%d\t",shuzu[i]); } return 0; }
# include <stdio.h> int jiami(int x); int main() { int a,b,c,d,e,f,g,b1,d1,f1,g1,h; printf("输入一个四位数\n"); scanf("%d",&a); if(a<1000||a>9999) { printf("输入错误\n"); } b=a/1000;/*千位*/ c=a%1000;/*后三位*/ d=c/100;/*百位*/ e=c%100;//后两位 f=e/10;//十位 g=e%10;//个位 b1=jiami(b); d1=jiami(d); f1=jiami(f); g1=jiami(g); f=b1*1000+d1*100+f1*10+g1; printf("%04d",f); return 0; } int jiami(int x) { int z=(x+9)%10; return z; }
三、程序分析
程序1
#include <stdio.h> void swap(int x[]); int main() { int a[2]={1,2}; swap(a); printf("a[0]=%d\na[1]=%d\n",a[0],a[1]); return 0; } void swap(int x[]) { int z; z=x[0]; x[0]=x[1]; x[1]=z; }
程序2
#include <stdio.h> void swap(int x,int y); int main() { int a[2]={1,2}; swap(a[0],a[1]); printf("a[0]=%d\na[1]=%d\n",a[0],a[1]); return 0; } void swap(int x,int y) { int z; z=x; x=y; y=z; }
程序一和程序二都使用了void,所以不能返回数值,程序一函数为void swap(int x[]) ,所以数组的值随着int[]变化而变化,而程序二把数组中两个数赋值给了两个变量,所以结果相反。
二、实验总结(实验中遇到的问题及解决方法)
1:注意函数的引用,以及void和int的区别。
2:数组平移时,要给出所平移数组空余的位置,以便存放平移的数组。
3:注意限制条件,不满足条件的用continue来取消。
4:函数名要一样,注意;的使用。
5:注意限定条件。