第九次作业
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include <stdio.h> #define N 100 void readScore(int score[],int n); //输入函数 double average(int score[],int n);//平均数 int maxScoreIndex(int score[],int n);//最大值下标函数 int minScoreIndex(int score[],int n);//最小值下标函数 void findScore(int score[], int n,int find);//查找函数 void sortScore(int score[], int n);//排序函数 void printScore(int score[], int n);//输出函数 int main() { int n,maxindex,minindex,score[N]={0},find; double ave; printf("请输入人数\n"); scanf("%d",&n); printf("请输入成绩"); readScore(score,n); printf("平均分为%.2lf\n",average(score,n)); maxindex=maxScoreIndex(score,n); minindex=minScoreIndex(score,n); findScore(score,n,find); sortScore(score,n); printScore(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=0; for(i=0;i<n;i++) { sum=sum+score[i]; } return (double)sum/n; } int maxScoreIndex(int score[],int n) { int i,j,max; max=score[0]; j=0; for(i=0;i<n;i++) { if (score[i]>max) { max=score[i]; } } for(i=0;i<n;i++) { if(score[i]==max) { printf("最高分是%d,是第%d名同学",max,i+1); } } return i+1; } int minScoreIndex(int score[],int n) { int i,j,min; min=score[0]; j=-0; for(i=0;i<n;i++) { if(score[i]<min) { min=score[i]; } } for(i=0;i<n;i++) { if(score[i]==min) { printf("最低分是%d,是第%d名同学",min,i+1); } } return i+1; } void findScore(int score[], int n,int find) { int i; scanf("%d",&find); for(i=0;i<n;i++) { if(find==score[i]) { printf("是第%d号同学",i+1); } } } void sortScore(int score[], int n) { int x,y,i; for(x=0;x<n-1;x++) { for(y=0;y<n-x-1;y++) { if(score[y+1]>score[y]) { i=score[y]; score[y]=score[y+1]; score[y+1]=i; } } } } void printScore(int score[], int n) { int i; for(i=0;i<n;i++) { printf("%d\n",score[i]); } }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include<stdio.h> #define N 100 int main() { int i,num[N],x=1,y=0; for(i=0;i<N;i++) { num[i]=x; x++; } for(i=0;i<N;i++) { if(num[i]%3==0||num[i]%7==0) { num[i]=0; } } for(i=0;i<N;i++) { if(num[i]!=0) { printf("%2d ",num[i]); y++; if(y%10==0) { printf("\n"); } } } printf("数组一共有%d个数",y); return 0; }
实验总结:.注意平均数需要将整型强行转换为double类型
需要返回值的函数用int型,不需要返回值的函数用void、
要记得赋初值
实验分析:
程序1
#include <stdio.h> void swap(int x[]); int main() { int a[2]={1,2}; swap(a); printf("a[0]=%d\na[1]=%d\n",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\na[1]=%d\n",a[0],a[1]); return 0; } void swap(int x,int y) { int z; z=x; x=y; y=z; }
程序分析: 第一个用的是数组做函数,第二个程序是用简单变量做函数