首页 > 代码库 > 2016-12-04
2016-12-04
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include <stdio.h> #define N 100 void readscore(int score[],int n); //输入函数 double average(int score[],int n); //平均值 int maxscore(int score[],int n); //最大值 int maxindex(int score[],int n); //最大下标 int minscore(int score[],int n); //最小值 int minindex(int score[],int n); //最小下标 int search(int num[],int n,int x); //查询 void bubblesort(int score[],int n); //升序 void printscore(int score[],int n); //输出函数 int main() { int score[N],n,max,max1,min,min1,m,x; double ave; printf("请输入成绩个数\n"); scanf("%d",&n); readscore(score,n); ave=average(score,n); max=maxscore(score,n); max1=maxindex(score,n); min=minscore(score,n); min1=minindex(score,n); printf("平均值为%.2f,最大值为%d,最大下标为%d,最小值为%d,最小下标为%d\n",ave,max,max1,min,min1); printf("请输入一个成绩\n"); scanf("%d",&x); m=search(score,n,x); printf("该学生下标为%d\n",m); bubblesort(score,n); printscore(score,n); return 0; } void readscore(int score[],int n) //输入函数 { int i=0; printf("请输入成绩\n"); for(i=0;i<n;i++) { scanf("%d",&score[i]); } } double average(int score[],int n) //平均值 { int i; double sum; sum=0; for(i=0;i<n;i++) { sum=sum+score[i]; } return (double)sum/n; } int maxscore(int score[],int n) //最大值 { int max,i; max=score[0]; for(i=0;i<n;i++) { if(max<score[i]) { max=score[i]; } } return max; } int maxindex(int score[],int n) //最大下标 { int i, maxdex=0; for(i=1;i<n;i++) { if(score[i]>score[maxdex]) { maxdex=i; } } return maxdex; } int minscore(int score[],int n) //最小值 { int i,min; min=score[0]; for(i=0;i<n;i++) { if(min>score[i]) { min=score[i]; } } return min; } int minindex(int score[],int n) //最小下标 { int i,mindex=0; for(i=1;i<n;i++) { if(score[i]<score[mindex]) { mindex=i; } } return mindex; } int search(int num[],int n,int x) //查询 { int i; for(i=0;i<n;i++) { if(num[i]==x) { return i; } } return -1; } void bubblesort(int score[],int n) //升序 { int i,j,t,flag; for(i=0;i<n;i++) { flag=0; 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; flag=1; } } if(flag==0) { break; } } } void printscore(int score[],int n) //输出函数 { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } printf("\n"); }
总结:注意有返回值和没有返回值的函数该如何调用 写代码的时候循环嵌套弄错了
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include <stdio.h> #define N 100 int main() { int num[N],i,j=0,a=0; for(i=0;i<N;i++) { j++; num[i]=j; if(num[i]%3==0||num[i]%7==0) { num[i]=0; } } for(i=0;i<N;i++) { if(num[i]!=0) { printf("%5d",num[i]); a++; } } printf("\n"); printf("一共有%d个数\n",a); return 0; }
总结:利用循环给数组赋值,还要注意a++放的位置
附加题
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
#include <stdio.h> #define N 10 int main() { int arr[N],i,j=0,m,t; printf("原数组为:\n"); for(i=0;i<N;i++) { j++; arr[i]=j; } for(i=0;i<N;i++) { printf("%d ",arr[i]); } printf("\n"); printf("请输入后移位置m\n"); scanf("%d",&m); for(j=1;j<=m;j++) { t=arr[N-1]; for(i=N-1;i>0;i--) { arr[i]=arr[i-1]; } arr[0]=t; } printf("新数组为:\n"); for(i=0;i<N;i++) { printf("%d ",arr[i]); } printf("\n"); return 0; }
2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。
#include <stdio.h> int main() { int i,brr[4]; char arr[4]; printf("请输入一个四位数\n"); for(i=0;i<4;i++) { scanf("%c",&arr[i]); brr[i]=(arr[i]-48+9)%10; } printf("%d%d%d%d",brr[2],brr[3],brr[0],brr[1]); printf("\n"); return 0; }
总结:定义输入的数组时可以定义成char型的才能连续输出一串数字 运算的时候要注意转化成数字
三、程序分析
程序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; }
实验分析:实参传的是数组传的是地址引用,传两个数字的话只是在方法区换了两个数,一退键就清空了,主函数中的两个数还是没有变。
2016-12-04
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。