一、实验内容
1.实验要求:定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
代码
# include<stdio.h> # define N 100 void scanfscore(int score[],int n); void printfscore(int score[],int n); double average(int score[],int n); int MaxIndex(int score[],int n); int MinIndex(int score[],int n); int search(int score[],int n,int m); void bubblescort(int score[],int n); int main() { int m,x,max,min,n,i; int score[N]; double ave; printf("请输入学生的人数 "); scanf("%d",&n); scanfscore(score,n); printfscore(score,n); ave=average(score,n); printf("这几个学生成绩的平均分为%.2lf ",ave); max=MaxIndex(score,n); printf("这几个学生的成绩中的最高分为%d,是第%d个学生 ",score[max],max); min=MinIndex(score,n); printf("这几个学生的成绩中的最低分为%d,是第%d个学生 ",score[min],min); printf("请输入你想要查找的成绩 "); scanf("%d",&m); x=search(score,n,m); if(x!=-1) { printf("这是%d个学生的成绩 ",x); } else { printf("您想要查找的学生成绩不存在 "); } bubblescort(score,n); printf("排序后的数字为 "); for(i=0;i<n;i++) { printf("%4d",score[i]); } return 0; } void scanfscore(int score[],int n) { int i; printf("请输入学生的成绩 "); for(i=0;i<n;i++) { scanf("%d",&score[i]); } } void printfscore(int score[],int n) { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } printf(" "); } double average(int score[],int n) { int i,sum; sum=0; for(i=0;i<n;i++) { sum=sum+score[i]; } return (double)sum/n; } int MaxIndex(int score[],int n) { int index,i; index=0; for(i=1;i<n;i++) { if(score[i]>score[index]) { index=i; } } return index; } int MinIndex(int score[],int n) { int index,i; index=0; for(i=1;i<n;i++) { if(score[i]<score[index]) { index=i; } } return index; } int search(int score[],int n,int m) { int i; for(i=0;i<n;i++) { if(score[i]==m) { return i; } } return -1; } void bubblescort(int score[],int n) { int i,j,temp,flag=0; for(i=0;i<n-1;i++) { for(j=0;j<n-i-1;j++) { if(score[i]<score[i+1]) { temp=score[i]; score[i]=score[i+1]; score[i+1]=temp; flag=1; } if(flag==0) { break; } } } }
程序运行结果:
2.实验要求:定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
代码:
# include<stdio.h> int main() { int i,sum; int num[100]={0}; sum=0; for(i=0;i<100;i++) { num[i]=i+1; if((num[i]%3!=0)&&(num[i]%7!=0)) { sum=sum+1; if(sum%10==0) { printf("%3d ",num[i]); } else { printf("%3d ",num[i]); } } } printf("剩余%d个数 ",sum); return 0; }
程序运行结果:
二、实验总结
- 在函数中的循环的return要放在循环的外面,否则会执行到return就打破循环。
- 在实验二中的循环中,数组元素的变化要放在if语句的前面。
三、程序分析
1.在这两个程序中都调用了一个swap的函数,将数组的元素的顺序进行了互换。
2.在第一个程序中是将数组作为整体带入函数swap将函数中的两个元素的顺序进行互换,在第二个程序中是将数组中的两个元素的顺序作为两个整数带入函数swap进行互换。