编写一个C程序,实现以下功能:定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中
| 編寫一個C程序,實(shí)現(xiàn)以下功能: 定義一個學(xué)生結(jié)構(gòu)體Student(含學(xué)號、姓名、年齡、身高)和一個函數(shù)sort(struct Student *p),該函數(shù)使用選擇排序法按年齡由小到大排序。在主函數(shù)中輸入10個學(xué)生的學(xué)號、姓名、年齡和身高,調(diào)用sort函數(shù)對學(xué)生數(shù)據(jù)排序,最后輸出排序后的學(xué)生全部信息。 |
比較結(jié)構(gòu)體部分成員,交換整個結(jié)構(gòu)體的思維。
#define _CRT_SECURE_NO_WARNINGS 1 /*編寫一個C程序,實(shí)現(xiàn)以下功能: 定義一個學(xué)生結(jié)構(gòu)體Student(含學(xué)號、姓名、年齡、身高) 和一個函數(shù)sort(struct Student *p), 該函數(shù)使用選擇排序法按年齡由小到大排序。 在主函數(shù)中輸入10個學(xué)生的學(xué)號、姓名、年齡和身高, 調(diào)用sort函數(shù)對學(xué)生數(shù)據(jù)排序,最后輸出排序后的學(xué)生全部信息。 */ #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) {//比較的是結(jié)構(gòu)體部分成員,但對整個結(jié)構(gòu)體交換。則需要創(chuàng)建一個新的結(jié)構(gòu)體。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("要創(chuàng)建學(xué)生對象的個數(shù):");scanf("%d", &n);for (int i = 0; i < n; i++){printf("輸入學(xué)生id:");scanf("%d", &stu[i].id);printf("輸入學(xué)生姓名:");scanf("%s", &stu[i].Name);printf("輸入學(xué)生年齡:");scanf("%d", &stu[i].age);printf("輸入學(xué)生身高:");scanf("%f", &stu[i].tell);}Sort(stu); //這里對于數(shù)組而言,直接傳入數(shù)組名即可,但如果是其他數(shù)據(jù),則需要傳入地址的方式, //因?yàn)閭鲄⒉⒉荒芨淖儗?shí)參的值,只能通過傳址的方式來改值, //對于數(shù)組來說,arr[]可以改寫成*arr,也就是指針形式。所以可以直接傳數(shù)組名 }?我犯得一些錯誤,
一:打印出來燙燙燙,
可能存在的原因是:1.字符串沒有結(jié)束符 2.數(shù)據(jù)輸入有問題
我一開始寫的是
scanf("%s",stu[i].Name[MAX]);這里Name后面不應(yīng)有方括號,%s本意就是輸出一個字符串。
二:數(shù)據(jù)重復(fù)
一開始以為是淺拷貝導(dǎo)致數(shù)據(jù)沒有完全達(dá)成轉(zhuǎn)換,而我只會C++的深拷貝處理,對于C的深拷貝要全部數(shù)據(jù)都進(jìn)行替換感覺很麻煩,詢問之后才知道原來是冒泡排序?qū)戝e了。。。
?
總結(jié),馬虎害死人,之后的學(xué)習(xí)會涉及到更多的數(shù)據(jù)處理,萬一搞錯一點(diǎn)很難處理,所以還是要細(xì)心排查啊。淚目?
也算是有所成長了,這些地方一直沒有練到
總結(jié)
以上是生活随笔為你收集整理的编写一个C程序,实现以下功能:定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的图书管理项目教程_基于py
- 下一篇: 电脑中linux系统在哪里设置密码,li