1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 编写一个C程序 实现以下功能:定义一个学生结构体Student(含学号 姓名 年龄 身高)

编写一个C程序 实现以下功能:定义一个学生结构体Student(含学号 姓名 年龄 身高)

时间:2024-02-20 00:10:08

相关推荐

编写一个C程序 实现以下功能:定义一个学生结构体Student(含学号 姓名 年龄 身高)

比较结构体部分成员,交换整个结构体的思维。

#define _CRT_SECURE_NO_WARNINGS 1/*编写一个C程序,实现以下功能:定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中输入10个学生的学号、姓名、年龄和身高,调用sort函数对学生数据排序,最后输出排序后的学生全部信息。*/#define MAX 20#include<stdio.h>static int n;struct Student {int id;char Name[MAX];int age;float tell;};void Sort(Student *p) {//选择排序排序年龄。for (int i = 0; i < n ; i++) {for (int j = 0; j < n - i -1; j++) {if (p[j+1].age < p[j].age) {//比较的是结构体部分成员,但对整个结构体交换。则需要创建一个新的结构体。Student tmp = p[j];p[j] = p[j + 1];p[j + 1] = tmp;}}}for (int i = 0; i < n; i++) printf("%d\t%s\t%d\t%f\t\n", p[i].id,p[i].Name, p[i].age, p[i].tell);}int main() {Student stu[MAX];printf("要创建学生对象的个数:");scanf("%d", &n);for (int i = 0; i < n; i++){printf("输入学生id:");scanf("%d", &stu[i].id);printf("输入学生姓名:");scanf("%s", &stu[i].Name);printf("输入学生年龄:");scanf("%d", &stu[i].age);printf("输入学生身高:");scanf("%f", &stu[i].tell);}Sort(stu);//这里对于数组而言,直接传入数组名即可,但如果是其他数据,则需要传入地址的方式,//因为传参并不能改变实参的值,只能通过传址的方式来改值,//对于数组来说,arr[]可以改写成*arr,也就是指针形式。所以可以直接传数组名}

我犯得一些错误,

一:打印出来烫烫烫,

可能存在的原因是:1.字符串没有结束符 2.数据输入有问题

我一开始写的是

scanf("%s",stu[i].Name[MAX]);

这里Name后面不应有方括号,%s本意就是输出一个字符串。

二:数据重复

一开始以为是浅拷贝导致数据没有完全达成转换,而我只会C++的深拷贝处理,对于C的深拷贝要全部数据都进行替换感觉很麻烦,询问之后才知道原来是冒泡排序写错了。。。

总结,马虎害死人,之后的学习会涉及到更多的数据处理,万一搞错一点很难处理,所以还是要细心排查啊。泪目

也算是有所成长了,这些地方一直没有练到

编写一个C程序 实现以下功能:定义一个学生结构体Student(含学号 姓名 年龄 身高)和一个函数sort(struct Student *p) 该函数使用选择排序法按年龄由小到大排序。在主函数中

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。