歸納編程學習的感悟,
記錄奮斗路上的點滴,
希望能幫到一樣刻苦的你!
如有不足歡迎指正!
共同學習交流!
🌎歡迎各位→點贊 👍+ 收藏? + 留言?📝
? ? ?路還在繼續,夢還在期許。天高云遠,至少看得見!
?一起加油!?
目錄
一、題目:
二、分析:
三、知識點:
????????指向結構體的指針變量作為函數參數
????????結構體指針與函數?
四、代碼實現:?
五、運行結果(這里假設3為教師):
?編輯?
?六、總結:
一、題目:
????????某學校增加教師的工資。假設工資根據教師的職稱增加:教授增加 500元副教授增加 300 元,講師增加 200 元,助教增加 100 元。教師的信息有姓名、年齡、職和工資等,編寫程序,計算每位教師增加后的工資(假設共有 100 位老師)。
二、分析:
????????分析:教師的基本信息包括: name(姓名)、age(年齡)、post(職稱)和 wages(工資)。采用結構體類型存儲基本信息。增加工資用 add()函數實現,實參和形參采用指向結構體類型的指針。
三、知識點:
????????指向結構體的指針變量作為函數參數
????????函數間傳遞結構體數據時,函數參數可以是結構體變量的成員,也可以是結構體變量,還可以是指向結構體的指針。
????????常見的做法是將指向結構體的指針作為函數的實參,傳遞給調用的函數。這種傳遞方式相當于地址傳遞,指針形參變量和實參指針指向同一內存空間。需要注意的是,采用這種參數傳遞方式,在被調用的函數中如果對結構體成員進行賦值,則會改變上一級函數中結構體變量的值。
????????結構體指針與函數?
????????C 語言函數的參數傳遞都是傳值的,一些應用程序需要用結構體數據作為參數進行傳
遞。一般情況下,雖然說 C 語言允許傳遞結構體數據,但是結構體使用的存儲空間可能比較大,這就可能導致傳送數據量過大,影響程序的運行效率。如果選擇結構體變量作為數,那么只能在該結構體使用的字節數比較少時使用。????????函數之間如果需要傳遞結構體數據,有經驗的程序員一般采用傳遞結構體指針的方法這樣就大幅減少了參數傳遞時的數據傳送量,也意味著程序運行速度得以提高。
????????函數返回時道理也一樣,在結構體的字節數比較多時,應該盡量避免返回一個結構類型的數據,而盡可能返回一個指向結構體的指針變量。
四、代碼實現:?
#include<stdio.h>
#include<string.h>
#define N 100struct teach{//teach結構體定義 char name[11];int age;char post[11];double wages;
};double add(struct teach *);//add函數聲明 int main(){struct teach man[N];int i;for(i=0;i<N;i++){//輸入教師的基本信息 printf("輸入第%d個教師的基本信息\n",i+1);printf("姓名: ");scanf("%s",man[i].name);printf("年齡:");scanf("%d",&man[i].age);printf("職稱:");scanf("%s",man[i].post);printf("原工資:");scanf("%lf",&man[i].wages); }for(i=0;i<N;i++){//對每個教師調用add函數 printf("姓名:%s 調整后的工資:%.2f\n",man[i].name,add(&man[i]));}
}double add(struct teach *q){double addwage;if(strcmp(q->post,"教授")==0){q->wages+=500;}else if(strcmp(q->post,"副教授")==0){q->wages+=300;}else if(strcmp(q->post,"講師")==0){q->wages+=200;}else {q->wages+=100;}addwage=q->wages;return addwage;
}
五、運行結果(這里假設3為教師):
?六、總結:
? ? ? ? 利用結構體可以將多個相同或不同類型的數據組合在一起構成新數據類型。
? ? ? ? 通常在源程序文件的開始部分定義結構體類型,以便本文件的所有函數中都能用它定義變量,數組和指針。
? ? ? ? 當然也可以在函數中聲明結構體類型,其有效范圍僅限與該函數。
????????最后,希望本篇文章對你有所幫助,也希望可以支持支持博主,后續博主也會定期更新學習記錄,記錄學習過程中的點點滴滴。若這篇文章中有哪些不正確的內容,歡迎大家在評論區和我交流討論!