什么是网站什么是网址,网站 打赏功能,软件开发专业知识技能,wordpress怎么搜索代码编写一个C程序#xff0c;实现以下功能#xff1a; 定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p)#xff0c;该函数使用选择排序法按年龄由小到大排序。在主函数中输入10个学生的学号、姓名、年龄和身高#xff0c;调用sort函数… 编写一个C程序实现以下功能 定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p)该函数使用选择排序法按年龄由小到大排序。在主函数中输入10个学生的学号、姓名、年龄和身高调用sort函数对学生数据排序最后输出排序后的学生全部信息。 比较结构体部分成员交换整个结构体的思维。 #define _CRT_SECURE_NO_WARNINGS 1
/*编写一个C程序实现以下功能
定义一个学生结构体Student(含学号、姓名、年龄、身高)
和一个函数sort(struct Student *p)
该函数使用选择排序法按年龄由小到大排序。
在主函数中输入10个学生的学号、姓名、年龄和身高
调用sort函数对学生数据排序最后输出排序后的学生全部信息。
*/
#define MAX 20
#includestdio.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[j1].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的深拷贝要全部数据都进行替换感觉很麻烦询问之后才知道原来是冒泡排序写错了。。。 总结马虎害死人之后的学习会涉及到更多的数据处理万一搞错一点很难处理所以还是要细心排查啊。泪目
也算是有所成长了这些地方一直没有练到