首页 > 代码库 > 第九次作业
第九次作业
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,i,sum,count1,count2,index[N]={0},chazhao,x; double ave; printf("请输入人数\n"); scanf("%d",&n); readscore(score,n); ave=average(score,n); printf("平均值为%.2f\n",ave); count1=findmaxindex(score,n,index); for(i=0;i<count1;i++) { printf("最高分=%d,是第%d个同学\n",score[index[i]],index[i]+1); } count2=findminindex(score,n,index); for(i=0;i<count2;i++) { printf("最低分=%d,是第%d个同学\n",score[index[i]],index[i]+1); } chazhao=Search(score,n,x); printf("该学生在%d位\n",chazhao+1); bubblesort(score,n); printf("排序后的数为:\n"); printscore(score,n); return 0; } void readscore(int score[],int n)//输入函数 { int i; printf("请输入成绩"); for(i=0;i<n;i++) { scanf("%d",&score[i]); } } void printscore(int score[],int n)//输出函数 { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } printf("\n"); } 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,count1; max=score[0]; count1=0; for(i=0;i<n;i++) { if(score[i]==max) { index[count1++]=i; } else if(score[i]>max) { max=score[i]; count1=0; index[count1++]=i; } } return count1; } int findminindex(int score[],int n,int index[])//求最低分对应的学生 { int i,min,count2; min=score[0]; count2=0; for(i=0;i<n;i++) { if(score[i]==min) { index[count2++]=i; } else if(score[i]<min) { min=score[i]; count2=0; index[count2++]=i; } } return count2; } int Search(int score[],int n,int x)//查找 { int i; printf("请输入你要查询的成绩:"); scanf("%d",&x); for(i=0;i<n;i++) { if(score[i]==x) return i; } return -1; } void bubblesort(int score[],int n)//排序 { int i,j,t,flag; for(i=0;i<n;i++) { for(j=0;j<n-1-i;j++) { flag=0; if(score[j]>score[j+1]) { t=score[j]; } score[j]=score[j+1]; score[j+1]=t; flag=1; } if(flag==0) { break; } } }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include<stdio.h> #define N 100 int main() { int a[100]={0},i,j,n=0,m=0; for(i=0;i<100;i++) { a[i]=i+1; } for(i=0;i<100;i++) { if(a[i]%3==0||a[i]%7==0) { a[i]=0; continue; } else { n++; m++; printf("%5d",a[i]); if(n%10==0) { printf("\n"); } } } printf(" 一共有%d位",m); return 0; }
二、实验总结
(1)返回值应放在循环的外面。
(2)输入的数据应该存在数组里,所以定义变量应写成数组形式,整形不能向数组转换。
(3)
在使用函数的过程中,需要注意以下问题:
1.函数中定义的变量(包括形参),它只在本函数范围内起作用,我们称之为局部变量。在其他函数中是不能使用本函数定义的变量的。
2.简单变量做函数参数和数组做函数参数存在着本质的不同。
简单变量做参数,实现的是值的单向传递,即只能把实参的值传给形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。
数组做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间。
(4)看了老师用三种不同的方法写的同一道题,确实方法更简便了。在以后的实验总结中,也会更加注重记录问题的解题思路,程序有哪些考虑不全面的地方,出现了哪些bug,怎么解决的,以及程序是否可以优化等问题。
三、程序分析
程序一输出结果
程序一用的是数组做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间。
程序二输出结果
程序二用的简单变量做参数,实现的是值的单向传递,即只能把实参的值传给形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。
两者结果不相同
第九次作业