西安交大计算机考研软件工程编程题库(三十五)
- 鄙人今年备考,主要目的在于记录学习历程,望道友们勿喷~
- 希望能做到每日一题~
- 开始炼丹~
上篇链接:西安交大计算机考研软件工程编程题库(三十四)
下篇链接:西安交大计算机考研软件工程编程题库(三十六)
文章目录
- 西安交大计算机考研软件工程编程题库(三十五)
- 一、题目
- 二、解答
- 1.分析
- 2.代码实现
- 3.输出结果
- 总结
一、题目
使用结构体数组存放三个学生的学号、姓名、性别和三门单科成绩。输出总分最高的学生以及有一科或一科以上不及格的学生的各项数据。
二、解答
1.分析
分析一波,本题的要求较为明确,定义结构体数组输入三个学生相关信息,最终输出两类学生的全部信息到屏幕。
- 此类问题难度不大,因为需要给出相关提示信息,会显得输入输出较为繁琐。
- 对于对是否挂科的判断,可以采用flag作为标记,发现一位同学成绩中出现了不及格,就将flag置1(初始为0)。
- 除此之外,对于为学号等信息采用何种数据类型存放,需要道友们斟酌一二~
话不多说,实现一下。
Ps:不出意外鄙人的此系列文章都会用C实现,其他语言的道友见谅~。
2.代码实现
代码如下:
#include<stdio.h>
typedef struct Student{
char id[20];
char name[5];
char sex[2];
int score[3];
int sum; //记录总分
int flag; //标记是否挂科
}Stu;
Stu stu[3];
int Max(Stu stu[]){
int i, flag = 0;
for(i = 0; i < 3; i++){
if(stu[flag].sum < stu[i].sum){
flag = i;
}
}
return flag;
}
int main(){
int i, j;
int max;
for(i = 0; i < 3; i++){
printf("_____________输入第%d位学生的信息_____________\n", i+1);
printf("请输入学号:\n");
scanf("%s", stu[i].id);
printf("请输入姓名:\n");
scanf("%s", stu[i].name);
printf("请输入性别:\n");
scanf("%s", stu[i].sex);
stu[i].sum = 0;
stu[i].flag = 0;
for(j=0;j<3;j++){
printf("请输入第%d门分数:\n", j+1);
scanf("%d", &stu[i].score[j]);
//计算总分
stu[i].sum+=stu[i].score[j];
//判断是否挂科
if(stu[i].score[j] < 60){
stu[i].flag = 1;
}
}
}
printf("__________输出结果如下__________\n");
max = Max(stu);
printf("总分最高的同学相关信息如下:\n");
printf("学号:%s\n", stu[max].id);
printf("姓名:%s\n", stu[max].name);
printf("性别:%s\n", stu[max].sex);
for(j = 0; j < 3; j++){
printf("第%d科成绩:%d\n", j+1, stu[max].score[j]);
}
for(i = 0; i < 3; i++){
if(stu[i].flag){
printf("一科或一科以上挂科同学相关信息如下:\n");
printf("学号:%s\n", stu[i].id);
printf("姓名:%s\n", stu[i].name);
printf("性别:%s\n", stu[i].sex);
for(j = 0; j < 3; j++){
printf("第%d科成绩:%d\n", j+1, stu[i].score[j]);
}
}
}
return 0;
}
3.输出结果
总结
本题难度一般,捋清思路后在细节出稍作注意即可,不多做赘述~
Ps:
拖更的问题主要在于博文的文字部分,题目的代码都写完了,鄙人尽力去更~