第九次作业
Posted 燕超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九次作业相关的知识,希望对你有一定的参考价值。
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include <stdio.h> #define N 100 void intscore (int score[],int n); void outfscore(int score[],int n); double aver(int score[],int n); int Maxindex(int score[],int n,int max); int Minindex(int score[],int n,int min); int insearch(int score[],int n); void readScore(int score[], int n); void printscore(int score[],int n); int main() { int i,score[N]={0},n,max,maxindex,min,minindex,search; double average; printf("请输入要统计的学生人数:\\n"); scanf("%d",&n); intscore(score,n); outfscore(score,n); average=aver(score,n); max=score[0]; maxindex=Maxindex(score,n,max); min=score[0]; minindex=Minindex(score,n,min); search=insearch(score,n); readScore(score,n); printscore(score,n); return 0; } //输入函数 void intscore (int score[],int n) { int i; for(i=0;i<n;i++) { printf("请输入学生分数:\\n"); scanf("%d",&score[i]); } } //输出函数 void outfscore(int score[],int n) { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } } //平均值 double aver(int score[],int n) { int i,sum=0; double average; for(i=0;i<n;i++) { sum+=score[i]; } average=(double)sum/n; //return (double)sum/n; printf("\\n%.2lf\\n",average); } //最大值 int Maxindex(int score[],int n,int max) { int insearch=0,i; for(i=1;i<n;i++) { if(score[i]>max) { max=score[i]; insearch=i; } } printf("最高分为%d,该学生为第%d号\\n",max,++insearch); } //最小值 int Minindex(int score[],int n,int min) { int i,insearch=0; for(i=1;i<n;i++) { if(score[i]<min) { min=score[i]; insearch=i; } } printf("最低分为%d,该学生为第%d号\\n",min,++insearch); } //寻找 int insearch(int score[],int n) { int grade,i,insearch; printf("输入你要找的分数:\\n"); scanf("%d",&grade); for(i=0;i<n;i++) { if(grade==score[i]) { insearch=i+1; } } printf("该学生的学号为%d\\n",insearch); } //排序 void readScore(int score[], int n) { int i,j,temp; for(i = 0; i < n; i++) { for(j = 0; i + j < n - 1; j++) { if(score[j] > score[j + 1]) { temp = score[j]; score[j] = score[j + 1]; score[j + 1] = temp; } } } return; } //输出函数 void printscore(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 i,n,l=0,m=0,x=0,num[N]; for(i=1,n=0;i<N;i++,n++) { num[n]=i; } for(i=0;i<N;i++) { if(num[i]%3==0||num[i]%7==0) { num[i]=0; m++; } } for(i=0;i<N;i++) { if(num[i]==0) { continue; } x++; printf("%5d",num[i]); if(x%8==0) { printf("\\n"); } } printf("\\n一共有%d个",(100-m)); return 0; }
附加题
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
#include <stdio.h> #define N 10 int main() { int i,m,x,g,num[N]={0}; for(i=0;i<N;i++) { num[i]=i; } printf("请输入一个数:\\n"); scanf("%d",&m); for(i=0;i<m;i++) { x=num[9]; for(g=9;g>0;g--) { num[g]=num[g-1]; } num[0]=x; } for(i=0;i<10;i++) { printf("%2d",num[i]); } return 0; }
2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。(使用数组)
#include <stdio.h> #define N 4 int main() { int x,n,i; int num[N]={0},nums[N]={0}; printf("请输入一个四位数:\\n"); scanf("%d",&n); while(n>9999||n<1000) { printf("输入错误!\\n"); scanf("%d",&n); } for(i=3;i>=0;i--) //分配 { num[i]=n%10; n=n/10; } /* for(i=0;i<4;i++) //验证 { printf("%2d",num[i]); }*/ for(i=3;i>=0;i--) { nums[i]=(num[i]+9)%10; } /* for(i=0;i<4;i++) //验证 { printf("%3d",nums[i]); }*/ x=nums[2]*1000+nums[3]*100+nums[0]*10+nums[1]*1; printf("\\n加密后为%d",x); return 0; }
实验总结:
1:第一个程序其实不难,就是麻烦。。。
2:附加题一里,有个循环变量g,之前用的也是i,但是发现陷入死循环。。其实之前就是想省点事少定义一个变量,,,
3:附加题二的for循环第二个语句记反了,符合条件再进行循环语句,导致输出一直是零。
4:while() 当符合()里的条件时才进行循环。
程序分析:
结果:
程序1结果:a【0】=2,a【1】=1。
程序2结果:a【0】=1,a【1】=2.
分析:数组在调用函数中作为参数被传递是双向传递,若做修改则返回原数组后,被修改的数组项数值改变。
单纯的简单变量作为参数被传递则是单向传递,在调用函数中被修改,主函数中的变量值无变化。
以上是关于第九次作业的主要内容,如果未能解决你的问题,请参考以下文章