33.对学生结构体的数据进行修改

程序通过定义学生结构体变量,存储了学号、姓名、和3门课的成绩,函数fun的功能是讲形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。


#include<stdio.h>
#include<string.h>
struct student
{
	long sno;
	char name[10];
	float score[3];

};

struct student fun(struct student a)
{
	int i;
	a.sno = 1002;
	strcpy_s(a.name,10, "LiSi");
	for (i = 0;i < 3;i++)
		a.score[i]+= 1;
	return a;

}
int main()
{
	struct student s = { 1001,"ZhangSan",95,80,88 }, t;
	int i;
	printf("\n\nThe original data:\n");
	printf("\nNo:%ld   Name:%s\nScore: ", s.sno, s.name);
	for (i = 0;i < 3;i++)
		printf("%6.2f", s.score[i]);
	printf("\n");
	t = fun(s);
	printf("\nThe data after modified:\n");
	printf("\nNo:%ld  Name :%s\n  Score: ", t.sno, t.name);
	for (i = 0;i < 3;i++)
		printf("%6.2f", t.score[i]);
	printf("\n");
	getchar();
	return 0;

}


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要细心分析和编写代码。我将分步骤给出程序分析。 1. 定义学生结构体 首先,我们需要定义一个学生结构体,用于存储学生的基本信息。结构体包括学生编号、姓名、性别、年龄、成绩等信息。结构体定义如下: ``` struct Student { int id; // 学生编号 char name[20]; // 姓名 char sex; // 性别 int age; // 年龄 float score; // 成绩 }; ``` 2. 录入学生信息 接下来,我们需要实现录入学生信息的功能。我们可以使用数组来存储学生信息,然后通过循环和输入函数逐个录入学生信息。录入学生信息的代码如下: ``` #define MAX_SIZE 100 // 最大学生人数 int count = 0; // 学生总人数 Student students[MAX_SIZE]; // 学生数组 void addStudent() { if (count == MAX_SIZE) { printf("学生人数已满,无法添加新学生。\n"); return; } Student s; printf("请输入学生编号:"); scanf("%d", &s.id); printf("请输入学生姓名:"); scanf("%s", s.name); printf("请输入学生性别(男/女):"); scanf(" %c", &s.sex); printf("请输入学生年龄:"); scanf("%d", &s.age); printf("请输入学生成绩:"); scanf("%f", &s.score); students[count++] = s; printf("学生信息添加成功。\n"); } ``` 3. 打印学生信息 接下来,我们需要实现打印学生信息的功能。我们可以使用循环遍历学生数组,然后逐个打印学生信息。打印学生信息的代码如下: ``` void printStudents() { if (count == 0) { printf("学生人数为 0,无法打印学生信息。\n"); return; } printf("学生编号\t姓名\t性别\t年龄\t成绩\n"); for (int i = 0; i < count; i++) { printf("%d\t%s\t%c\t%d\t%.2f\n", students[i].id, students[i].name, students[i].sex, students[i].age, students[i].score); } } ``` 4. 统计学生人数 接下来,我们需要实现统计学生人数的功能。我们可以使用变量记录学生总人数,然后在需要统计的时候输出即可。统计学生人数的代码如下: ``` void countStudents() { printf("学生总人数为:%d\n", count); } ``` 5. 查找学生信息 接下来,我们需要实现查找学生信息的功能。我们可以使用循环遍历学生数组,然后根据输入的学生编号查找学生信息。查找学生信息的代码如下: ``` void searchStudent() { if (count == 0) { printf("学生人数为 0,无法查找学生信息。\n"); return; } int id; printf("请输入要查找的学生编号:"); scanf("%d", &id); for (int i = 0; i < count; i++) { if (students[i].id == id) { printf("学生编号\t姓名\t性别\t年龄\t成绩\n"); printf("%d\t%s\t%c\t%d\t%.2f\n", students[i].id, students[i].name, students[i].sex, students[i].age, students[i].score); return; } } printf("未找到学生编号为 %d 的学生。\n", id); } ``` 6. 修改学生信息 接下来,我们需要实现修改学生信息的功能。我们可以使用循环遍历学生数组,然后根据输入的学生编号修改学生信息。修改学生信息的代码如下: ``` void updateStudent() { if (count == 0) { printf("学生人数为 0,无法修改学生信息。\n"); return; } int id; printf("请输入要修改学生编号:"); scanf("%d", &id); for (int i = 0; i < count; i++) { if (students[i].id == id) { printf("请输入学生姓名:"); scanf("%s", students[i].name); printf("请输入学生性别(男/女):"); scanf(" %c", &students[i].sex); printf("请输入学生年龄:"); scanf("%d", &students[i].age); printf("请输入学生成绩:"); scanf("%f", &students[i].score); printf("学生信息修改成功。\n"); return; } } printf("未找到学生编号为 %d 的学生。\n", id); } ``` 7. 删除学生信息 最后,我们需要实现删除学生信息的功能。我们可以使用循环遍历学生数组,然后根据输入的学生编号删除学生信息。删除学生信息的代码如下: ``` void deleteStudent() { if (count == 0) { printf("学生人数为 0,无法删除学生信息。\n"); return; } int id; printf("请输入要删除的学生编号:"); scanf("%d", &id); for (int i = 0; i < count; i++) { if (students[i].id == id) { for (int j = i; j < count - 1; j++) { students[j] = students[j + 1]; } count--; printf("学生信息删除成功。\n"); return; } } printf("未找到学生编号为 %d 的学生。\n", id); } ``` 8. 按成绩排序 如果需要按成绩排序,我们可以使用冒泡排序或快速排序等算法进行排序。这里以冒泡排序为例,按成绩排序的代码如下: ``` void sortByScore() { if (count == 0) { printf("学生人数为 0,无法按成绩排序。\n"); return; } for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - i - 1; j++) { if (students[j].score < students[j + 1].score) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } printf("学生信息按成绩排序成功。\n"); } ``` 9. 保存学生信息至文件 最后,我们需要将学生信息保存至文件。我们可以使用文件读写函数,将学生信息逐个写入文件。保存学生信息至文件的代码如下: ``` void saveStudentsToFile() { FILE *fp = fopen("students.txt", "w"); if (fp == NULL) { printf("文件打开失败。\n"); return; } for (int i = 0; i < count; i++) { fprintf(fp, "%d %s %c %d %.2f\n", students[i].id, students[i].name, students[i].sex, students[i].age, students[i].score); } fclose(fp); printf("学生信息保存成功。\n"); } ``` 10. 从文件读取学生信息 另外,如果再次启动程序时,我们需要自动读取学生数据。我们可以使用文件读写函数,逐行读取文件学生信息,并存储到学生数组。从文件读取学生信息的代码如下: ``` void readStudentsFromFile() { FILE *fp = fopen("students.txt", "r"); if (fp == NULL) { printf("文件打开失败。\n"); return; } while (!feof(fp)) { Student s; fscanf(fp, "%d %s %c %d %f\n", &s.id, s.name, &s.sex, &s.age, &s.score); students[count++] = s; } fclose(fp); printf("学生信息读取成功。\n"); } ``` 最后,我们可以将所有功能整合到一个主函数,完整的程序代码如下:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值