实验内容
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include <stdio.h> #define N 100 void readScore(int score[], int n); double average(int score[],int n); int findMax(int score[],int n); int findMaxIndex(int score[],int n); int findMin(int score[],int n); int findMinIndex(int score[],int n); int findscore(int score[],int n); void bubbleSort(int score[],int n); void print(int score[],int n); int main () { int score[N],n,max,maxIndex,min,minIndex,i,a[N],k,l,m; double ave; printf ("请输入学生的人数 "); scanf ("%d",&n) ; printf("请输入学生的成绩 ") ; readScore(score,n); ave=average(score,n); { printf("学生平均成绩为%.lf ",ave); } max=findMax(score,n); { printf("学生成绩最大值为%d ",max); } maxIndex=findMaxIndex(score,n); { k=maxIndex+1; printf("成绩最高的学生是第%d名 ",k); } min=findMin(score,n); { printf("学生成绩最小值为%d ",min); } minIndex=findMinIndex(score,n); { l=minIndex+1; printf("成绩最低的学生是第%d名 ",l); } i=findscore(score,n); bubbleSort(score,n) ; print(score,n); return 0; } void readScore(int score[], int n) { int i; for(i=0;i<n;i++) { scanf("%d",&score[i]); } } double average(int score[],int n) { int i,sum; double ave; sum = 0; for(i=0;i<n;i++) { sum+=score[i]; } ave=(double)sum/n; return ave; } int findMax(int score[],int n) { int i; int max; max=score[0]; for(i=1;i<n;i++) { if(score[i]>max) { max=score[i]; } } return max; } int findMaxIndex(int score[],int n) { int i,maxIndex; maxIndex=0; for(i=1;i<n;i++) { if(score[i]>score[maxIndex]) { maxIndex=i; } } return maxIndex; } int findMin(int score[],int n) { int i; int min; min=score[0]; for(i=1;i<n;i++) { if(score[i]<min) { min=score[i]; } } return min; } int findMinIndex(int score[],int n) { int i,minIndex; minIndex=0; for(i=1;i<n;i++) { if(score[i]<score[minIndex]) { minIndex=i; } } return minIndex; } int findscore(int score[],int n) { int x,i,m; printf("请输入你想查询的学生的成绩 "); scanf ("%d",&x); for(i=0;i<n;i++) { if (score[i]==x) { m=i+1; printf("这名学生是第%d名学生 ",m); } } return 0; } void bubbleSort(int score[],int n) { int i,j,t,flag; for(i=0;i<n-1;i++) { flag=0; for(j=0;j<n-1-i;j++) { if (score[j]>score[j+1]) { t=score[j]; score[j]=score[j+1]; score[j+1]=t; 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,x[N],a,b,c,d; a=3; b=7; c=0; for(i=0;i<100;i++) { x[i]=i+1; } for(i=0;i<100;i++) { if(x[i]%a==0||x[i]%b==0) { x[i]=0; c++; } } for(i=0;i<100;i++) { if(x[i]!=0) { printf(" %d",x[i]); } } d=100-c; printf("剩余%d个数",d); return 0; }
知识点总结
1.自定义函数要和主函数中数值的类型保持一致。
2.数字初值一定要定义.
实验总结
1.应注意数组越界的情况。
2.调用函数一定要与定义函数名相同。
程序分析
题目复制后再打字会混在程序里,所以没有题目,直接写分析。
第一个程序中因为数组的应用函数内容可以被交换,第二个程序中没有运用数组定义函数,导致实际数组中的数无法进行交换。