c語(yǔ)言課件第9章_第1頁(yè)
c語(yǔ)言課件第9章_第2頁(yè)
c語(yǔ)言課件第9章_第3頁(yè)
c語(yǔ)言課件第9章_第4頁(yè)
c語(yǔ)言課件第9章_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、隨機(jī)點(diǎn)名2022/8/41#include #include #include #include int main() int n, sel; unsigned seed = time(NULL);/獲得當(dāng)前系統(tǒng)時(shí)間,作為種子 srand(seed); /調(diào)用種子函數(shù),為rand()設(shè)置生成偽隨機(jī)數(shù)的種子 printf(隨機(jī)提問(wèn)程序準(zhǔn)備就緒!nn請(qǐng)問(wèn)需要幾位同學(xué)回答問(wèn)題?n=); scanf(%d, &n); while (n0) n-; while (sel=rand()%71 )=4006);/學(xué)號(hào)從3888開(kāi)始 printf(n這次要回答提問(wèn)的同學(xué)是: 2332012220%4dn, s

2、el); if (n0) printf(n還有%d位同學(xué),按任意鍵繼續(xù)n, n); getch(); /接受輸入但不回顯 printf(n提問(wèn)完畢!n); return 0;習(xí)題1下列代碼有什么問(wèn)題?該如何修改?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;習(xí)題2下列代碼有什么問(wèn)題?該如何修改?2022/8/43#include void fun(

3、char a10) char c=a3; printf(%c, c);int main() char b10=abcdefg; fun(b10); return 0;復(fù)習(xí)回顧上次課的內(nèi)容:為什么需要結(jié)構(gòu)體?什么是結(jié)構(gòu)體類型什么是結(jié)構(gòu)體變量怎樣申明結(jié)構(gòu)體類型怎樣定義結(jié)構(gòu)體變量2022/8/44結(jié)構(gòu)體之水滸傳hero排名性別天罡地煞名姓名江湖綽號(hào)職位使用的武器Luda13M天孤星魯智深花和尚步軍頭領(lǐng)水磨禪杖Husanniang59F地慧星扈三娘一丈青馬軍頭領(lǐng)日月雙刀Songjiang1M天魁星宋江及時(shí)雨總頭領(lǐng)無(wú)struct hero int number; char sex; char star_

4、name20; char name20; char nickname20; char position20; char weapon20;“.”運(yùn)算符成員運(yùn)算符,一般和結(jié)構(gòu)體變量名稱一起使用,用來(lái)指定結(jié)構(gòu)體變量的成員引用結(jié)構(gòu)體變量的一般形式 結(jié)構(gòu)體變量名.成員名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; 對(duì)printf(“%sn”,a); 不對(duì) 必須先定義結(jié)構(gòu)體變量,才能對(duì)其進(jìn)行引用! 不能對(duì)結(jié)構(gòu)體變量整體進(jìn)行諸如輸入/輸出的操作!#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,M, “123 Beijing Road”; b=a; 對(duì)struct Student b;b.num+; 對(duì) C語(yǔ)言允許兩個(gè)相同類型的結(jié)構(gòu)體變量之間進(jìn)行整體賦值 結(jié)構(gòu)體成員變量可以像普通變量一樣

6、參與各種運(yùn)算和操作#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); 對(duì)printf(%o,&a); 對(duì)scanf(“%ld,%s,%c,%sn”,&a); 錯(cuò) 可以引用結(jié)構(gòu)體變量地址,也可以引用結(jié)構(gòu)體成員變量的地址#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; 對(duì)a.age=10; b.age=9; 對(duì)sum=a.age+b.age; 對(duì) 如果一個(gè)結(jié)構(gòu)體變量的成員又是一個(gè)結(jié)構(gòu)體類型,引用時(shí)要用成員運(yùn)算符逐級(jí)遍歷到最底層的成員。 例9.2 輸入兩個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),輸出成績(jī)較高學(xué)生的學(xué)號(hào)、姓名和成績(jī)解題思路:(1)定義兩個(gè)結(jié)構(gòu)相同的結(jié)構(gòu)體變量student1和student2;(2)分別輸入兩個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī);(3)比較兩個(gè)學(xué)生的成績(jī),如果學(xué)生1

8、的成績(jī)高于學(xué)生2,就輸出學(xué)生1的全部信息,如果學(xué)生2的成績(jī)高于學(xué)生1,就輸出學(xué)生2的全部信息。如果二者相等,輸出2個(gè)學(xué)生的全部信息#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 使用結(jié)構(gòu)體數(shù)組9.2.1定義結(jié)構(gòu)體數(shù)組9.2.2 結(jié)構(gòu)體數(shù)組的應(yīng)用舉例9.2.1定義結(jié)構(gòu)體數(shù)組 例9.3 有3個(gè)候選人,每個(gè)選民只能投票選一人,要求編一個(gè)統(tǒng)計(jì)選票的程序,先后輸入被選人的名字,最后輸出各人得票結(jié)果。9.2.1定義結(jié)構(gòu)體數(shù)組解題思路:設(shè)一個(gè)結(jié)構(gòu)體數(shù)組,數(shù)組中包含3個(gè)元素每個(gè)元素中的信息應(yīng)包括候選人的姓名(字符型)和得票數(shù)(整型)輸入被選人的姓名,然后與數(shù)組元素中的“姓名”成員比較,如果相同,就給這個(gè)元素中的“得票數(shù)”成員的值加1輸出所有元素的信

11、息#include #include struct Person char name20; int count; leader3=“Li”,0,“Zhang”,0,“Sun”,0; 全局的結(jié)構(gòu)體數(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;說(shuō)明:(1)定義結(jié)構(gòu)體數(shù)組一般形式是 struct 結(jié)構(gòu)體名 成員表列 數(shù)組名數(shù)組長(zhǎng)度; 先聲明一個(gè)結(jié)構(gòu)體類型,然后再用此類型定義結(jié)構(gòu)體數(shù)組: 結(jié)構(gòu)體類型 數(shù)組名數(shù)組長(zhǎng)度; 如: struct Person leader3; 說(shuō)明:(2)對(duì)結(jié)構(gòu)體數(shù)組初始化的形式是在定義數(shù)組的后面加上:初值表列; 如:struct Person leader3= Li,0,Zhang,0,Fun,0; 9.2.2 結(jié)構(gòu)體數(shù)組的應(yīng)用舉例 例9.4 有n個(gè)學(xué)生的信息(包括學(xué)號(hào)、姓名、成績(jī)),要求按照成績(jī)的高低順序輸出各學(xué)生的信息。解題思路:用結(jié)構(gòu)體數(shù)組存放n個(gè)學(xué)生信息,采用選擇法對(duì)各元素進(jìn)行排序(進(jìn)行比

14、較的是各元素中的成績(jī))。#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;寫(xiě)法上與普通變量一致9.3 結(jié)構(gòu)體指針9.3.1 指向結(jié)構(gòu)體變量的指針9.3.2 指向結(jié)構(gòu)體數(shù)組的指針9.3.3 用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù)9.3.1 指向結(jié)構(gòu)體變量的指針指向結(jié)構(gòu)體對(duì)象的指針變量既可以指向結(jié)構(gòu)體變量,也可以用來(lái)指向結(jié)構(gòu)體數(shù)組中的元素。指針變量的基類型必須與結(jié)構(gòu)體變量的類型相同。例如: struct Student *pt; 9.3.1 指向結(jié)構(gòu)體變量的指針 例9.5

17、 通過(guò)指向結(jié)構(gòu)體變量的指針變量輸出結(jié)構(gòu)體變量中成員的信息。解題思路:在已有的基礎(chǔ)上,本題要解決兩個(gè)問(wèn)題:怎樣對(duì)結(jié)構(gòu)體變量成員賦值;怎樣通過(guò)指向結(jié)構(gòu)體變量的指針訪問(wèn)結(jié)構(gòu)體變量中成員。#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說(shuō)明:為了使用方便和直觀,C語(yǔ)言允許把(*p).num用p-num來(lái)代替(*p).name等價(jià)于p-name如果p指向一個(gè)結(jié)構(gòu)體變量stu,以下等價(jià): stu.成員名(如stu.num) (*p).成員名(如(*p).num) p-成員

20、名(如p-num)9.3.2 指向結(jié)構(gòu)體數(shù)組的指針 例9.6 有3個(gè)學(xué)生的信息,放在結(jié)構(gòu)體數(shù)組中,要求輸出全部學(xué)生的信息。解題思路:用指向結(jié)構(gòu)體變量的指針處理(1)聲明struct Student,并定義結(jié)構(gòu)體數(shù)組、初始化(2)定義指向struct Student類型指針p(3)使p指向數(shù)組首元素,輸出元素中各信息(4)使p指向下一個(gè)元素,輸出元素中各信息(5)再使p指向結(jié)構(gòu)體數(shù)組的下一個(gè)元素,輸出它指向的元素中的有關(guān)信息#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 用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù)將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù),有3個(gè)方法。(1) 用結(jié)構(gòu)體變量的成員作參數(shù)。 例如,用stu1.num或作函數(shù)實(shí)參,將實(shí)參值傳給形參。用法和用普通變量作實(shí)參是一樣的,屬于“值傳遞”方式。應(yīng)當(dāng)注意實(shí)參與形參的類型保持一致。(2) 用結(jié)構(gòu)體變量作實(shí)參。用結(jié)構(gòu)體變量作實(shí)參時(shí)

24、,將結(jié)構(gòu)體變量所占的內(nèi)存單元的內(nèi)容全部按順序傳遞給形參,形參也必須是同類型的結(jié)構(gòu)體變量在函數(shù)調(diào)用期間形參也要占用內(nèi)存單元。這種傳遞方式在空間和時(shí)間上開(kāi)銷較大在被調(diào)用函數(shù)期間改變形參(也是結(jié)構(gòu)體變量)的值,不能返回主調(diào)函數(shù)一般較少用這種方法(3)用指向結(jié)構(gòu)體變量(或數(shù)組元素)的指針作實(shí)參,將結(jié)構(gòu)體變量(或數(shù)組元素)的地址傳給形參。 例9.7 有n個(gè)結(jié)構(gòu)體變量,內(nèi)含學(xué)生學(xué)號(hào)、姓名和3門課程的成績(jī)。要求輸出平均成績(jī)最高的學(xué)生的信息(包括學(xué)號(hào)、姓名、3門課程成績(jī)和平均成績(jī))。解題思路:將n個(gè)學(xué)生的數(shù)據(jù)表示為結(jié)構(gòu)體數(shù)組。按照功能函數(shù)化的思想,分別用3個(gè)函數(shù)來(lái)實(shí)現(xiàn)不同的功能:用input函數(shù)輸入數(shù)據(jù)和求各

25、學(xué)生平均成績(jī)用max函數(shù)找平均成績(jī)最高的學(xué)生用print函數(shù)輸出成績(jī)最高學(xué)生的信息在主函數(shù)中先后調(diào)用這3個(gè)函數(shù),用指向結(jié)構(gòu)體變量的指針作實(shí)參。最后得到結(jié)果。本程序假設(shè)n=3#include #define N 3struct Student int num; char name20; float score3; float aver; ;4個(gè)成員輸入前3個(gè)成員值計(jì)算最后成員值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(請(qǐng)輸入各學(xué)生的信息: 學(xué)號(hào)、姓名、三門課成績(jī):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個(gè)成員值輸

27、入第2個(gè)成員值輸入第3個(gè)成員值計(jì)算第4個(gè)成員值stu0stu1stu2stu10101Li78 89 9888.33i=0void input(struct Student stu) int i; printf(請(qǐng)輸入各學(xué)生的信息: 學(xué)號(hào)、姓名、三門課成績(jī):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個(gè)成員值輸入第2個(gè)

28、成員值輸入第3個(gè)成員值計(jì)算第4個(gè)成員值stu0stu1stu2stu10101Li78 89 9888.3310103Wang98.5 87 6984.83i=1void input(struct Student stu) int i; printf(請(qǐng)輸入各學(xué)生的信息: 學(xué)號(hào)、姓名、三門課成績(jī):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個(gè)成員值輸入第2個(gè)成員值輸入第3個(gè)成員值計(jì)算第4個(gè)成員值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成績(jī)最高的學(xué)生是:n);printf(學(xué)號(hào):%dn姓名:%sn 三門課成績(jī):%5.1f,%5.1f,%5.1fn 平均成績(jī):%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個(gè)函數(shù)的調(diào)用,情況各不相同:調(diào)用input函數(shù)時(shí),實(shí)參是指針變量,形參是結(jié)構(gòu)體數(shù)組,傳遞的是結(jié)構(gòu)體元素的地址,函數(shù)無(wú)返回值。調(diào)用max函數(shù)時(shí),實(shí)參是指針變量,形參是結(jié)構(gòu)體數(shù)組,傳遞的是結(jié)構(gòu)體元素的地址,函數(shù)的返回值是結(jié)構(gòu)體類型數(shù)據(jù)。調(diào)用print函數(shù)時(shí),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論