1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数#include<stdio.h>
#define N 100 void readScore(int score[],int n);//录入数组 void printScore(int score[],int n);//输出数组 double average(int score[],int n);//平均分 int findMax(int score[],int n);//最高分 int findMin(int score[],int n);//最低分 void findMaxlndex(int score[],int n,int Max);//求最高分的下标 void findMinlndex(int score[],int n,int Min);//求最低分的下标 void search(int score[],int n,int x);//查询成绩 void bubbleSort(int score[],int n);//排序 int main() { int score[N]={0},n,Max,Min,x; double ave; printf("输入学生人数(n<100)"); scanf("%d",&n); readScore(score,n); printScore(score,n); ave=average(score,n); printf("平均分为%.2f ",ave); Max=findMax(score,n); printf("最高分为%d ",Max); Min=findMin(score,n); printf("最低分为%d ",Min); findMaxlndex(score,n,Max); findMinlndex(score,n,Min); printf("输入查询的成绩"); scanf("%d",&x); search(score,n,x); bubbleSort(score,n); printf(" 排序后为"); 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(" "); } double average(int score[],int n) { int i,sum=0; for(i=0;i<n;i++) { sum+=score[i]; } return (double)sum/n; } int findMax(int score[],int n) { int i,max; max=score[0]; for(i=1;i<n;i++) { if(score[i]>max) { max=score[i]; } } return max; } int findMin(int score[],int n) { int i,min; min=score[0]; for(i=1;i<n;i++) { if(score[i]<min) { min=score[i]; } } return min; } void findMaxlndex(int score[],int n,int Max) { int i,maxlndex=0; printf("最高分有:"); for(i=0;i<n;i++) { if(score[i]==Max) { printf("第%2d个",i+1); } } printf(" "); } void findMinlndex(int score[],int n,int Min) { int i,minlndex=0; printf("最低分有:"); for(i=0;i<n;i++) { if(score[i]==Min) { printf("第%2d个",i+1); } } printf(" "); } void search(int score[],int n,int x) { int i; for(i=0;i<n;i++) { if(score[i]==x) printf("是第%d个",i+1); } } void bubbleSort(int score[],int n) { int i,j,t,flag; for(i=0;i<n-1;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; } } } }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include<stdio.h> #define N 100 int main() { int kkk[N],i,j=0; for(i=0;i<N;i++) { kkk[i]=i+1; if(kkk[i]%3!=0&&kkk[i]%7!=0) { printf("%4d",kkk[i]); j++; } } printf(" 共有%d个",j); return 0; }
附加题
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
#include<stdio.h> #define N 10 int main() { int asd[N],i,a,M,j,y; for(i=0;i<N;i++) { printf("输入一个数"); scanf("%d",&asd[i]); } printf("移出M位:"); scanf("%d",&M); for(j=1;j<=M;j++) { y=asd[9]; for(i=9;i>0;i--) { asd[i]=asd[i-1]; } asd[0]=y; } for(i=0;i<N;i++) { printf("%2d",asd[i]); } return 0; }
2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。(使用数组)
#include <stdio.h> #define N 4 int main() { int a,i,zxc[N],x,y; printf("请输入一个四位数 "); scanf("%d",&a); zxc[0]=a/1000; zxc[1]=a%1000/100; zxc[2]=a%100/10; zxc[3]=a%10; for(i=0;i<N;i++) { zxc[i]=zxc[i]+9; zxc[i]=zxc[i]%10; } x=zxc[1]; zxc[1]=zxc[3]*100; zxc[3]=x; y=zxc[0]; zxc[0]=zxc[2]*1000; zxc[2]=y*10; zxc[0]+zxc[1]+zxc[2]+zxc[3]; printf("%d", zxc[0]+zxc[1]+zxc[2]+zxc[3]); return 0; }
实验总结 1.函数int类型需要返回值,函数void类型不需要返回值。
2.注意数组的越界问题,例如 int score[2]是score[0],score[1]。
3.注意函数和被调用函数的对应关系。
4.函数中定义的变量只在本函数范围内起作用,在其他函数中不能使用。
三、程序分析
程序1
#include <stdio.h> void swap(int x[]); int main() { int a[2]={1,2}; swap(a); printf("a[0]=%d a[1]=%d ",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 a[1]=%d ",a[0],a[1]); return 0; } void swap(int x,int y) { int z; z=x; x=y; y=z; }
分析 : 两个结果不同,
原因是因为简单变量做函数,实现的是值的单向传递!数组作函数参数,是将实参数组的地址传给形参数组!第一个用的是数组做函数,第二个程序是用简单变量做函数