題目鏈接在此。
我的思路
用結構體數組保存所有輸入,用max和min兩個變量(初始化為max=-1,min=101,方便更新)來保存分數的最大值和最小值,max_index和min_index兩個變量來保存分數最大值和最小值的結構體成員在結構體數組中的下標,之后輸出即可。
我的AC代碼
#include<stdio.h>struct info{ char name[12]; char stuNum[12]; int grade;}stu[10002];int main(){ int n; scanf("%d",&n); int max = -1, min = 101; int max_index, min_index; //分數最高和最低的數組下標 for(int i = 0; i < n; i++){ scanf("%s %s %d",&stu[i].name,&stu[i].stuNum,&stu[i].grade); if(stu[i].grade > max){ max = stu[i].grade; max_index = i; } if(stu[i].grade < min){ min = stu[i].grade; min_index = i; } } 《算法筆記》思路用三個結構體(結構體構成同上)temp,max,min,max.score和min.score初始化為-1和101(作用同上),一遍輸入(用temp結構體暫存),一邊比較,得出分數最大和最小的結構體,直接賦值給max或者min。
這里讓我明白,結構體竟然可以直接賦值,不過有需要注意的地方
簡單理解為:沒有指針的結構體可以直接賦值(這一塊涉及到raw point 和 smart point),有指針的結構體不能直接賦值。具體可見下面兩個參考鏈接。C語言中結構體直接賦值? why = Operator works on structs without having been defined?
代碼
#include<stdio.h>struct info{ char name[12]; char stuNum[12]; int score;}temp,max,min;int main(){ int n; scanf("%d",&n); max.score = -1; min.score = 101; for(int i = 0; i < n; i++){ scanf("%s %s %d",temp.name,temp.stuNum,&temp.score); if(temp.score > max.score){ max = temp; } if(temp.score < min.score){ min = temp; } } printf("%s %s/n",max.name,max.stuNum); printf("%s %s/n",min.name,min.stuNum); return 0;}新聞熱點
疑難解答