试题详情:
有5个学生,每个学生的数据包括:学号(字符数组型)、姓名(字符数组型)、C语言成绩(整型),编写程序先从键盘上输入学生们的数据,再输入一个学生的学号,要求输出该学号对应的学生信息,未找到该学生时输出not found。
输入提示:
输入仅6行,前5行输入5个学生的学号、姓名、C语言成绩,要求数据之间用空格隔开。第6行输入一个学号信息。
输出提示:
输出仅一行,输出学号对应的学生信息或not found (两单词中间有一空格)。
输入样本:
111 yi 89
222 er 87
333 san 98
444 si 90
555 wu 56
333
输出样本:
333 san 98
#include<stdio.h>
#include<string.h>
#define BUF_SIZE 256
typedef struct
{
char id[BUF_SIZE];
char name[BUF_SIZE];
int score;
}student_t;
int main()
{
#define NUM_STUDENTS 5
student_t students[NUM_STUDENTS];
for (int i = 0; i < NUM_STUDENTS; ++i)
{
scanf("%s %s %d", students[i].id, students[i].name, &students[i].score);
}
char id[BUF_SIZE];
scanf("%s", id);
for (int i = 0; i < NUM_STUDENTS; ++i)
{
if (strcmp(students[i].id, id) == 0)
{
printf("%s %s %d\n", students[i].id, students[i].name, students[i].score);
return 0;
}
}
printf("not found\n");
}
思路:
最简单的方法就是定义二维数组,第一个下标表示第几位学生,第二个下标表示他的学号,姓名等,通过对下标的遍历。就可以了。还有一种方法就是构建链表或者顺序表。
#include<stdio.h>
#include<string.h>
const int SIZE = 20;
typedef struct Student
{
char Sno[SIZE]={};
char Sname[SIZE]={};
int grade;
};
int main()
{
Student s[5];
for (int i = 0; i < 5; ++i)
{
scanf("%s", s[i].Sno);
scanf("%s", s[i].Sname);
scanf("%d", &s[i].grade);
}
char adjust[20];
scanf("%s", adjust);
for (int i = 0; i < 5; ++i)
{
if (strcmp(adjust, s[i].Sno)==0)
{
printf("%s %s %d", s[i].Sno, s[i].Sname, s[i].grade);
return 0;
}
}
printf("not found");
return 0;
}
太久没用c的输入输出了,好麻烦