复试编程训练十

旧城等待, 2023-07-17 14:25 137阅读 0赞

91.建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void check(int *p) //打印成绩<60的
  4. {
  5. int i;
  6. for(i=0; i<5; i++)
  7. if(*(p+i)<60)
  8. printf("%d ",*(p+i));
  9. printf("\n");
  10. }
  11. int main()
  12. {
  13. int *p1,i;
  14. p1=(int *)malloc(5*sizeof(int)); //动态开辟空间
  15. for(i=0; i<5; i++)
  16. scanf("%d",p1+i); //p1+i为地址
  17. check(p1);
  18. return 0;
  19. }

运行结果:

20200326153935635.PNG

92.验证:哥德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和。例:34=3+31

  1. #include <stdio.h>
  2. #include <math.h>
  3. int prime(int m) //判断是否为素数
  4. {
  5. int i,k;
  6. k=sqrt(m);
  7. for(i=2; i<=k; i++)
  8. if(m%i==0)
  9. break;
  10. if(i>k)
  11. return 1;
  12. else
  13. return 0;
  14. }
  15. void godbaha(int n)
  16. {
  17. int a,b;
  18. for(a=3; a<=n/2; a+=2) //a为第一个素数,一定不大于n/2
  19. {
  20. if(prime(a))
  21. {
  22. b=n-a; //判断第二个是否为素数
  23. if(prime(b))
  24. printf("%d=%d+%d\n",n,a,b);
  25. }
  26. }
  27. }
  28. int main()
  29. {
  30. int number;
  31. printf("输入一个不小于6的偶数:");
  32. scanf("%d",&number);
  33. godbaha(number);
  34. printf("\n");
  35. return 0;
  36. }

运行结果:

20200323184103648.PNG

93.输入10个学生的姓名、学号和成绩,将其中不及格者的姓名、学号和成绩输出

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char name[10][10]; //姓名
  5. int no[10]; //学号
  6. float score[10]; //成绩
  7. int i;
  8. for(i=0; i<10; i++) //三者通过数组下标相联系
  9. scanf("%s %d %f",name[i],&no[i],&score[i]);
  10. printf("打印成绩不及格的学生:\n");
  11. for(i=0; i<10; i++)
  12. if(score[i]<60)
  13. printf("%s %d %.2f\n",name[i],no[i],score[i]);
  14. return 0;
  15. }

运行结果:

20200322164748252.PNG

94.定义结构体,打印成员信息

  1. #include <stdio.h>
  2. struct Student
  3. {
  4. long int num; //学号
  5. char name[20]; //姓名
  6. char sex; //性别
  7. char addr[30]; //地址
  8. } s1= {10101,"Li Lin",'M',"123 Beijing Road"};
  9. int main()
  10. {
  11. printf("No:%ld\nname:%s\nsex:%c\naddress:%s\n",s1.num,s1.name,s1.sex,s1.addr); //输出
  12. return 0;
  13. }

运行结果:

2020032217114687.PNG

95.有3个候选人,每个选民只能投1人,编一个程序,得投票结果

  1. #include <stdio.h>
  2. #include <string.h>
  3. struct Person
  4. {
  5. char name[30]; //姓名
  6. int count; //票数
  7. } leader[3]= {"Li",0,"Zhang",0,"Sun",0};
  8. int main()
  9. {
  10. int i,j;
  11. char leader_name[30];
  12. for(i=0; i<10; i++) //依次输入10个票选
  13. {
  14. scanf("%s",leader_name);
  15. for(j=0; j<3; j++) //输入一个判断一次
  16. if(strcmp(leader_name,leader[j].name)==0) //将候选人票数加1
  17. leader[j].count++;
  18. }
  19. printf("Result:\n"); //输出各候选人票数
  20. for(i=0; i<3; i++)
  21. printf("%5s:%d\n",leader[i].name,leader[i].count);
  22. printf("\n");
  23. return 0;
  24. }

运行结果:

20200323201803286.PNG

96.有n个学生,按成绩的高低输出学生信息

  1. #include <stdio.h>
  2. struct Student //学生结构体
  3. {
  4. int num;
  5. char name[20];
  6. float score;
  7. };
  8. int main()
  9. {
  10. struct Student stu[5]= {
  11. {10101,"Zhang",78},{10102,"Wang",98.5},{10106,"Li",86},{10108,"Ling",73.5},{10110,"Sun",100}};
  12. struct Student temp;
  13. const int n=5;
  14. int i,j;
  15. for(i=0; i<n-1; i++) //根据成绩进行冒泡排序
  16. for(j=0; j<n-i-1; j++)
  17. if(stu[j].score>stu[j+1].score)
  18. {
  19. temp=stu[j]; //结构体可以直接进行赋值
  20. stu[j]=stu[j+1];
  21. stu[j+1]=temp;
  22. }
  23. for(i=0; i<n; i++) //输出排序后的结果
  24. printf("%6d %8s %6.2f\n",stu[i].num,stu[i].name,stu[i].score);
  25. printf("\n");
  26. return 0;
  27. }

运行结果:

20200323203811319.PNG

97.有n个结构体变量,内含学生学号,姓名和三门成绩。要求:输出平均成绩最高的学生信息

  1. #include <stdio.h>
  2. #define N 3
  3. struct Student //学生结构体
  4. {
  5. int num; //学号
  6. char name[20]; //姓名
  7. float score[3]; //三门成绩
  8. float aver; //平均成绩
  9. };
  10. struct Student max(struct Student stu[]) //求平均成绩最高的学生
  11. {
  12. int i,m=0;
  13. for(i=0; i<N; i++)
  14. if(stu[i].aver>stu[m].aver)
  15. m=i;
  16. return stu[m];
  17. }
  18. void input(struct Student stu[]) //输入学生信息及求平均成绩
  19. {
  20. int i;
  21. for(i=0; i<N; i++)
  22. {
  23. scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
  24. stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
  25. }
  26. }
  27. void print(struct Student stud) //打印学生信息
  28. {
  29. printf("%d\n%s\n%5.1f\n%5.1f\n%5.1f\n%6.2f\n",stud.num,stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver);
  30. }
  31. int main()
  32. {
  33. struct Student stu[N],*p=stu;
  34. input(p); //直接用stu相同
  35. printf("平均成绩最高的学生:\n");
  36. print(max(p)); //直接用stu相同
  37. return 0;
  38. }

运行结果:

20200323210859171.PNG

98.指向结构体变量的指针

  1. #include <stdio.h>
  2. #include <string.h>
  3. struct Student
  4. {
  5. long num;
  6. char name[20];
  7. };
  8. int main()
  9. {
  10. struct Student stu_1;
  11. struct Student *p; //定义指向结构体变量的指针
  12. p=&stu_1;
  13. stu_1.num=10101;
  14. strcpy(stu_1.name,"Li Ming"); //下述三种方法结果相同
  15. printf("直接调用:\n");
  16. printf("No:%ld\nname:%s\n",stu_1.num,stu_1.name);
  17. printf("结构体变量指针调用用法:\n");
  18. printf("No:%ld\nname:%s\n",(*p).num,(*p).name); //用*p调用
  19. printf("No:%ld\nname:%s\n",p->num,p->name); //用p->调用
  20. return 0;
  21. }

运行结果:

202003241146444.PNG

99.结构体变量指针的用法

  1. #include <stdio.h>
  2. struct Student
  3. {
  4. long num;
  5. char name[20];
  6. };
  7. int main()
  8. {
  9. struct Student stu[3]= {
  10. {10101,"Li Min"},{10102,"Zhang Zi"},{10103,"Wang Min"}};
  11. struct Student *p;
  12. for(p=stu; p<stu+3; p++) //和普通数组相同用法
  13. printf("%5ld %-20s\n",p->num,p->name);
  14. return 0;
  15. }

运行结果:

20200324115245875.PNG

100.写一个函数,建立有3名学生数据的单向动态链表

  1. #include <stdio.h>
  2. #include <stdlib.h> //malloc
  3. struct Student
  4. {
  5. long num;
  6. float score;
  7. struct Student *next;
  8. };//定义学生结构体
  9. struct Student * Create(void) //创建学生链表
  10. {
  11. struct Student *head=NULL,*p1,*p2;
  12. p1=p2=(struct Student *)malloc(sizeof(struct Student));
  13. while(scanf("%ld,%f",&p1->num,&p1->score)&&p1->num!=0&&p1->score!=0) //输入学生信息直到输入"0,0"
  14. {
  15. if(head==NULL) //一开始链表为空
  16. head=p1;
  17. else //链表不为空
  18. p2->next=p1;
  19. p2=p1; //p2为循环指针
  20. p1=(struct Student *)malloc(sizeof(struct Student));
  21. }
  22. p2->next=NULL;
  23. return head;
  24. }
  25. void print(struct Student *head) //打印学生链表
  26. {
  27. struct Student *p;
  28. p=head;
  29. if(p!=NULL)
  30. while(p!=NULL)
  31. {
  32. printf("%ld %5.1f\n",p->num,p->score);
  33. p=p->next;
  34. }
  35. }
  36. int main()
  37. {
  38. struct Student *pt;
  39. pt=Create();
  40. printf("输出学生数据:\n");
  41. print(pt);
  42. return 0;
  43. }

运行结果:

2020032413300353.PNG

发表评论

表情:
评论列表 (有 0 条评论,137人围观)

还没有评论,来说两句吧...

相关阅读

    相关 复试编程训练

    111.从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件"file.txt"中保存,输入的字符串以“!”结束。 include <

    相关 复试编程训练

    41.给一个百分制成绩,要求输出等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为