基礎(chǔ)學習語言第7章結(jié)構(gòu)體_第1頁
基礎(chǔ)學習語言第7章結(jié)構(gòu)體_第2頁
基礎(chǔ)學習語言第7章結(jié)構(gòu)體_第3頁
基礎(chǔ)學習語言第7章結(jié)構(gòu)體_第4頁
基礎(chǔ)學習語言第7章結(jié)構(gòu)體_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 7結(jié)構(gòu)體的操作章結(jié)構(gòu)體7.1結(jié)構(gòu)體是一種自定義數(shù)據(jù)類型,有定義、新建、等基本操作。本節(jié)將講解結(jié)構(gòu)體的這些操作。在進行本節(jié)的學習時需要正確理解結(jié)構(gòu)體的作用和特點。7.1.1結(jié)構(gòu)體的理解可以用一個實例來理解什么是結(jié)構(gòu)體。假設(shè)用下面的變量來描述一個學生的信息。如果有多個學生,這些數(shù)據(jù)就無法體現(xiàn)出各自的和歸屬關(guān)系。因為每個學生都有相同類別的信息,可以把這些信息封裝成一個整體,作為一個新的數(shù)據(jù)類型。可以用下面的新數(shù)據(jù)類型來描述一個學生。當用這個類型定義一個學生后,這個學生就有了這個類型里面所有的數(shù)據(jù)。學生的各個變量與這個學生產(chǎn)生了一對一的。從這方面來說,結(jié)構(gòu)體的作用是把若干個簡單的數(shù)據(jù)類型封裝成一個

2、整體,作為一個新的數(shù)據(jù)類型。這個數(shù)據(jù)類型可以和普通數(shù)據(jù)類型一樣參與程序的運算。7.1.2結(jié)構(gòu)體的定義所謂結(jié)構(gòu)體的定義,是指列出一個結(jié)構(gòu)體中所包括的多個變量和數(shù)據(jù)類型,建立一個新的數(shù)據(jù)類型。結(jié)構(gòu)體的定義方法如下所示。struct 結(jié)構(gòu)名類型 1 變量名 1;類型 2 變量名 2;.學生數(shù)據(jù)類型 char name15; int age;char address50; int height;char name15; int age;char address50;int height;Linux 系統(tǒng)下 C 程序開發(fā)詳解結(jié)構(gòu)名是新定義的數(shù)據(jù)類型的名稱,里面變量名被稱為這個結(jié)構(gòu)體的成員。例如對上一結(jié)中

3、的學生定義一個結(jié)構(gòu)體,代碼如下所示。如果把這個結(jié)構(gòu)體作為一個新的數(shù)據(jù)類型,可以用這個數(shù)據(jù)類型新的變量。用結(jié)構(gòu)體 student幾個學生,代碼如下所示。也可以用下面這種方法直接在定義結(jié)構(gòu)體時兩個結(jié)構(gòu)變量。結(jié)構(gòu)體可以作為一個普通的數(shù)據(jù)類型,于是可以用結(jié)構(gòu)體一個數(shù)組。例如下面的代碼就是用上面定義的結(jié)構(gòu)體 student10 個學生的數(shù)組。在一個結(jié)構(gòu)體中,可以班級的結(jié)構(gòu)體,每個班有一個班另外一個結(jié)構(gòu)體更復雜的數(shù)據(jù)類型。假設(shè)需要定義一個和 50 個學生。班需要保存姓名,50 個學生可以用student 結(jié)構(gòu)體定義一個結(jié)構(gòu)體數(shù)組,代碼如下所示??梢杂眠@個班級結(jié)構(gòu)體來定義一個班,代碼如下所示。這樣,班級就是

4、一個數(shù)據(jù)類型。定義了一個 cla1 班級以后,可以這個班下面的、每一個學生的變量。例如下面的代碼使用這種方法定義學生與班級的結(jié)構(gòu)體。在程序中需要注意結(jié)構(gòu)體數(shù)組的使用。236#include <stdio.h>class cla1;struct classchar teacher20;/*定義一個字符串,表示班的姓名。*/student stu50;/*這是一個結(jié)構(gòu)體數(shù)組,表示 50 個學生。*/student stu10;struct student/*定義一個結(jié)構(gòu)體 student。*/char name15;/*姓名。*/int age;/*。*/char address50;

5、/*住址。*/int height;/*身高。*/Jim,Lily;struct student A;struct student Jim,Lily;struct student/*定義一個結(jié)構(gòu)體 student。*/char name15;/*姓名。*/int age;/*。*/char address50;/*住址。*/int height;/*身高。*/;第 11 章結(jié)構(gòu)體7.1.3結(jié)構(gòu)體的結(jié)構(gòu)體是自定義的數(shù)據(jù)類型,因此結(jié)構(gòu)體變量也可以和其他類型的變量一樣賦值、運算。不同的是結(jié)構(gòu)體本身并不能作為一個變量進行體成員的表示方式如下所示。,結(jié)構(gòu)體變量以成員作為基本變量。結(jié)構(gòu) 結(jié)構(gòu)變量.成員名如

6、果將“結(jié)構(gòu)變量.成員名”看成一個整體,則這個整體的數(shù)據(jù)類型與結(jié)構(gòu)中該結(jié)員的數(shù)據(jù)類型相同,可以同前面所講的基本變量一樣的。例如下面的代碼是結(jié)構(gòu)體的使用實例,先定義一個學生結(jié)構(gòu)體 student,然后用這個結(jié)構(gòu)體定義兩個學生變量 Jim 和 Lily,并且賦值輸出。237#include <stdio.h>struct student/*定義一個學生結(jié)構(gòu)體。*/char name20;/*姓名。*/int age;/*。*/char sex ;/*。*/int height;/*身高。*/main()struct student Jim,Lily;/*用結(jié)構(gòu)體兩個學生。*/ Jim.a

7、ge=13;/*對 Jim 的賦值。*/strcpy(J,"Jim Green");/*用 strcpy 函數(shù)對 Jim 的姓名進行賦值。*/ Jim.sex='m'/*對 Jim 的進行賦值。*/Jim.height=168;/*對 Jim 的身高進行賦值。*/struct student/*定義一個結(jié)構(gòu)體。*/char name15;/*姓名。*/int age;/*。*/char address50;/*住址。*/int height;/*身高。 */;struct class/*定義一個班結(jié)構(gòu)體。*/char teacher20;/*班

8、姓名。*/struct student stu50;/*用結(jié)構(gòu)體定義 50 個學生。*/;main()/*程序的主函數(shù)。*/struct class A;/*用學生結(jié)構(gòu)體一個班。*/Linux 系統(tǒng)下 C 程序開發(fā)詳解輸入下面令,編譯這個程序。輸入下面令,對編譯的程序添加可執(zhí)行權(quán)限。輸入下面令,運行這個程序。程序的運行結(jié)果如下所示。7.1.4結(jié)構(gòu)體數(shù)組所謂結(jié)構(gòu)體數(shù)組,指的是把結(jié)構(gòu)體作為一種基本的數(shù)據(jù)類型,用這種數(shù)據(jù)類型定義一個數(shù)組。結(jié)構(gòu)體數(shù)組的定義和基本數(shù)據(jù)類型的數(shù)組定義方法是相同的。在定義結(jié)構(gòu)體數(shù)組之前需要定義一個結(jié)構(gòu)體。結(jié)構(gòu)體數(shù)組在時需要和數(shù)組一樣用下標表明使用哪一個變量,然后再這個結(jié)構(gòu)變

9、量的成員。下面的代碼是一個結(jié)構(gòu)體數(shù)組的定義與使用的實例。238#include <stdio.h>JimName: Jim Green Age: 13Sex: m: Height:168: LilyName: Lily Kate Age: 13Sex: fHeight:174./a.outchmod +x a.outgcc 11.1.cLily.age=13; strcpy(L,"Lily Kate"); Lily.sex='f'Lily.height=174;printf("Jimn");/*輸出姓名。*/p

10、rintf(" Name: %sn",J);/*輸出姓名。*/printf(" Age: %dn",Jim.age);/*輸出。*/printf(" Sex: %c:n",Jim.sex);/*輸出。*/ printf(" Height:%d:n",Jim.height );/*輸出身高。*/printf("Lilyn");/*輸出 Lily 的信息。*/ printf(" Name: %sn",L);printf(" Age: %dn

11、",Lily.age); printf(" Sex: %cn",Lily.sex); printf(" Height:%dn",Lily.height );第 11 章 結(jié)構(gòu)體7.1.5結(jié)構(gòu)體使用實例在程序中使用結(jié)構(gòu)體以后,可以使程序復雜的數(shù)據(jù)關(guān)系邏輯,使用這種可以方便地一組數(shù)據(jù)。本小節(jié)將講解一個結(jié)構(gòu)體使用實例。先定義一個表示學生信息的結(jié)構(gòu)體,然后用這個結(jié)構(gòu)體定義數(shù)組若干個學生的信息。從鍵盤輸入學生信息,然后用循環(huán)的方法輸出學生的信息。要實現(xiàn)這個程序需要在程序中完成下面這些操作。(1) 定義一個用來表示學生的結(jié)構(gòu)體。(2) 定義一個結(jié)構(gòu)體數(shù)組,

12、用來存放若干學生的信息。(3) 定義一個字符變量。用戶輸入“y”或“Y”時,繼續(xù)輸入學生數(shù)據(jù)。用戶輸入“n” 或“N”時,結(jié)束輸入信息。(4)定義一個整型變量,用來當前學生的序號。(5) 用 while 語句完成輸入的循環(huán)。(6) 用 for 語句循環(huán)輸出學生的信息。根據(jù)上面的思路編寫的程序代碼如下所示。239#include <stdio.h>#include <stdlib.h>/*因為要用strcpy 函數(shù),所以要包含頭文件 stdlib.h。*/struct student/*定義一個結(jié)構(gòu)體。*/char name20;/*姓名。*/int age;/*。*/i

13、nt sex;/*。*/int height;/*身高。 */;main()struct student stu50;/*定義一個結(jié)構(gòu)體,表示有 50 個學生。*/int i=0;/*輸入學生的計數(shù)。*/int j ;/*輸出的計數(shù)。*/char s;/*用戶輸入數(shù)據(jù)。*/struct student/*定義一個結(jié)構(gòu)體。*/char name15;/*姓名。*/int age;/*。*/char address50;/*住址。*/int height;/*身高。 */;main()/*主程序。*/struct student stu3;/*定義一個結(jié)構(gòu)體變量表示三個學生。*/stu1.age=

14、15;/*第二個學生的為 15。*/stu2.height=167;/*第三個學生的身高為 167。*/stu0.sex='m'/*第一個學生的為m。*/Linux 系統(tǒng)下 C 程序開發(fā)詳解輸入下面令,編譯這個程序。輸入下面令,對編譯的程序添加可執(zhí)行權(quán)限。輸入下面令,運行這個程序。240./a.outchmod +x a.outgcc 11.4.cchar name20;/*姓名。*/while(1)/*進入一個 while 循環(huán)。*/printf("input a student?n?Y/N:");/*提示用戶輸入選擇。*/ scanf("%c&

15、quot;,&s);/*用戶輸入一個字符。*/if(s='N'|s='n')/*輸入 N 或n 則中斷循環(huán)。*/break;/*中止當前循環(huán)。*/if(s!='n'&&s!='N'&&s!='y'&&s!='Y')/*如果不是 N、n、Y、y 這幾個字母則進入下次循環(huán)。*/printf("error.n");/*輸出提示。*/continue;/*進入下一次循環(huán)。*/printf("please input age

16、:n");/*提示輸入。*/ scanf("%d",&stui.age);/*輸入。*/ printf("please input height:n");/*提示身高。*/ scanf("%d",&stui.height);/*輸入身高。*/ printf("please input sex:n");/*提示。*/ scanf("%d",&stui.sex);/*輸入。*/ printf("please input name:n");/*提示

17、姓名。*/ scanf("%s",name);/*輸入姓名到 name 字符串。*/ strcpy(,name) ;/*將字符串到學生姓名上。*/ i+;/*計數(shù)器自加。*/for(j=0;j<i;j+)/*for 循環(huán)輸出。*/printf("Student%dn",j);/*提示第幾個學生。*/ printf(" Name :%s n",); /*輸出姓名。*/ printf(" Age :%d n",stuj.age);/*輸出。*/ printf(" Se

18、x :%d n",stuj.sex);/*輸出。*/ printf(" Height:%d n",stuj.height);/*輸出身高。*/第 11 章 結(jié)構(gòu)體程序輸出下面的提示,詢問是不是輸入一個學生。這時輸入一個“Y”,然后在各項提示的后面輸入學生的信息。輸入完一個學生的信息后,輸入“Y”繼續(xù)輸入下一個學生的信息,輸入“N”則停止輸入信息,然后循環(huán)輸出已經(jīng)輸入的內(nèi)容。顯示的結(jié)果如下所示。7.2結(jié)構(gòu)體與指針結(jié)構(gòu)體是一種特殊的數(shù)據(jù)類型,那么就可以定義一個指向結(jié)構(gòu)體的指針。這種指向結(jié)構(gòu)體的指針就是結(jié)構(gòu)體指針。結(jié)構(gòu)體指針和普通指針一樣,可以函數(shù)的參數(shù)和返回值。本節(jié)將

19、講解結(jié)構(gòu)體指針的操作。結(jié)構(gòu)體的成員,可以作為7.2.1結(jié)構(gòu)體指針的定義所謂結(jié)構(gòu)體指針的定義,指的是定義一個指針,這個指針指向一個結(jié)構(gòu)體類型的變量,用這個指針可以一個結(jié)構(gòu)中的成員。結(jié)構(gòu)體指針的定義和普通指針的定義方法是相同的,在變量名前面加一個星號即可。下面的代碼是利用前面的學生結(jié)構(gòu)體定義一個結(jié)構(gòu)體指針。241struct student/*定義一個結(jié)構(gòu)體。*/char name20;/*姓名。*/int age;/*。*/int sex;/*。*/int height;/*身高。 */;Student0 Name :Jim Age :16Sex :1 Height:168Student1 Na

20、me :Lily Age :18Sex :0 Height:175Student2 Name :Bush Age :15Sex :1 Height:178Student3 Name :Lucy Age :19Sex :0Height:175input a student?Y/N:Linux 系統(tǒng)下 C 程序開發(fā)詳解7.2.2結(jié)構(gòu)體指針的所謂結(jié)構(gòu)體指針的變量和成員進行賦值或,是指用結(jié)構(gòu)體指針的操作。有兩種方法這個指針所指向的變量和成員,對這些結(jié)構(gòu)體指針,可以用下面的方法來理解。(1)假設(shè)使用上一節(jié)定義的結(jié)構(gòu)體定義一個結(jié)構(gòu)體指針,代碼如下所示。(2)用星號(*)可以這一個結(jié)構(gòu)體,代碼如下所示。(3

21、)既然*p 是一個結(jié)構(gòu)體,則可以使用這個結(jié)構(gòu)體直接成員變量,代碼如下所示。(4)(*p).age 這個成員變量可以寫成另一種形式,用一個箭頭表示指針所指向的變量,代碼如下所示。這些代碼和上面的代碼是等價的。根據(jù)所述的結(jié)構(gòu)體變量的方法可以在程序中用結(jié)構(gòu)體指針來一個結(jié)構(gòu)體。下面是指針結(jié)構(gòu)體的實例。242#include <stdio.h>#include <stdlib.h>/*因為要用 strcpy 函數(shù),所以要包含頭文件 stdlib.h。*/struct student*定義一個結(jié)構(gòu)體。*/char name20;/*姓名。*/int age;/*。*/int sex

22、;/*。*/int height;/*身高。 */;main()struct student stu;/*定義一個結(jié)構(gòu)體變量。*/struct student *p;/*定義一個指向結(jié)構(gòu)體變量的指針。*/p=&stu;/*結(jié)構(gòu)體取地址賦值給結(jié)構(gòu)體指針。*/stu.age=15;/*結(jié)構(gòu)體的成員,對賦值。*/strcpy(,"Jim");/*用 strcpy 函數(shù)對姓名賦值。*/(*p).sex =1;/*用結(jié)構(gòu)體指針成員變量。*/(*p).height=168;/*用結(jié)構(gòu)體指針身高成員變量。*/printf("Name : %s n&quo

23、t;,);/*輸出這些成員變量的值。*/ printf("Age : %d n",stu.age);p->age=15; p->sex=0;(*p).age = 15;(*p).sex = 0 ;*p;struct student *stu;struct student *stu;/*定義一個結(jié)構(gòu)體指針 stu。*/第 11 章結(jié)構(gòu)體輸入下面令,編譯這個程序。輸入下面令,對編譯的程序添加可執(zhí)行權(quán)限。輸入下面令,運行這個程序。程序的運行結(jié)果如下所示。從結(jié)果可知,結(jié)構(gòu)體指員的作用是相同的,箭頭符號和指針星號對結(jié)構(gòu)體成員的成員的與結(jié)構(gòu)體直接成作用是相同

24、的。7.2.3結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體作為一個特殊的數(shù)據(jù)類型是可以作為函數(shù)的參數(shù)的。使用結(jié)構(gòu)體變量作為函數(shù)參數(shù)時,需要在參數(shù)列表中這個函數(shù)的參數(shù)是一個結(jié)構(gòu)體。在函數(shù)中可以直接調(diào)用這個結(jié)243Name : Jim Age : 15Sex : 1Height: 168Name : Jim Age : 15Sex : 0Height: 169Name : Jim Age : 15Sex : 0Height: 169./a.outchmod +x a.outgcc 11.5.cprintf("Sex : %d n",stu.sex); printf("Height: %

25、d nn",stu.height);p->height=169;/*用箭頭方法成員變量。*/ p->sex=0;printf("Name : %s n",);/*輸出結(jié)構(gòu)體的成員。*/ printf("Age : %d n",stu.age);printf("Sex : %d n",stu.sex); printf("Height: %d nn",stu.height);printf("Name : %s n",(*p).name);/*用指針結(jié)構(gòu)體變量。*

26、/ printf("Age : %d n",(*p).age);printf("Sex : %d n",p->sex);/*用箭頭符號代替結(jié)構(gòu)體指針結(jié)構(gòu)體成員。*/printf("Height: %d nn",p->height);Linux 系統(tǒng)下 C 程序開發(fā)詳解構(gòu)體和成員變量。調(diào)用函數(shù)時需要將結(jié)構(gòu)體變量作為函數(shù)的參數(shù)。下面的程序是結(jié)構(gòu)體作為函數(shù)參數(shù)的實例,實現(xiàn)一個學生信息的輸出功能。輸入下面令,編譯這個程序。 gcc 11.6.c輸入下面令,對編譯的程序添加可執(zhí)行權(quán)限。 chmod +x a.out244#inclu

27、de <stdio.h>#include <stdlib.h>/*因為要用 strcpy 函數(shù),所以要包含頭文件 stdlib.h。*/struct student/*定義一個結(jié)構(gòu)體。*/char name20;/*姓名。*/int age;/*。*/int sex;/*。*/int height;/*身高。 */;void showstu(struct student s)/*定義一個自定義函數(shù),結(jié)構(gòu)體變量作為參數(shù)。*/printf("A student:n");/*輸出信息。*/printf(" Name : %s n",s.

28、name);和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Age : %d n",s.age);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員年齡。*/printf(" Sex : %d n",s.sex);和輸出參數(shù)中結(jié)構(gòu)體的變量成員性別。*/printf(" Height: %d nn",s.height);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員身高。*/void main()/*主函數(shù)。*/struct student stu1,stu2;/*定義兩個結(jié)構(gòu)體變量,表示兩個學生。*/stu1.age=17;/*對第一個結(jié)構(gòu)體變量的成員進行賦值

29、。*/ stu1.sex=1;stu1.height=176;strcpy(,"Jim");/*strcpy 函數(shù)對字符串進行賦值。*/stu2.age=23;/*對第二個結(jié)構(gòu)體變量的成員進行賦值。*/ stu2.sex=0;stu2.height=171;strcpy(,"Lily");/*strcpy 函數(shù)對字符串進行賦值。*/showstu(stu1);/*調(diào)用函數(shù)輸出結(jié)構(gòu)體 stu1 的信息。*/showstu(stu2);/*調(diào)用函數(shù)輸出結(jié)構(gòu)體 stu2 的信息。*/第 11 章 結(jié)構(gòu)體輸入下面令,運行這個程

30、序。 ./a.out程序的運行結(jié)果如下所示。7.2.4結(jié)構(gòu)體指針作為函數(shù)的參數(shù)既然結(jié)構(gòu)體可以作為函數(shù)的參數(shù),結(jié)構(gòu)體指針可以一個結(jié)構(gòu)體變量,那么結(jié)構(gòu)體指針也可以作為函數(shù)的參數(shù)。當結(jié)構(gòu)體指針作為函數(shù)的參數(shù)時,這個指針可以結(jié)構(gòu)體的成員,對成員進行賦值或操作。下面的程序是使用結(jié)構(gòu)體指針作為函數(shù)參數(shù)的實例。在程序中自定義一個函數(shù),結(jié)構(gòu)體指針作為這個函數(shù)的參數(shù),函數(shù)輸出這個指針的信息。245#include <stdio.h>#include <stdlib.h>/*因為要用 strcpy 函數(shù),所以要包含頭文件 stdlib.h。*/struct student/*定義一個結(jié)構(gòu)體

31、。*/char name20;/*姓名。*/int age;/*。*/int sex;/*。*/int height;/*身高。 */;void showstu(struct student *p)/*定義一個自定義函數(shù),結(jié)構(gòu)體指針作為參數(shù)。*/printf("A student:n");/*輸出信息。*/printf(" Name : %s n",);和輸出參數(shù)中結(jié)構(gòu)體指針指向的成員。*/printf(" Age : %d n",s.age);/*和輸出參數(shù)中結(jié)構(gòu)體指針指向的成員。*/printf(" Sex

32、: %d n",s.sex);和輸出參數(shù)中結(jié)構(gòu)體指針指向的成員。*/printf(" Height: %d nn",s.height);/*和輸出參數(shù)中結(jié)構(gòu)體指針指向的成員身高。*/void main()/*主函數(shù)。*/A student: Name : Jim Age : 17Sex : 1Height: 176 A student:Name : Lily Age : 23Sex : 0Height: 171Linux 系統(tǒng)下 C 程序開發(fā)詳解輸入下面令,編譯這個程序。輸入下面令,對編譯的程序添加可執(zhí)行權(quán)限。輸入下面令,運行這個程序。在程序的提示信息后面輸出學生

33、信息,然后程序顯示的結(jié)果如下所示。7.2.5結(jié)構(gòu)體作為函數(shù)的返回值自定義函數(shù)中的結(jié)構(gòu)體可以作為返回值返回給主函數(shù)。結(jié)構(gòu)體返回值的處理方法與普通變量的處理方法是相同的。在主函數(shù)中,需要有一個結(jié)構(gòu)體來接收函數(shù)返回的結(jié)構(gòu)體。下面的代碼是自定義一個函數(shù),函數(shù)要求用戶輸入一個用戶的信息,然后將這個學生以結(jié)構(gòu)體的形式返回到主函數(shù)中。主函數(shù)調(diào)用 7.2.3 節(jié)中的顯示學生信息函數(shù)輸出這個學生。程序代碼如下所示。246#include <stdio.h>A student: Name : Jim Age : 17Sex : 1Height: 176 A student:Name : Lily Ag

34、e : 23Sex : 0Height: 171./a.outchmod +x a.outgcc 11.7.cstruct student stu1,stu2;/*定義兩個結(jié)構(gòu)體變量,表示兩個學生。*/struct student *p1,*p2;/*定義兩個結(jié)構(gòu)體指針,指向?qū)W生結(jié)構(gòu)體。*/p1=&stu1;/*第一個學生取地址各個領(lǐng)域給指針 p1。*/p2=&stu2;/*第二個學生取地址各個領(lǐng)域給指針 p2。*/stu1.age=17;/*對第一個結(jié)構(gòu)體變量的成員進行賦值。*/ stu1.sex=1;stu1.height=176;strcpy(,&quo

35、t;Jim");/*strcpy 函數(shù)對字符串進行賦值。*/stu2.age=23;/*對第二個結(jié)構(gòu)體變量的成員進行賦值。*/ stu2.sex=0;stu2.height=171;strcpy(,"Lily");/*strcpy 函數(shù)對字符串進行賦值。*/showstu(stu1);/*調(diào)用函數(shù)輸出指針 p1 的信息。*/showstu(stu2);/*調(diào)用函數(shù)輸出指針 p2 的信息。*/第 11 章結(jié)構(gòu)體輸入下面令,編譯這個程序。 gcc 11.8.c247#include <stdlib.h>/*因為要用 strcpy 函數(shù),所

36、以要包含頭文件stdlib.h。*/struct student/*定義一個結(jié)構(gòu)體。*/char name20;/*姓名。*/int age;/*。*/int sex;/*。*/int height;/*身高。*/;void showstu(struct student s)/*定義一個自定義函數(shù),結(jié)構(gòu)體變量作為參數(shù)。*/printf("A student:n");/*輸出信息。*/printf(" Name : %s n",);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Age : %d n",s.age)

37、;/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Sex : %d n",s.sex);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Height: %d nn",s.height); /*和輸出參數(shù)中結(jié)構(gòu)體的變量成員身高。*/struct student getstu(void)/*定義一個函數(shù),結(jié)構(gòu)體作為函數(shù)的返回值。*/struct student stu;/*定義一個結(jié)構(gòu)體。*/char name20;/*定義一個字符串,姓名。*/ printf("please input age:n");/*提示輸入。

38、*/ scanf("%d",&stu.age);/*輸入。*/ printf("please input height:n"); /*提示身高。*/ scanf("%d",&stu.height);/*輸入身高。*/ printf("please input sex:n");/*提示。*/ scanf("%d",&stu.sex);/*輸入。*/ printf("please input name:n");/*提示姓名。*/ scanf("%

39、s",name);/*輸入姓名到 name 字符串。*/ strcpy(,name) ;/*將字符串到學生姓名上。*/ return(stu);/*返回這個結(jié)構(gòu)體。*/void main()/*主函數(shù)。*/struct student stu1,stu2,stu3;/*定義三個結(jié)構(gòu)體,表示三個學生。*/ stu1=getstu();/*用函數(shù) getstu()輸入 stu1 的信息。*/stu2=getstu();/*用函數(shù) getstu()輸入 stu2 的信息。*/stu3=getstu();/*用函數(shù) getstu()輸入 stu3 的信息。*/showstu(

40、stu1);/*結(jié)構(gòu)體作為參數(shù),調(diào)用 showstu 輸出 stu1 的信息。*/showstu(stu2);/*結(jié)構(gòu)體作為參數(shù),調(diào)用 showstu 輸出 stu2 的信息。*/showstu(stu3);/*結(jié)構(gòu)體作為參數(shù),調(diào)用 showstu 輸出 stu3 的信息。*/Linux 系統(tǒng)下 C 程序開發(fā)詳解輸入下面令,對編譯的程序添加可執(zhí)行權(quán)限。輸入下面令,運行這個程序。在程序的提示信息后面輸出學生信息,然后程序顯示的結(jié)果如下所示。7.2.6結(jié)構(gòu)體指針作為函數(shù)的返回值既然結(jié)構(gòu)體可以作為函數(shù)的返回值,那么結(jié)構(gòu)體指針作為一種特殊的數(shù)據(jù)類型也可以作為函數(shù)的返回值。當一個函數(shù)需要用結(jié)構(gòu)體指針作為

41、返回值時,需要在函數(shù)中輸入一個指針,函數(shù)對指針進行處理,然后返回這個指針。在函數(shù)中可以用這個指針來指針指向的結(jié)構(gòu)體。下面是一個使用結(jié)構(gòu)體指針作函數(shù)返回值的實例。函數(shù)利用這個指針輸入學生的信息,然后返回該學生結(jié)構(gòu)體的指針,程序通個這個指針取值調(diào)用學生顯示函數(shù)來輸出學生的信息。248#include <stdio.h>#include <stdlib.h>/*因為要用 strcpy 函數(shù),所以要包含頭文件stdlib.h。*/struct student/*定義一個結(jié)構(gòu)體。*/char name20;/*姓名。*/int age;/*。*/int sex;/*。*/int

42、height;/*身高。 */;void showstu(struct student s)/*定義一個自定義函數(shù),結(jié)構(gòu)體變量作為參數(shù)。*/printf("A student:n");/*輸出信息。*/printf(" Name : %s n",);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Age : %d n",s.age);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/A student: Name : Jim Age : 17Sex : 1Height: 178 A student:Name : Lily A

43、ge : 21Sex : 1Height: 174 A student:Name : Lucy Age : 22Sex : 0Height: 171./a.outchmod +x a.out第 11 章結(jié)構(gòu)體輸入下面令,編譯這個程序。輸入下面令,對編譯的程序添加可執(zhí)行權(quán)限。輸入下面令,運行這個程序。在程序的提示信息后面輸出學生信息,程序顯示的結(jié)果如下所示。249A student: Name : Jim Age : 17Sex : 1Height: 178 A student:./a.outchmod +x a.outgcc 11.9.cprintf(" Sex : %d n&quo

44、t;,s.sex);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Height: %d nn",s.height);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員身高。*/struct student *getstu(struct student *s)/*自定義一個函數(shù),*/char name20;/*定義一個字符串,姓名。*/printf("please input age:n");/*提示輸入姓名。*/scanf("%d",&(*s).age);/*用指針結(jié)構(gòu)體的變量。*/ printf("please inpu

45、t height:n");/*提示輸入身高。*/ scanf("%d",&(*s).height);/*用指針結(jié)構(gòu)體變量的成員。*/printf("please input sex:n");/*提示輸入。*/ scanf("%d",&(*s).sex);printf("please input name:n");/*提示輸入姓名。*/scanf("%s",name);/*輸入一個字符串,賦值給 name。*/strcpy(s->name,name) ;/*用 st

46、rcpy 函數(shù)把字符串到結(jié)構(gòu)體 name 成員上。*/return(s);/*返回這個指針。*/void main()/*主函數(shù)。*/struct student s1,s2,s3;/*用結(jié)構(gòu)體定義三個學生。*/ struct student *stu1,*stu2,*stu3;/*定義三個結(jié)構(gòu)體類型的指針。*/ stu1=getstu(&s1);/*對第一個學生取地址作為參數(shù),調(diào)用函數(shù)。*/stu2=getstu(&s2);/*對第二個學生取地址作為參數(shù),調(diào)用函數(shù)。*/ stu3=getstu(&s3);showstu(*stu1);/*用第一個指針取結(jié)構(gòu)體變量作為參

47、數(shù)顯示。*/showstu(*stu2);/*用第二個指針取結(jié)構(gòu)體變量作為參數(shù)顯示。*/showstu(*stu3);/*用第三個指針取結(jié)構(gòu)體變量作為參數(shù)顯示。*/Linux 系統(tǒng)下 C 程序開發(fā)詳解7.3結(jié)構(gòu)體實例結(jié)構(gòu)體在程序中有著非常重要的運用。在復雜的程序中需要定義結(jié)構(gòu)體作為新的數(shù)據(jù)類型,用結(jié)構(gòu)體數(shù)據(jù)類型作為函數(shù)的參數(shù)或返回值。本節(jié)將講解一個結(jié)構(gòu)運用實例,在程序中用結(jié)構(gòu)體進行各種數(shù)據(jù)的。7.3.1程序的需求分析本節(jié)將講解一個學生管理程序。在程序中用結(jié)構(gòu)體進行學生數(shù)據(jù)的數(shù)的參數(shù)與返回值。程序需要完成下面的功能。,結(jié)構(gòu)體作為函(1) 菜單選擇功能。進入程序以后,顯示一個菜單,用戶在鍵盤上輸入

48、一個數(shù)字選擇相應(yīng)的功能。(2) 學生添加功能。用戶選擇學生添加菜單項以后,可以在文字提示下輸入一個學生的信息。(3) 學生姓名列表功能。這個功能是列出所有學生的編號和(4) 所有學生詳細列表功能。按輸入的順序列出所有的數(shù)據(jù)。(5) 按姓名(6) 按(7) 按(8) 按身高功能。輸入一個學生的姓名時,可以出這個學生的數(shù)據(jù)。 段所有的學生信息。所有的學生信息。功能。輸入一個功能。輸入一個段以后,顯示這個以后,顯示這個功能。輸入一個身高區(qū)域以后,顯示這個身高區(qū)域中所有學生的信息。(9)刪除學生功能。輸入一個學生的姓名,在結(jié)構(gòu)體數(shù)組中刪除這個學生。(10)程序功能。選擇這一個選項以后,結(jié)束程序。7.3

49、.2程序中的函數(shù)程序中的每個功能是分成不同的函數(shù)來完成的,每一個函數(shù)根據(jù)需要完成一定的功能, 這樣就可以把一個復雜的程序分為不同的函數(shù)模塊。各個功能不同的函數(shù)在主函數(shù)的調(diào)用下統(tǒng)一地完成一個復雜的功能。下面是這個程序中的各個自定義函數(shù)。 顯示一個學生的函數(shù),參數(shù)是一個結(jié)構(gòu)體。 void showstu(struct student s) 刪除一個學生的函數(shù),沒有參數(shù)。 void delestu();250Name : Lily Age : 21Sex : 0Height: 172 A student:Name : Brucs Age : 23Sex : 0Height: 177第 11 章結(jié)構(gòu)體

50、y菜單函數(shù),完成菜單的顯示和選擇。y學生函數(shù),完成一個學生信息的輸入,返回一個結(jié)構(gòu)體。y按學生姓名查找函數(shù)。y按查找函數(shù)。y按查找函數(shù)。y按身高查找函數(shù)。y主函數(shù),完成程序中各個函數(shù)的組織和調(diào)用。7.3.3程序中的結(jié)構(gòu)體與全局變量所謂全局變量,指的是程序中所有的函數(shù)都可以的變量??梢园炎兞慷x語句寫在程序在最前面,這樣在所有的函數(shù)中都可以調(diào)用這些變量。在本程序中學生的結(jié)構(gòu)體數(shù)組與學生人數(shù)的計數(shù)都是全局變量。結(jié)構(gòu)體變量是這樣定義的。7.3.4頭文件和函數(shù)本節(jié)以后的多個節(jié)講解的程序是不同的模塊。本程序在光盤中的目錄是“/ 源文件/11/7.10.c”。C 程序中的代碼可以分解為多個函數(shù),在學習時把

51、這些函數(shù)寫在一個程序中即可運行。在程序的最前面需要包含程序中需要使用的頭文件。對于程序中自定義的函數(shù),當前面的函數(shù)調(diào)用后面的函數(shù)時可能找不到這個函數(shù),需要在程序的最前面這些函數(shù)。包含文件和函數(shù)的代碼如下所示。251#include <stdio.h>#include <stdlib.h>/*包含 stdlib.h 頭文件。*/ void delestu();程序中所有的自定義變量。*/ int();struct student getstu(void); void selectbyname();void selectbyage();void selectbysex();

52、int i;struct student stu100;int main()void selectbyheight();void selectbysex();void selectbyage();void selectbyname();struct student getstu(void);int();Linux 系統(tǒng)下 C 程序開發(fā)詳解7.3.5定義結(jié)構(gòu)體和全局變量變量以后需要在程序中定義表示學生的結(jié)構(gòu)體,然后用這個結(jié)構(gòu)體類型定義一個結(jié)構(gòu)體數(shù)組,保存若干個學生信息,需要有一個變量 i 來保存當前一共有多少個學生。這些變量是在函數(shù)以外定義的,所有的函數(shù)都可以。這一模塊的代碼如下所示。7.3.6

53、顯示學生信息的函數(shù)這個函數(shù)的功能是顯示一個學生的詳細信息。函數(shù)的參數(shù)是一個學生類型的結(jié)構(gòu)體。函數(shù)通過參數(shù)中的結(jié)構(gòu)體這一模塊的代碼如下所示。結(jié)構(gòu)體的成員,輸出詳細信息。函數(shù)完成輸出以后沒有返回值。7.3.7程序的選擇菜單這個函數(shù)的功能是顯示學生管理程序所有的功能作為菜單。用戶從鍵盤輸入一個編號,如果這個編號有效則返回這個編號,如果編號為 9 則次顯示菜單。函數(shù)的執(zhí)行流程如圖 7-1 所示。程序,如果編號無效則顯示錯誤再252void showstu(struct student s)/*定義一個自定義函數(shù),結(jié)構(gòu)體變量作為參數(shù)。*/printf("A student:n");/

54、*輸出信息。*/printf(" Name : %s n",);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Age : %d n",s.age);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Sex : %d n",s.sex);/*和輸出參數(shù)中結(jié)構(gòu)體的變量成員。*/ printf(" Height: %d nn",s.height); /*和輸出參數(shù)中結(jié)構(gòu)體的變量成員身高。*/struct student/*定義一個結(jié)構(gòu)體。*/char name20;/*姓名。*/int a

55、ge;/*。*/int sex;/*。*/int height;/*身高。 */;int i;/*進行一個全局變量,用于學生的計數(shù)。*/struct student stu100;/*定義一個結(jié)構(gòu)體數(shù)組,最多可以100 個學生。*/void selectbyheight();void showstu(struct student s);第 11 章結(jié)構(gòu)體圖 7-1函數(shù)的執(zhí)行流程這個函數(shù)的代碼如下所示。253int()int i;/*定義變量,這個就是只有這個函數(shù)有效。*/i=0;/*賦初值。*/while(1)/*進入一個循環(huán)。*/printf("Please select a:n&

56、quot;);/*提示輸入。*/ printf("1: add a student.n");/*添加學生選項。*/ printf("2: list the name all the student.n");/*顯示所有學生選項。*/printf("3: list informations of all the student.n");/*顯示學生詳細信息選項。*/ printf("4: seletudent by name .n");/*按姓名查找選項。*/ printf("5: select students by age .n");/*按查找。*/ printf("6: select students by sex .n");/*按查找。*/ printf("7

溫馨提示

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

評論

0/150

提交評論