第九次作业
1.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 findMaxIndex1(int score[],int n);//最大值人数 int findMin(int score[],int n);//最小值 int findMinIndex2(int score[],int n); //最小值人数 void findScoreIndex(int score[],int n);//输入一个成绩 ,是第几个人 void bubbleSort(int score[],int n);//排序 void printfScore(int score[],int n);//输出 int main() { int score[N]={0},Index[N]={0},i,max,maxindex1,min,minindex2,index,n; double ave; printf("请输入人数\n"); scanf("%d",&n); readScore(score,n); ave=average(score,n); printf("ave=%.2f\n",ave); max=findMax(score,n); printf("max=%d\n",max); maxindex1=findMaxIndex1(score,n); printf("最高分有%d个\n",maxindex1); min=findMin(score,n); printf("min=%d\n",min); minindex2=findMinIndex2(score,n); printf("最低分有%d个\n",minindex2); findScoreIndex(score,n); bubbleSort(score,n); printfScore(score,n); return 0; } void readScore(int score[],int n) { int i; printf("请输入成绩\n"); for(i=0;i<n;i++) { scanf("%d",&score[i]); } } 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 findMax(int score[],int n) { int max,i; max=score[0]; for(i=0;i<n;i++) { if(score[i]>=max) { max=score[i]; } } return max; } int findMaxIndex1(int score[],int n) { int i,a,max; a=0; max=findMax(score,n); for(i=0;i<n;i++) { if(score[i]==max) { a++; } } return a; } int findMin(int score[],int n) { int min,i; min=score[0]; for(i=0;i<n;i++) { if(score[i]<=min) { min=score[i]; } } return min; } int findMinIndex2(int score[],int n) { int i,a,min; a=0; min=findMin(score,n); for(i=0;i<n;i++) { if(score[i]==min) { a++; } } return a; } void findScoreIndex(int score[],int n) { int i,grade; printf("输入要找的成绩"); scanf("%d",&grade); for(i=0;i<n;i++) { if(grade==score[i]) { printf("index=%d\n",i+1); } } } void bubbleSort(int score[],int n) { int i,j,t; for(i=0;i<n-1;i++) { for(j=0;j<n-1;j++) { if(score[j]>score[j+1]) { t=score[j]; score[j]=score[j+1]; score[j+1]=t; } } } } void printfScore(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 num[N]={0},i,a=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) { num[i]=0; } } for(i=0;i<N;i++) { if(num[i]!=0) { printf("%3d ",num[i]); a++; if(a%10==0) { printf("\n"); } } } printf("输出%d个数",a); return 0; }
知识点总结:1.一个主函数对应一个子函数。注意一一对应。
2.返回值应该放在循环外面。
3.要赋初值。
程序一:
#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; }
程序二:
#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; }
运行结果:
分析:数组一做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间 ,因此交换的数值改变。
数组二简单变量做参数,实现的是值的单向传递,没有改变数值。