首页 > 代码库 > 第九次作业
第九次作业
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 findMaxIndex1(int score[],int n,int max);//最大值下标 void findMinIndex1(int score[],int n,int min);//最小值下标 void search(int score[],int n);//查找 void bubbleSort(int score[],int n);//排序 int main() { int score[N]={0},index[N]={0},n,max,min,i=0,a; double ave; printf("输入人数\n"); scanf("%d",&n); readScore(score,n); printScore(score,n); ave=average(score,n); printf("平均值为%.2f\n",ave); max=findMax(score,n); min=findMin(score,n); printf("最高分为%d\n最低分为%d\n",max,min); findMaxIndex1(score,n,max); findMinIndex1(score,n,min); search(score,n); bubbleSort(score,n); printf("成绩从高到低为\n"); printScore(score,n); return 0; } void readScore(int score[],int n) { int i=0; for(i=0;i<n;i++) { printf("输入成绩"); 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 findMax(int score[],int n) { int i,max; max=score[0]; for(i=0;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=0;i<n;i++) { if(score[i]<min) { min=score[i]; } } return min; } void findMaxIndex1(int score[],int n,int max) { int i,count; count=0; for(i=0;i<n;i++) { if(score[i]==max) { count=i+1; printf("最高分的有第%d个人\n",count); } } } void findMinIndex1(int score[],int n,int min) { int i,count; count=0; for(i=0;i<n;i++) { if(score[i]==min) { count=i+1; printf("最低分的有第%d个人\n",count); } } } void search(int score[],int n) { int i=0,x; printf("请输入要查询的成绩"); scanf("%d",&x); for(i=0;i<n;i++) { if(score[i]==x) { printf("第%d个人\n",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; } } if(flag==0) break; } }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include <stdio.h> #define N 100 int main() { int num[N]={0},i,j=0; for(i=0;i<N;i++) { num[i]=i+1; } for(i=0;i<N;i++) { if(num[i]%3==0||num[i]%7==0) { continue; } else { j++; printf("%4d",num[i]); } } printf("还剩%d个数",j); return 0; }
附加题
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
#include <stdio.h> #define N 10 int main() { int a[N]={0}; int i,m,x,j; for(i=0;i<N;i++) { a[i]=i; printf("%2d",a[i]); } printf("请输入要后移的位数"); scanf("%d",&m); for(i=0;i<m;i++) { x=a[9]; for(j=10;j>0;j--) { a[j]=a[j-1]; } a[0]=x; } for(i=0;i<N;i++) { printf("%2d",a[i]); } return 0; }
2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。(使用数组)
#include <stdio.h> #define N 4 int main() { int x,i,a[N]={0},z,y; printf("请输入一个四位数\n"); scanf("%d",&x); a[0]=x/1000; a[1]=x%1000/100; a[2]=x%100/10; a[3]=x%10; for(i=0;i<N;i++) { a[i]=a[i]+9; a[i]=a[i]%10; } z=a[1]; a[1]=a[3]; a[3]=z; y=a[0]; a[0]=a[2]; a[2]=y; for(i=0;i<N;i++) { printf("%d",a[i]); } return 0; }
二丶实验总结:1.注意变量的赋初值问题。
2.函数和被调用函数的对应关系。
3.函数int类型需要返回值,函数void类型不需要返回值。
4.注意数组的越界问题。
5.注意形参与实参的对应,避免混淆。
三丶程序分析
程序1正确,程序2中简单变量做函数参数时,虽然对形参进行了互换,但是却不影响实参的数值。
程序1中用数组做函数参数,将实参数组传递到地址中再传递给形参数组。
第九次作业