2008年885编程题
第一题:
#include <stdio.h> #include <math.h> #define N 10 int a[N]; int Stand(int num);//判断数字是否符合标准 int NumLen(int num);//获取数字的长度,并将每一位写入数组 void print(int len);//分别打印每一次数字(正序和逆序) int main(){ int num; printf("请输入一个不多于5位的正整数\n"); scanf("%d",&num); if(Stand(num)==2){ int len=NumLen(num); print(len); }else{ printf("输入的数字不符合要求\n"); } return 0; } //判断数字是否符合标准 int Stand(int num){ if(num<0) return 0;//输入的数是负数 else if(num>=100000) return 1;//输入的数超过5位数 else return 2;//输入的数符合要求 } //获取数字的长度,并将每一位写入数组 int NumLen(int num){ int k=0; while(num!=0){ a[k++]=num%10; num/=10; } printf("数字是%d位数\n",k); return k;//返回长度 } //分别打印每一次数字(正序和逆序) void print(int len){ int i,j; printf("正序输出每一位数:\n"); for(i=len-1;i>=0;i--) printf("%4d",a[i]); printf("\n逆序输出每一位数:\n"); for(i=0;i<len;i++) printf("%4d",a[i]); }
第二题
#include <stdio.h> int fun(int num);//判断是否符合水仙花数的要求 int main(){ int i; printf("水仙花数如下:\n"); for(i=100;i<1000;i++){ if(fun(i)) printf("%4d",i); } return 0; } int fun(int num){ int g,s,b;//代表个位,十位,百位 g=num%10; s=num/10%10; b=num/100%10; if(g*g*g+s*s*s+b*b*b==num) return 1; else return 0; }
第三题:
#include <stdio.h> #include <math.h> #define N 10 struct student{ int no;//学号 char name[20]; double score[5]; double sum;//总分成绩 }stu[N]; void Input();//输入学生的信息 void StuAvg();//计算每个学生的平均分 void CourAvg();//计算每门课的平均分 void MaxScore();//最高分的学生和信息 void ScoreFC();//计算平均分方差 int main(){ printf("请输入10个学生的信息:\n"); Input(); StuAvg(); CourAvg(); MaxScore(); ScoreFC(); return 0; } void Input(){//输入学生的信息 int i,j; double sum; for(i=0;i<N;i++){ sum=0; printf("输入第%d个学生信息:\n",i+1); scanf("%d%s",&stu[i].no,stu[i].name); for(j=0;j<5;j++){ scanf("%lf",&stu[i].score[j]); sum+=stu[i].score[j]; } stu[i].sum=sum; } } void StuAvg(){ printf("学生平均分信息如下:\n"); int i,j; printf("学号\t姓名\t平均分\n"); for(i=0;i<N;i++){ printf("%d\t%s\t%lf\n",stu[i].no,stu[i].name,stu[i].sum/5); } } void CourAvg(){ printf("\n每门课的平均分成绩如下:\n"); double sscore[5]={0}; int i,j; for(i=0;i<N;i++){ for(j=0;j<5;j++) sscore[j]+=stu[i].score[j]; } for(i=0;i<5;i++) printf("%lf\t",sscore[i]/5); } void MaxScore(){ int i,j,k; int index[6]={0}; int score[6]={0}; for(i=0;i<N;i++){ for(j=0;j<6;j++){ if(score[j]<stu[i].score[j]){ score[j]=stu[i].score[j]; index[j]=i; } } } for(i=0;i<5;i++){ printf("第%d门课最高分信息:%d\t%s\t%lf\n",i+1, stu[index[i]].no,stu[index[i]].name,stu[index[i]].score[i]); } } void ScoreFC()//计算平均分方差 { int i,j,k; double x12=0.0,x1=0.0; for(i=0;i<N;i++){ x12+=(stu[i].sum/5)*(stu[i].sum/5); x1+=(stu[i].sum/5); } double s=(1.0/N)*x12-(x1/N)*(x1/N); printf("方差是%lf\n",s); }
第四题:
#include <stdio.h> #define N 5 int a[N][N]; void Input();//输入数组 int AnDian();//寻找安点 int main(){ printf("请输入五阶矩阵:\n"); Input(); int k=AnDian(); if(k==0){ printf("NO FIND!\n"); } return 0; } void Input(){ int i,j; for(i=0;i<N;i++){ for(j=0;j<N;j++){ scanf("%d",&a[i][j]); } } } //寻找安点; int AnDian(){ int i,j,k,r,c,value,count=0; for(i=0;i<N;i++){//行 value=a[i][0]; r=i;c=0; for(j=0;j<N;j++){//找出每行的最大值 if(value<a[i][j]){ value=a[i][j]; r=i;c=j; } } for(k=0;k<N;k++){//遍历行最小值的所在列,判断是否依然是列的最小值 if(value>a[k][c]){ value=a[k][c]; r=k; } } if(r==i){//如果最终行没有变化则说明行的最小值也是列的最小值。 printf("%d(%d,%d)\n",value,r+1,c+1); count++; } } if(count==0) return 0; else return 1; }
收录于《考研计算机885复习》
一纸高中万里风,寒窗读破华堂空。
莫道长安花看尽,由来枝叶几相同?