版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、隨機點名2022/8/41#include #include #include #include int main() int n, sel; unsigned seed = time(NULL);/獲得當前系統(tǒng)時間,作為種子 srand(seed); /調(diào)用種子函數(shù),為rand()設置生成偽隨機數(shù)的種子 printf(隨機提問程序準備就緒!nn請問需要幾位同學回答問題?n=); scanf(%d, &n); while (n0) n-; while (sel=rand()%71 )=4006);/學號從3888開始 printf(n這次要回答提問的同學是: 2332012220%4dn, s
2、el); if (n0) printf(n還有%d位同學,按任意鍵繼續(xù)n, n); getch(); /接受輸入但不回顯 printf(n提問完畢!n); return 0;習題1下列代碼有什么問題?該如何修改?2022/8/42#include #include int main() char string10, str10; int i; for (i=0; i10; i+) stri = a+i; strcpy(string, str); printf(%s, string); return 0;習題2下列代碼有什么問題?該如何修改?2022/8/43#include void fun(
3、char a10) char c=a3; printf(%c, c);int main() char b10=abcdefg; fun(b10); return 0;復習回顧上次課的內(nèi)容:為什么需要結構體?什么是結構體類型什么是結構體變量怎樣申明結構體類型怎樣定義結構體變量2022/8/44結構體之水滸傳hero排名性別天罡地煞名姓名江湖綽號職位使用的武器Luda13M天孤星魯智深花和尚步軍頭領水磨禪杖Husanniang59F地慧星扈三娘一丈青馬軍頭領日月雙刀Songjiang1M天魁星宋江及時雨總頭領無struct hero int number; char sex; char star_
4、name20; char name20; char nickname20; char position20; char weapon20;“.”運算符成員運算符,一般和結構體變量名稱一起使用,用來指定結構體變量的成員引用結構體變量的一般形式 結構體變量名.成員名wusong.number+;scanf(%s, wusong.weapon);printf(%s, wusong.nickname);#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,
5、M, “123 Beijing Road”; a.num=10010; 對printf(“%sn”,a); 不對 必須先定義結構體變量,才能對其進行引用! 不能對結構體變量整體進行諸如輸入/輸出的操作!#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,M, “123 Beijing Road”; b=a; 對struct Student b;b.num+; 對 C語言允許兩個相同類型的結構體變量之間進行整體賦值 結構體成員變量可以像普通變量一樣
6、參與各種運算和操作#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,M, “123 Beijing Road”; scanf(%ld,&a.num); 對printf(%o,&a); 對scanf(“%ld,%s,%c,%sn”,&a); 錯 可以引用結構體變量地址,也可以引用結構體成員變量的地址#include int main() struct Date int month; int day; int year; ;struct Stu i
7、nt num;char name20; char sex;int age; struct Date birthday; char addr30; a,b;a.birthday.month=12; 對a.age=10; b.age=9; 對sum=a.age+b.age; 對 如果一個結構體變量的成員又是一個結構體類型,引用時要用成員運算符逐級遍歷到最底層的成員。 例9.2 輸入兩個學生的學號、姓名和成績,輸出成績較高學生的學號、姓名和成績解題思路:(1)定義兩個結構相同的結構體變量student1和student2;(2)分別輸入兩個學生的學號、姓名和成績;(3)比較兩個學生的成績,如果學生1
8、的成績高于學生2,就輸出學生1的全部信息,如果學生2的成績高于學生1,就輸出學生2的全部信息。如果二者相等,輸出2個學生的全部信息#include int main() struct Student int num; char name20; float score; student1,student2; scanf(%d%s%f,&student1.num, , &student1.score); scanf(“%d%s%f”,&student2.num, , &student2.score); 不能加& printf(The higher
9、 score is:n); if (student1.scorestudent2.score) printf(%d %s %6.2fn,student1.num, , student1.score); else if (student1.scorestudent2.score) printf(%d %s %6.2fn,student2.num, , student2.score); else printf(%d %s %6.2fn,student1.num, , student1.score); printf(%d
10、%s %6.2fn,student2.num, , student2.score); return 0;9.2 使用結構體數(shù)組9.2.1定義結構體數(shù)組9.2.2 結構體數(shù)組的應用舉例9.2.1定義結構體數(shù)組 例9.3 有3個候選人,每個選民只能投票選一人,要求編一個統(tǒng)計選票的程序,先后輸入被選人的名字,最后輸出各人得票結果。9.2.1定義結構體數(shù)組解題思路:設一個結構體數(shù)組,數(shù)組中包含3個元素每個元素中的信息應包括候選人的姓名(字符型)和得票數(shù)(整型)輸入被選人的姓名,然后與數(shù)組元素中的“姓名”成員比較,如果相同,就給這個元素中的“得票數(shù)”成員的值加1輸出所有元素的信
11、息#include #include struct Person char name20; int count; leader3=“Li”,0,“Zhang”,0,“Sun”,0; 全局的結構體數(shù)組namecountleader0Li0Zhang0Sun0int main() int i,j; char leader_name20; for (i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name, )=0) leaderj.count+; for(i=0;i3;i+) pri
12、ntf(%5s:%dn“,, leaderi.count); return 0;leaderj.count=leaderj.count+1;int main() int i,j; char leader_name20; for (i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name, )=0) leaderj.count+; for(i=0;i3;i+) printf(%5s:%dn“,, leaderi.count); ret
13、urn 0;說明:(1)定義結構體數(shù)組一般形式是 struct 結構體名 成員表列 數(shù)組名數(shù)組長度; 先聲明一個結構體類型,然后再用此類型定義結構體數(shù)組: 結構體類型 數(shù)組名數(shù)組長度; 如: struct Person leader3; 說明:(2)對結構體數(shù)組初始化的形式是在定義數(shù)組的后面加上:初值表列; 如:struct Person leader3= Li,0,Zhang,0,Fun,0; 9.2.2 結構體數(shù)組的應用舉例 例9.4 有n個學生的信息(包括學號、姓名、成績),要求按照成績的高低順序輸出各學生的信息。解題思路:用結構體數(shù)組存放n個學生信息,采用選擇法對各元素進行排序(進行比
14、較的是各元素中的成績)。#include struct Student int num; char name20; float score; ; int main() struct Student stu5=10101,Zhang,78 , 10103,Wang,98.5, 10106,Li, 86 , 10108,“Ling”, 73.5, 10110,“Fun”, 100 ; struct Student temp; const int n = 5 ; int i,j,k;常變量若人數(shù)變?yōu)?030#include struct Student int num; char name20; f
15、loat score; ; int main() struct Student stu5=10101,Zhang,78 , 10103,Wang,98.5, 10106,Li, 86 , 10108,“Ling”, 73.5, 10110,“Fun”, 100 ; struct Student temp; const int n = 5 ; int i,j,k;#define N 5注意temp的類型 printf(The order is:n); for(i=0;in-1;i+) k=i; for(j=i+1;jstuk.score) k=j; temp=stuk; stuk=stui; s
16、tui=temp; for(i=0;in;i+) printf(%6d %8s %6.2fn, stui.num,,stui.score); printf(n); return 0;寫法上與普通變量一致9.3 結構體指針9.3.1 指向結構體變量的指針9.3.2 指向結構體數(shù)組的指針9.3.3 用結構體變量和結構體變量的指針作函數(shù)參數(shù)9.3.1 指向結構體變量的指針指向結構體對象的指針變量既可以指向結構體變量,也可以用來指向結構體數(shù)組中的元素。指針變量的基類型必須與結構體變量的類型相同。例如: struct Student *pt; 9.3.1 指向結構體變量的指針 例9.5
17、 通過指向結構體變量的指針變量輸出結構體變量中成員的信息。解題思路:在已有的基礎上,本題要解決兩個問題:怎樣對結構體變量成員賦值;怎樣通過指向結構體變量的指針訪問結構體變量中成員。#include #include int main() struct Student long num; char name20; char sex; float score; ; struct Student stu_1; struct Student * p; p=&stu_1; stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_1.sex=M; stu_1.s
18、core=89.5; printf(No.:%ldn”,stu_1.num); printf(name:%sn,stu_1.name); printf(sex:%cn”,stu_1.sex); printf(”score:%5.1fn”,stu_1.score); return 0;stu_110101Li LinM89.5p struct Student stu_1; struct Student * p; p=&stu_1; stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_1.sex=M; stu_1.score=89.5; printf
19、(No.:%ldn”,stu_1.num); printf(name:%sn,stu_1.name); printf(sex:%cn”,stu_1.sex); printf(”score:%5.1fn”,stu_1.score); return 0;stu_110101Li LinM89.5p(*p).num(*p).name(*p).sex(*p).score說明:為了使用方便和直觀,C語言允許把(*p).num用p-num來代替(*p).name等價于p-name如果p指向一個結構體變量stu,以下等價: stu.成員名(如stu.num) (*p).成員名(如(*p).num) p-成員
20、名(如p-num)9.3.2 指向結構體數(shù)組的指針 例9.6 有3個學生的信息,放在結構體數(shù)組中,要求輸出全部學生的信息。解題思路:用指向結構體變量的指針處理(1)聲明struct Student,并定義結構體數(shù)組、初始化(2)定義指向struct Student類型指針p(3)使p指向數(shù)組首元素,輸出元素中各信息(4)使p指向下一個元素,輸出元素中各信息(5)再使p指向結構體數(shù)組的下一個元素,輸出它指向的元素中的有關信息#include struct Student int num; char name20; char sex; int age;struct Student stu3= 10
21、101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20 ;int main() struct Student *p; printf( No. Name sex agen); for(p=stu;pnum, p-name, p-sex, p-age); return 0;10101Li LinM1810102Zhang FangM1910104Wang MinF20stu0stu1stu2int main() struct Student *p; printf( No. Name sex agen); for(p=stu;pnum,
22、p-name, p-sex, p-age); return 0;10101Li LinM1810102Zhang FangM1910104Wang MinF20pstu0stu1stu2int main() struct Student *p; printf( No. Name sex agen); for(p=stu;pnum, p-name, p-sex, p-age); return 0;10101Li LinM1810102Zhang FangM1910104Wang MinF20pstu0stu1stu2int main() struct Student *p; printf( No
23、. Name sex agen); for(p=stu;pnum, p-name, p-sex, p-age); return 0;10101Li LinM1810102Zhang FangM1910104Wang MinF20pstu0stu1stu29.3.3 用結構體變量和結構體變量的指針作函數(shù)參數(shù)將一個結構體變量的值傳遞給另一個函數(shù),有3個方法。(1) 用結構體變量的成員作參數(shù)。 例如,用stu1.num或作函數(shù)實參,將實參值傳給形參。用法和用普通變量作實參是一樣的,屬于“值傳遞”方式。應當注意實參與形參的類型保持一致。(2) 用結構體變量作實參。用結構體變量作實參時
24、,將結構體變量所占的內(nèi)存單元的內(nèi)容全部按順序傳遞給形參,形參也必須是同類型的結構體變量在函數(shù)調(diào)用期間形參也要占用內(nèi)存單元。這種傳遞方式在空間和時間上開銷較大在被調(diào)用函數(shù)期間改變形參(也是結構體變量)的值,不能返回主調(diào)函數(shù)一般較少用這種方法(3)用指向結構體變量(或數(shù)組元素)的指針作實參,將結構體變量(或數(shù)組元素)的地址傳給形參。 例9.7 有n個結構體變量,內(nèi)含學生學號、姓名和3門課程的成績。要求輸出平均成績最高的學生的信息(包括學號、姓名、3門課程成績和平均成績)。解題思路:將n個學生的數(shù)據(jù)表示為結構體數(shù)組。按照功能函數(shù)化的思想,分別用3個函數(shù)來實現(xiàn)不同的功能:用input函數(shù)輸入數(shù)據(jù)和求各
25、學生平均成績用max函數(shù)找平均成績最高的學生用print函數(shù)輸出成績最高學生的信息在主函數(shù)中先后調(diào)用這3個函數(shù),用指向結構體變量的指針作實參。最后得到結果。本程序假設n=3#include #define N 3struct Student int num; char name20; float score3; float aver; ;4個成員輸入前3個成員值計算最后成員值int main() void input(struct Student stu); struct Student max(struct Student stu); void print(struct Student st
26、u); struct Student stuN,*p=stu; input(p); print(max(p); return 0;void input(struct Student stu) int i; printf(請輸入各學生的信息: 學號、姓名、三門課成績:n); for(i=0;iN;i+) scanf(%d %s %f %f %f, &stui.num,, &stui.score0,&stui.score1, &stui.score2); stui.aver=(stui.score0+ stui.score1+stui.score2)/3.0; 輸入第1個成員值輸
27、入第2個成員值輸入第3個成員值計算第4個成員值stu0stu1stu2stu10101Li78 89 9888.33i=0void input(struct Student stu) int i; printf(請輸入各學生的信息: 學號、姓名、三門課成績:n); for(i=0;iN;i+) scanf(%d %s %f %f %f, &stui.num,, &stui.score0,&stui.score1, &stui.score2); stui.aver=(stui.score0+ stui.score1+stui.score2)/3.0; 輸入第1個成員值輸入第2個
28、成員值輸入第3個成員值計算第4個成員值stu0stu1stu2stu10101Li78 89 9888.3310103Wang98.5 87 6984.83i=1void input(struct Student stu) int i; printf(請輸入各學生的信息: 學號、姓名、三門課成績:n); for(i=0;iN;i+) scanf(%d %s %f %f %f, &stui.num,, &stui.score0,&stui.score1, &stui.score2); stui.aver=(stui.score0+ stui.score1+stui.score2
29、)/3.0; 輸入第1個成員值輸入第2個成員值輸入第3個成員值計算第4個成員值stu0stu1stu2stu10101Li78 89 9888.3310103Wang98.5 87 6984.8310106Sun 88 76.5 8984.5i=2struct Student max(struct Student stu) int i,m=0; for(i=0;istum.aver) m=i; return stum; stu0stu1stu2stu10101Li78 89 9888.3310103Wang98.5 87 6984.8310106Sun 88 76.5 8984.5最大返回vo
30、id print(struct Student stud) printf(n成績最高的學生是:n);printf(學號:%dn姓名:%sn 三門課成績:%5.1f,%5.1f,%5.1fn 平均成績:%6.2fn”, stud.num, ,stud.score0, stud.score1,stud.score2,stud.aver); stud10101Li78 89 9888.3310103Wang98.5 87 6984.8310106Sun 88 76.5 8984.5numnamescoreaverstu0stu1stu2以上3個函數(shù)的調(diào)用,情況各不相同:調(diào)用input函數(shù)時,實參是指針變量,形參是結構體數(shù)組,傳遞的是結構體元素的地址,函數(shù)無返回值。調(diào)用max函數(shù)時,實參是指針變量,形參是結構體數(shù)組,傳遞的是結構體元素的地址,函數(shù)的返回值是結構體類型數(shù)據(jù)。調(diào)用print函數(shù)時,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)化工廠清潔勞務協(xié)作協(xié)議(2024年度)一
- 二零二五年度電子商務O2O平臺合作協(xié)議3篇
- 2025年度產(chǎn)業(yè)園區(qū)新能源車充電基礎設施建設協(xié)議4篇
- 2025年度節(jié)能環(huán)保產(chǎn)業(yè)項目合作協(xié)議書4篇
- 2025版電商供應鏈金融合作框架協(xié)議4篇
- 2025年度企業(yè)差旅管理服務全面合作協(xié)議4篇
- 個人投資企業(yè)股份合作簡明協(xié)議版A版
- 2025年度復雜地質(zhì)條件邊坡支護與護壁樁施工技術規(guī)范合同3篇
- 專業(yè)印刷服務訂購協(xié)議集錦版B版
- 2024綜合汽車維修服務協(xié)議典范版
- TB 10010-2008 鐵路給水排水設計規(guī)范
- 黑色素的合成與美白產(chǎn)品的研究進展
- 建筑史智慧樹知到期末考試答案2024年
- 金蓉顆粒-臨床用藥解讀
- 社區(qū)健康服務與管理教案
- 2023-2024年家政服務員職業(yè)技能培訓考試題庫(含答案)
- 2023年(中級)電工職業(yè)技能鑒定考試題庫(必刷500題)
- 藏歷新年文化活動的工作方案
- 果酒釀造完整
- 第4章-理想氣體的熱力過程
- 生涯發(fā)展展示
評論
0/150
提交評論