首页 > 代码库 > 第九次作业
第九次作业
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
# include <stdio.h> # define N 100 void readscore (int score[],int n);//输入函数 double average(int score[],int n);//平均值 int findmaxindex (int score[],int n,int index[]);//最大值下标 int findminindex (int score[],int n,int index[]);//最小值下标 int search (int score[],int n,int x[]);//查找 void bubbleSort(int score[],int n);//排序 void printscore (int score[],int n);//输出函数 int main () { int score[N]={0},n,maxindex,i,minindex,c,x[N]; int index[N]={0}; double ave; printf ("请输入人数:\n"); scanf ("%d",&n); readscore(score,n); ave=average(score,n); printf("平均值为%.0lf。\n",ave); maxindex=findmaxindex(score,n,index); printf("最大值下标为%d\n",maxindex); minindex=findminindex(score,n,index); printf("最小值下标为%d\n",minindex); c=search (score,n,x); for(i=0;i<c;i++) { printf("%d号。\n",x[i]); } bubbleSort(score,n); printf("the sorted numbers:\n"); for(i=0;i<n;i++) { printf("%4d",score[i]); } } //输入函数 void readscore (int score[],int n) { int i; printf("请输入成绩:\n"); for (i=0;i<n;i++) { scanf("%d",&score[i]); } } //平均值 double average(int score[],int n) { int i,sum; sum=0; for(i=0;i<n;i++) { sum+=score[i]; } return (double)sum/n; } //最大值下标 int findmaxindex (int score[],int n,int index[]) { int i,max,index1; max=score[0]; index1=0; for (i=0;i<n;i++) { if(score[i]>max) { max=score[i]; index1=i+1; } } return index1; } //最小值下标 int findminindex (int score[],int n,int index[]) { int i,min,index2; min=score[0]; index2=0; for (i=0;i<n;i++) { if (score[i]<min) { min=score[i]; index2=i+2; } } return index2; } // 查找 int search (int score[],int n,int x[]) { int i,a,b; printf("请输入你需要查找的成绩:\n"); scanf("%d",&a); b=0; for(i=0;i<n;i++) { if(score[i]==a) { x[b++]=i+1; } } return b; } //排序函数 void bubbleSort(int score[],int n) { int i,j,temp,flag; for(i=0;i<n-1;i++) { flag=0; for(j=0;j<n-i-1;j++) { if(score[j]>score[j+1]) { temp=score[j]; score[j]=score[j+1]; score[j+1]=temp; flag=1; } } if(flag==0) break; } } //输出函数 void printscore (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,score[N]={0},a,n; for(i=0;i<N;i++) { score[i]=i+1; } a=0; for(i=0;i<N;i++) { if(score[i]%3==0||score[i]%7==0) { score[i]=0; } else { a++; printf("%5d",score[i]); } } printf("剩余%d个",a); return 0; }
附加题
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
int a[N]={1,2,3,4,5,6,7,8,9,10},i,j,m,temp; for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n请输入向后移的位数;\n"); scanf("%d",&m); if(m>10) { printf("输入错误!\n"); } else { for(i=0;i<m;i++) { temp=a[9]; for(j=9;j>0;j--) { a[j]=a[j-1]; } a[0]=temp; } } for(i=0;i<10;i++) { printf("%d ",a[i]); } return 0; }
2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。(使用数组)
# include <stdio.h> int main () { int i,a[4],b[4],m,n; printf("请输入一个密码(四位数):\n "); scanf("%d",&n); if(n>9999||n<1000) { printf("error"); } else { a[0]=n/1000;/*千位*/ a[1]=n%1000/100;/*百位*/ a[2]=n%100/10;/*十位*/ a[3]=n%10;/*个位*/ for(i=0;i<4;i++) { b[i]=(a[i]+9)%10; } m=b[2]*1000+b[3]*100+b[0]*10+b[1]; printf("加密后的密码是:%04d",m); } return 0; }
二 实验总结:
1.注意void和int的区别
2.注意数组名表示内存首地址, 是地址常量
3.在声明函数时看是否加 int index[]
4.变量要附初值
补充知识点:
在使用函数的过程中,需要注意以下问题:
(1)函数中定义的变量(包括形参),它只在本函数范围内起作用,我们称之为局部变量。在其他函数中是不能使用本函数定义的变量的。
(2)简单变量做函数参数和数组做函数参数存在着本质的不同。
简单变量做参数,实现的是值的单向传递,即只能把实参的值传给形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。
数组做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间。
三、程序分析
程序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 swap(int x[]) ,所以数组的值随着int[]变化而变化,而程序二把数组中两个数赋值给了两个变量,所以结果相反。
第九次作业