首页 > 代码库 > 第九次作业
第九次作业
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
# include <stdio.h> # define N 100 void scan(int score[],int n);//输入数据 int average(int score[],int n);//平均数 int maxindex(int score[],int n,int a[]);//最大值下标 int minindex(int score[],int n,int a[]);//最小值下标 void search(int score[],int n);//查找 void sort(int score[],int n);//排序 void print(int score[],int n);//输出 int main() { int i,a[N]={0},c[N]={0},d,score[N],n,max1,min1,maxindex1,minindex1; double ave; printf("请输入人数:\n"); scanf("%d",&n); printf("请输入成绩:\n"); scan(score,n); ave=average(score,n); maxindex1=maxindex(score,n,a); max1=score[a[0]-1]; minindex1=minindex(score,n,c); min1=score[c[0]-1]; printf("平均数%.2f\n",ave); printf("最大值是%d\n",max1); for(i=0;i<=maxindex1;i++) { if(a[i]>0) { printf("%d号\n",a[i]); } } printf("最小值是%d\n",min1); for(i=0;i<=minindex1;i++) { if(c[i]>0) { printf("%d号\n",c[i]); } } printf("\n"); search(score,n); printf("\n"); sort(score,n); print(score,n); return 0; } void scan(int score[],int n) { int i; for(i=0;i<n;i++) { scanf("%d",&score[i]); } } int average(int score[],int n) { int sum,i; sum=0; for(i=0;i<n;i++) { sum+=score[i]; } return (double)sum/n; } int maxindex(int score[],int n,int a[]) { int i,j,b; b=score[0]; j=0; for(i=1;i<n;i++) { if(b<score[i]) { b=score[i]; } } for(i=0;i<n;i++) { if(b==score[i]) { a[j]=i+1; j++; } } return j-1; } int minindex(int score[],int n,int a[]) { int i,j,b; b=score[0]; j=0; for(i=1;i<n;i++) { if(b>score[i]) { b=score[i]; } } for(i=0;i<n;i++) { if(b==score[i]) { a[j]=i+1; j++; } } return j-1; } void search(int score[],int n) { int i,a; printf("请输入要查找的数据:\n"); scanf("%d",&a); for(i=0;i<n;i++) { if(a==score[i]) { printf("%d号 ",i+1); } } } void sort(int score[],int n) { int a,i,j,x,flag; for(i=0;i<n;i++) { flag=0; for(j=0;j<n-1;j++) { if(score[j]<score[j+1]) { a=score[j]; score[j]=score[j+1]; score[j+1]=a; } else { flag=1; } } if(flag==0) { break; } } } void print(int score[],int n) { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
# include <stdio.h> # define N 100 int main() { int i,a[N],b,c,d; b=3; c=7; d=0; for(i=0;i<100;i++) { a[i]=i+1; } for(i=0;i<100;i++) { if(a[i]%b==0||a[i]%c==0) { a[i]=0; d++; } } for(i=0;i<100;i++) { if(a[i]!=0) { printf("%d\t",a[i]); } } printf("\n剩余%d个数",100-d); return 0; }
附加题
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
# include <stdio.h> int main() { int i,a[100],b[100],x,m,n; for(i=0;i<100;i++) { a[i]=i+1; } printf("请输入一个数m(m<100):\n"); scanf("%d",&m); for(n=0;n<100-m;n++) { b[n+m]=a[n]; } x=m; for(n=0;n<m;n++) { b[n]=a[100-x--]; } for(i=0;i<100;i++) { printf("%d\t",b[i]); } return 0; }
2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。
# include <stdio.h> int change(int n); int main() { int a,b,c,d,e,f,g,h,i,j; tt:printf("请输入一个四位数:\n"); scanf("%d",&a); if(a<1000||a>9999) { goto tt; } b=a/1000; c=a/100%10; d=a%100/10; e=a%1000; g=change(d); h=change(e); i=change(b); j=change(c); f=g*1000+h*100+i*10+j; printf("%04d",f); return 0; } int change(int n) { int a=(n+9)%10; return a; }
实验总结:
1.一个数组如果想要在多个函数里面调用,在定义函数后面的括号里必须有那个数组。如:int maxindex(int score[],int n,int a[]);score[]和a[]这两个数组都可以在其他函数里面调用;
2.只需输出不用返回值的用void用返回值的用int;
3.对于多个数据都要进行的相同循环,定义新函数。
程序分析:
两个都正确,第一个x[]和a[]都是数组,a有两个数,x可以存放,第二个x和y不是数组,两个变量正好存放a[]的两个数。
根据火柴棍那道题可以看出数组在有些时候可以大大简化程序。
第九次作业
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。