题目描述
现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N<100
输入格式
学生数量N占一行 每个学生的学号、姓名、三科成绩占一行,空格分开。
输出格式
每个学生的学号、姓名、三科成绩占一行,逗号分开。
样例输入
2 a100 clang 70 80 90 b200 dotcpp 90 85 75
样例输出
a100,clang,70,80,90 b200,dotcpp,90,85,75
题目解析
1. 引入头文件
代码开始时,引入了头文件stdio.h
。stdio.h
是C语言标准输入输出库,用于处理输入输出函数,如scanf
和printf
。
#include <stdio.h>
2. 定义学生结构体
定义了一个名为student
的结构体类型,用来存储学生的详细信息。结构体包含5个字段:student_id
(学号),name
(姓名),mark1
,mark2
和mark3
(三门课的成绩)。
struct student
{
char student_id[50];
char name[20];
int mark1;
int mark2;
int mark3;
};
3. 输入学生信息的函数
定义了一个名为input
的函数,该函数接收一个指向student
类型的指针arr
和一个整数i
作为参数。这个函数的作用是使用scanf
函数从标准输入读取学生的详细信息,并存储到通过指针arr
和索引i
指定的结构体实例中。
void input(struct student *arr,int i)
{
scanf("%s",arr[i].student_id);
scanf("%s", arr[i].name);
scanf("%d", &arr[i].mark1);
scanf("%d", &arr[i].mark2);
scanf("%d", &arr[i].mark3);
}
4. 打印学生信息的函数
定义了一个名为print
的函数,该函数同样接收一个指向student
类型的指针arr
和一个整数i
作为参数。这个函数的作用是使用printf
函数将指定索引i
的学生信息打印到标准输出。
void print(struct student *arr,int i)
{
printf("%s,", arr[i].student_id);
printf("%s,", arr[i].name);
printf("%d,", arr[i].mark1);
printf("%d,", arr[i].mark2);
printf("%d\n", arr[i].mark3);
}
5. 主函数
main
函数是程序的入口点。首先,定义了一个整型变量n
来存储学生数量,并声明了一个student
类型的数组arr
,用来存储所有学生的信息,数组的大小定义为100,意味着最多可以存储100个学生的信息。
int n;
struct student arr[100];
6. 读取学生数量
使用scanf
函数读取用户输入的学生数量n
。
scanf("%d", &n);
7. 输入循环
通过一个for
循环,从0到n-1
,对每个学生调用input
函数,将用户输入的学生信息存入数组arr
中。
for (int i = 0; i < n; i++)
{
input(&arr,i);
}
8. 打印循环
另一个for
循环,同样从0到n-1
,对每个学生调用print
函数,将数组arr
中存储的学生信息打印到屏幕上。
for (int i = 0; i < n; i++)
{
print(&arr,i);
}
9. 程序结束
main
函数返回0,表示程序正常结束。
return 0;
源代码
#include <stdio.h>
#include <string.h>
struct student
{
char student_id[50];
char name[20];
int mark1;
int mark2;
int mark3;
};
void input(struct student *arr,int i)
{
scanf("%s",arr[i].student_id);
scanf("%s", arr[i].name);
scanf("%d", &arr[i].mark1);
scanf("%d", &arr[i].mark2);
scanf("%d", &arr[i].mark3);
}
void print(struct student *arr,int i)
{
printf("%s,", arr[i].student_id);
printf("%s,", arr[i].name);
printf("%d,", arr[i].mark1);
printf("%d,", arr[i].mark2);
printf("%d\n", arr[i].mark3);
}
int main(void)
{
int n;
struct student arr[100];
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
input(&arr,i);
}
for (int i = 0; i < n; i++)
{
print(&arr,i);
}
return 0;
}