C語言程序設計 第2版 課件 9利用指針優化項目_第1頁
C語言程序設計 第2版 課件 9利用指針優化項目_第2頁
C語言程序設計 第2版 課件 9利用指針優化項目_第3頁
C語言程序設計 第2版 課件 9利用指針優化項目_第4頁
C語言程序設計 第2版 課件 9利用指針優化項目_第5頁
已閱讀5頁,還剩83頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計創建第一個C語言程序項目1“學生成績管理系統”中相關數據設計及簡單處理項目2項目中的數據處理及封面與菜單的初步設計項目3項目中學生成績的等級判定項目4學生成績的分組匯總程序項目5利用數組完善項目中數據的處理項目6利用函數進行項目的整體框架設計項目7利用結構體實現項目項目8利用指針優化項目項目9利用文件完善項目項目10項目9利用指針優化項目目標TARGET知識目標掌握指針的定義與使用。掌握指針的運算。掌握指向數組的指針。掌握指向結構體的指針。掌握指向函數的指針。目標TARGET技能目標能夠熟練使用數組指針解決多個數據處理問題。能夠利用指針操作結構體,對結構體成員進行訪問。能夠使用指針解決函數相關問題,提高執行效率。用指針實現學生最高、最低成績查找任務9.1用指針實現學生成績排序任務9.2任務9.1用指針實現學生最高、最低成績查找

任務描述

改進學生成績管理系統,用指針來實現學生成績管理系統中的最值的查找,提高程序執行效率。任務分析

項目8中開發的學生成績管理系統,對數據的操作是通過結構成員訪問實現的,顯然執行效率低,處理批量數據速度太慢。本任務將利用指針知識優化程序主要功能模塊—最值查找,用指針來訪問結構成員,處理批量數據,以提高系統的訪問效率。

本任務的要點是:用指向結構的指針作為函數的參數。1認識指針Part◎指針與數組◎指針的概念指針的概念

在內存中,每個內存單元都有一個地址,如在一個32位計算機的內存中,內存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內存單元(字節),如果一個整型變量占據4個字節,那么4個字節中編號最小的字節的地址即是該整型變量所占存儲單元的地址。通常我們把指向內存存儲單元的地址叫指針。如果一個整型變量占據4個字節,那么4個字節中編號最小的字節的地址即是該整型變量所占存儲單元的地址。通常我們把指向內存存儲單元的地址叫指針。如一個整型變量inta=247,在內存中占據4個字節,存儲的內容是247,假如所占據的4個字節從地址為0012FF7C開始,則變量a的地址就是0012FF7C,該地址也叫整型變量所占存儲單元的首地址,也是變量a的指針,記作&a。一個變量的地址稱為該變量的“指針”。如果有一個變量專門用來存放其他變量的地址(指針),這個變量被稱為“指針變量”。指針的概念

(1)指針變量的定義、初始化和使用指針變量在使用前首先需要定義,定義指針變量的語法格式如下所示:

類型標識符*指針變量名;一般指針變量初始化格式如下所示:類型標識符*指針變量名=&變量名;指針的概念

指針變量的初始化方式:1)定義指針變量,由系統進行初始化操作,或者不進行初始化。如:inta,*p;2)定義指針變量的同時進行初始化。如:inta,*p=&a;或者inta;int*p=&a;3)指針變量初始化為空值。如:inta,*p=NULL;指針的概念

指針變量的引用:指引用指針變量指向的變量,就是根據指針變量中存放的地址,訪問該地址對應的變量。訪問指針變量指向變量的方式非常簡單,只需在指針變量前加一個“*”(取值運算符)即可,訪問指針變量的語法格式如下所示:*指針表達式;指針的概念

(2)指針變量作為函數參數指針變量作為變量,它具有變量的一切特征,它也可以作為函數的形參,接受在函數調用時實參傳過來的值,那么指針變量作為函數的參數時,實參必須是指針變量、變量的地址、地址常量等。指針的概念

#include<stdio.h>voidmain(){intnum=1;int*ptr=#//定義一個指針變量,指針printf("\nnum的值=%dnum地址=%p",num,&num);//顯示num的地址printf("\nptr的地址是%pptr存放的值是地址為%pptr指向的值=%d",&ptr,ptr,*ptr);getchar();}例9-1寫一個程序,獲取一個int變量num的地址,并顯示到終端,將num的地址賦給指針ptr,并通過ptr去修改num的值。指針的概念

執行結果說明:(1)int*表示類型為指針類型,變量名稱為ptr,ptr就是一個int*類型,ptr指向了一個int類型的變量的地址。(2)如果要輸出一個變量的地址,使用格式是%p,&num表示取出num這個變量的對應地址。(3)指針變量,本身也有地址,ptr的地址為&ptr;ptr表示指針變量存放的地址,通過*ptr獲取指針指向的值。注意:(1)指針和指針變量是兩個完全不同的概念,指針是一個地址,而指針變量是存放地址(指針)的變量。(2)基本數據類型都有對應的指針類型,形式為數據類型*,比如int的對應的指針就是int*,float對應的指針類型就是float*,依次類推。指針與數組

(1)數組的指針和指向數組的指針變量

數組的指針是指數組在內存中的起始地址,數組元素的指針是數組元素在內存中的起始地址。

類似于指向簡單變量的指針,指向數組的指針變量只要將數組的首地址(或數組名)賦給指針變量即可。例如:intiData[5];/*定義iData為整型數據的數組*/int*p;/*定義p為指向整型變量的指針*/則語句:p=&iData[0];(或p=iData;)/*p指向iData數組的第0號元素*/稱為p指針為指向數組iData的指針變量。指針與數組

(2)數組元素的引用假設指針變量p指向了數組iData,若想引用數組中的元素,可以通過下列兩種方式。1)下標法iData[i] //①數組名下標法p[i] //②指針變量下標法2)指針法*(iData+i) //①數組名指針法*(p+i) //②指針變量指針法指針與數組

(3)數組名作為函數參數當數組名作為函數參數時,在函數調用時,實際傳遞給函數的是該數組的起始地址,即指針值。所以,實參可以是數組名或指向數組的指針變量。而被調函數的形參,既可以說明為數組,也可以說明為指針。指針與數組

(4)字符串與指針訪問一個字符串可以通過兩種方式,第一種就是前面學習過的使用字符數組來存放一個字符串,從而實現對字符串的操作;另一種方法就是下面要介紹的使用字符指針指向一個字符串,此時可以不定義數組。例如:char*p="IloveC";指針與數組

(5)指針數組如果一個數組的每個元素都是指針類型的數據,則這種數組稱指針數組。指針數組定義的一般形式為:類型標識符*數組名[常量表達式];比如:int*ptr[3];ptr聲明為一個指針數組,由3個整數指針組成。因此,ptr中的每個元素,都是一個指向int值的指針。指針與數組

#include<stdio.h>voidmain(){intarray[10]={1,2,3,4,5,6,7,8,9,10};inti,*p;p=array;for(i=0;i<10;p++,i++){printf("%d",*p);}printf("\n");}例9-2定義一個一維數組,并用指針依次訪問數組元素。指針與數組

執行結果說明:(1)在第7行for語句中,int類型的指針變量p指向數組array,第7~10行,通過for循環移動指針p,依次指向數組中的每個元素,并輸出。(2)指針是一個用數值表示的地址,可以對指針執行四種算術運算:++、--、+、-。當對指針進行++時,指針會按照它指向的數據類型字節數大小增加,例如int*指針,每++,就增加4個字節,指向了下一個數組元素。注意:(1)數組名并不代表整個數組,只代表數組首元素的地址。(2)和指針變量不同的是,數組名array中的地址是不可變的,而指針p中的地址是可變的。指針與數組

#include<stdio.h>voidfunc(int*p){*p=20;}voidmain(){intnum=10;printf("num=%d\n",num);func(&num);printf("num=%d\n",num);getchar();}例9-3指針作為函數參數應用。指針與數組

執行結果說明:在程序中第2行代碼定義一個func()函數,該函數的參數類型為指針類型。在main()函數中調用該函數時傳入變量num的地址,對其取值運算后賦新的值。注意:func()函數必須寫在main()函數的前面,否則需要在main()函數前聲明func()函數。指針與數組

#include<stdio.h>voidmain(){//定義一個指針數組,該數組的每個元素,指向的是一個字符串char*books[]={"三國演義","西游記","紅樓夢","水滸傳"};inti,len=4;//遍歷for(i=0;i<len;i++){printf("\nbooks[%d]指向字符串是=%s",i,books[i]);}getchar();}例9-4請編寫程序,定義一個指向字符的指針數組來存儲字符串列表(四大名著書名),并通過遍歷該指針數組,顯示字符串信息。指針與數組

執行結果說明:1)本例中定義了一個指針數組,該數組的每個元素,指向的是一個字符串。2)使用循環依次輸出指針數組指向字符串的值,格式控制為%s。注意:數組指針和指針數組不是同一個概念,數組指針是指一個指向數組的指針,指針數組是指數組中的元素類型都是指針類型。任務9.2用指針優化學生成績錄入與瀏覽

任務描述改進學生成績管理系統,用指針優化學生成績錄入與瀏覽,提高程序執行效率。任務分析我們將利用指針知識優化程序,用指針來訪問結構成員,處理批量數據,達到提高系統的訪問效率。本任務的要點是:在函數體內直接用指針訪問結構成員。2指針的更多應用Part◎指針與函數◎指針與結構體指針與結構體

(1)指向結構體變量的指針指向結構體變量的指針稱為結構體指針,其定義格式和基本數據類型的指針變量定義一樣。一般形式為:struct結構類型名*指針變量名當結構體指針指向一個結構體變量時,該指針變量的值就是該結構體變量的起始地址。用取地址運算符“&”就可獲得結構變量的指針。一般形式為:指針變量名=&結構體變量名;指針與結構體

(1)指向結構體變量的指針例如:structStudent{charname[20];//姓名intid;//學號floatscore;//分數}stu;指向結構體student的指針變量定義并賦值為:structstudent*p=&stu;指針與結構體

(1)指向結構體變量的指針在定義了指向結構體類型變量的指針后,可以通過結構體指針操作結構體變量的成員,常用的訪問方式是:結構體變量名.成員名(*結構體指針變量名).成員名結構體指針變量名->成員名例如:根據如上例子指針變量p指向了結構體變量stu,則三種訪問方式分別為:stu.成員名、(*p).成員名、p->成員名。指針與結構體

(3)指向結構體數組的指針類似于用指向結構體變量的指針,間接訪問結構體成員一樣,也可以用指向結構體數組及其元素的指針來處理結構體數組。可以把結構體數組的數組名賦值給結構體指針,也就是把結構體數組的首地址賦值給結構體指針。指針與結構體

(3)指向結構體的指針作為函數參數類似于普通指針變量作為函數參數一樣,用指向結構的指針變量作實參時,是屬于“地址傳遞”方式。指針與結構體

(4)使用指針優化學生成績的錄入和瀏覽模塊①使用typedef給學生信息類型定義別名typedefstructstudent //定義學生成績結構體{intnum; //學號charname[16]; //姓名floatmath; //數學成績floatyw; //語文成績floateng; //英語成績floatsum; //總分}STUDENT,*PSTUDENT;指針與結構體

(4)使用指針優化學生成績的錄入和瀏覽模塊②修改成績錄入模塊用指向結構體的指針作為函數參數,函數體內用指針法訪問結構體成員。voidfnInputData(PSTUDENTs){inti;charch[2];PSTUDENTstu=s;stu+=m;//m已錄入的記錄總數PSTUDENTtemp;do{printf("\n\t請輸入學生信息:\n\t\t學號:");scanf("%ld",&stu->num);for(temp=s,i=0;i<m;i++,temp++)if(temp->num==stu->num)指針與結構體

{printf("\n\t該學號已存在,請按任意鍵繼續!");getchar();}printf("\t\t姓名:");//輸入姓名、數學、英語、語文成績scanf("%s",stu->name);printf("\t\t數學:");scanf("%f",stu->math);printf("\t\t英語:");scanf("%f",stu->eng);printf("\t\t語文:");scanf("%f",stu->yw);stu->sum=stu->math+stu->yw+stu->eng;//計算總成績m++;stu++;printf("\t\t是否繼續?(y/n):");scanf("%s",ch);}while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0);}指針與結構體

(4)使用指針優化學生成績的錄入和瀏覽模塊③修改成績瀏覽模塊voidfnMod(PSTUDENTs){inti;PSTUDENTstu=s;printf("\t學號\t姓名\t數學\t語文\t英語\t總分\n");if(m==0)printf("\n\n\t\t沒有記錄");for(i=0;i<m;i++,stu++)printf("\t%-8ld%-8s%-8.1f%-8.1f%-8.1f%-8.1f\n",stu->num,stu->name,stu->math,stu->yw,stu->eng,stu->sum);}指針與結構體

#include<stdio.h>structStudent{ //聲明結構體類型structStudent intnum; charname[20]; charsex; intage;};structStudentstu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFang",'M',19},{10104,"WangMin",'F',20}}; //定義結構體數組并初始化

intmain(){ structStudent*p; //定義指向structStudent結構體變量的指針變量

printf("No.Namesexage\n"); for(p=stu;p<stu+3;p++) printf("%5d%-20s%2c%4d\n",p->num,p->name,p->sex,p->age);//輸出結果

return0;}例9-5已知3名學生的信息,包含姓名、性別和年齡,請自定義結構體類型,然后利用指向結構體數組的指針變量來訪問學生的信息,并在屏幕上輸出。指針與結構體

執行結果說明:1)構造結構體類型,包含姓名、性別、年齡三個成員。2)定義學生結構體數組并初始化。3)在main()函數中定義學生結構體類型指針變量,并指向結構體數組。4)構造循環,利用結構體指針變量訪問結構體數組成員。注意:如果pStr指向結構體數組的一個元素,則pStr+1就指向同一結構體數組的下一個元素。指針與結構體

例9-6已知3名學生的信息,包含編號、姓名、性別和年齡,請自定義結構體類型,輸出3名學生信息,輸出過程通過函數實現。指針與結構體

#include<stdio.h>structstudent{intid;intage;charname[10];charsex;};voidshow(structstudent*stu,intcount){structstudent*p;for(p=stu;p<stu+count;p++){printf("id:%d,age:%d,name:%s,sex:%c\n",p->id,p->age,p->name,p->sex);}}voidmain(){structstudentstu[3]={{1001,18,"ZhangSan",'M'},{1002,16,"LiSi",'W'},{1003,19,"ZhaoLiu",'M'}}; show(stu,3); getchar();}指針與結構體

執行結果說明:1)聲明show()函數并實現功能。2)聲明main()函數,在main()函數中,定義并初始化結構體數組。3)調用show()函數,遍歷結構體數組并輸出其成員的值。4)在該案例中,由于無法通過數組直接獲取到其長度,因此,在定義的show()函數中,需要傳遞兩個參數,其中一個是結構體數組的首地址,另一個是數組的長度。show()函數接收到傳遞來的數組首地址和長度后,使用for循環,將結構體數組中的所有成員輸出。注意:結構體指針變量用于存放結構體變量的首地址,所以將指針作為函數參數傳遞時,其實就是傳遞結構體變量的首地址。指針與函數

(1)函數的返回值是指針類型一個函數不僅可以返回int型、float型、char型和結構類型等數據類型,也可以返回指針類型的數據。返回指針類型的函數定義格式為:類型名*函數名([參數表]){

函數體;}指針與函數

(1)函數的返回值是指針類型例如:int*func(){int*p;.../*省略的其它操作語句*/return(p);}func()函數的返回值是一個指向整型變量的指針。指針與函數

(2)指向函數的指針變量①指向函數的指針變量的定義函數在內存中也占據一定的存儲空間并有一個入口地址(函數開始運行的地址),這個地址就稱為該函數的指針。可以用一個指針變量來存放函數的入口地址,這時稱該指針指向這個函數,并稱該指針變量為“指向函數的指針變量”,簡稱為“函數的指針變量”或“函數指針”,可以通過函數指針來調用函數,這是函數指針的主要用途。函數指針定義的一般形式為:類型標識符

(*指針變量名)(參數);指針與函數

(2)指向函數的指針變量②指向函數的指針變量的賦值與其它指針的定義一樣,函數指針定義后,應給它賦一個函數的入口地址,即使它指向一個函數,才能使用這個指針。C語言中,函數名代表該函數的入口地址。因此,可用函數名給指向函數的指針變量賦值:指向函數的指針變量=函數名;指針與函數

(2)指向函數的指針變量③用函數指針變量調用函數通過函數指針來調用函數的一般格式是:(*函數指針)(實參表)指針與函數

(3)指向函數的指針變量作函數參數假設函數A在運行過程中要根據不同情況多次調用下列函數:B、C、D和E之一來協助它進行處理,按照以往的做法是,用條件選擇語句將上述函數寫在函數A的函數體中的多個位置上,這是一種笨拙的、靈活性較差的處理方法。現在,可以通過使用函數指針作為函數參數的方式向函數A傳遞其它函數的入口地址,從而靈活地調用其他函數。指針與函數

例9-7函數指針實例,聲明add()函數和times()函數分別實現兩個整數相加和相乘。在main()函數體內定義函數指針。用函數指針分別調用add()函數和times()函數計算兩個數的和及乘積。指針與函數

#include<stdio.h>intadd(inta,intb){returna+b;}inttimes(inta,intb){returna*b;}intfunc(int(*p)(int,int),inta,intb){returnp(a,b);}voidmain(){inta,b,result;int(*p)(int,int);a=32;b=12;p=add;result=func(p,a,b);printf("%d+%d=%d\n",a,b,result);p=times;result=func(times,a,b);printf("%d*%d=%d\n",a,b,result);getchar();}指針與函數

執行結果說明:

在該案例中,第2~9行代碼定義了add()函數和times()函數,分別用于對兩個參數進行相加和相乘處理。第10~13行代碼定義了一個func()函數接收一個函數指針p和兩個int類型變量作為參數,在函數中通過函數指針p來決定用哪個函數處理這兩個int類型的參數,最后將結果返回。第20~25行代碼分別將函數指針p指向add()函數和times()函數,func()函數調用參數p,然后使用result變量來接收func()的返回值,并在控制臺輸出結果。注意:1)指針函數本質是一個函數,其返回值為指針。函數指針本質是一個指針,其指向一個函數。其寫法分別為:指針函數:int*fun(intx,inty);函數指針:int(*fun)(intx,inty);2)指針函數的*是屬于數據類型的,而函數指針的星號是屬于函數名的。拓展案例案例9-1寫出下面問題的算法問題描述請編寫一個函數strlong(),返回兩個字符串中較長的一個,通過指針函數實現。拓展案例

#include<string.h>char*strlong(char*str1,char*str2){//函數返回的char*(指針)printf("\nstr1的長度%dstr2的長度%d",strlen(str1),strlen(str2));if(strlen(str1)>=strlen(str2)){returnstr1;}else{returnstr2;}}intmain(){charstr1[30],str2[30],*str;printf("\n請輸入第1個字符串");gets(str1);printf("\n請輸入第2個字符串");gets(str2);str=strlong(str1,str2);printf("\nLongerstring:%s\n",str);getchar();return0;}拓展案例案例1-2寫出下面問題的算法問題描述本題是一個經典的數學問題。對于一個大于2的正整數,判斷它是不是一個素數。。說明:1)本例中定義了一個返回類型為char*的strlong()指針函數,通過strlen()求出兩個字符串的長度,將長度長的字符串返回。2)在main()函數中通過gets方法輸入兩個字符串,調用strlong()指針函數求出結果。注意:1)用指針作為函數返回值時需要注意,函數運行結束后會銷毀在它內部定義的所有局部數據,包括局部變量、局部數組和形式參數,函數返回的指針不能指向這些數據。2)函數運行結束后會銷毀該函數所有的局部數據,這里所謂的銷毀并不是將局部數據所占用的內存全部清零,而是程序放棄對它的使用權限,后面的代碼可以使用這塊內存。拓展案例

執行結果拓展案例案例9-2寫出下面問題的算法問題描述使用指針修改學生成績管理系統的記錄查找、修改、刪除模塊。拓展案例

#include<stdio.h>#include<string.h>intn;charc;//全局變量structstudent//結構體類型{charnum[10];charname[10];floatmath;floatchinese;floatenglish;};voidinput(structstudent*p)//基本信息輸入{scanf("%s%s%f%f%f",(*p).num,p->name,&p->math,&p->chinese,&p->english);}voidoutput(structstudent*p)//基本信息輸出{printf("%-8s%-8s%-8.0f%-8.0f%-8.0f\n",p->num,p->name,p->math,p->chinese,p->english);

}//增加voidinsert(structstudent*p)//在數組尾部插入信息,實際就是對第n個數組元素的5個成員分別賦值{printf("~~~~~~~~~~~~~增加學生信息~~~~~~~~~~~~~~\n\n");printf("請輸入新同學的相關信息:\n");while(1){fflush(stdin);

拓展案例

printf("請輸入新同學的學號:");gets((p+n)->num);printf("請輸入新同學的姓名:");gets((p+n)->name);printf("請輸入新同學的數學成績:");scanf("%f",&(p+n)->math);printf("請輸入新同學的語文成績:");scanf("%f",&(p+n)->chinese);printf("請輸入新同學的英語成績:");scanf("%f",&(p+n)->english);n++;//人數+1printf("增加成功!\n\n");printf("是否繼續:是請輸入'Y'或'y',否請輸入'N'或'n':");getchar();c=getchar();if(c=='Y'||c=='y')continue;elseif(c=='N'||c=='n')break;}}voidshow(structstudent*stu){inti;printf("\n\n所有學生的相關信息有:\n");printf("*************************************\n\n");printf("%-8s%-8s%-8s%-8s%-8s\n","學號","姓名","數學","語文","英語");for(i=0;i<n;i++)output(&stu[i]);printf("\n*************************************\n\n");}//刪除intdel(structstudent*a){chard_num[10];inti,j,r=0;//r是返回值,默認值是0,i是查找的循環變量,j是刪除的循環變量拓展案例

getchar();printf("請輸入要刪除的同學的學號:");gets(d_num);for(i=0;i<n;i++)if(strcmp(d_num,a[i].num)==0)//查找d_num是否和學生數組中的學號匹配{for(j=i;j<n;j++)a[j]=a[j+1];//從第i+1個元素開始到最后一個,每個元素前移一位n=n-1;//元素個數減1r=1;i--;}returnr;//返回r}//修改voidmodify(structstudent*a)//根據姓名修改學生信息.

{charname[10];//1用來保存從鍵盤上輸入的名字,c作為一個開關變量inti;printf("~~~~~~~~~~~~~修改學生信息~~~~~~~~~~~~~~\n\n");while(1){fflush(stdin);//清空緩存printf("請輸入要修改的同學的姓名:");gets(name);for(i=0;i<n;i++)if(strcmp(name,a[i].name)==0)//查找nane是否和學生數組中的姓名匹配{//修改,實際就是用新內容覆蓋舊內容printf("請輸入新的學號:");gets(a[i].num);printf("請輸入新的姓名:");gets(a[i].name);拓展案例

printf("請輸入新的數學成績:");scanf("%f",&a[i].math);printf("請輸入新的語文成績:");scanf("%f",&a[i].chinese);printf("請輸入新的英語成績:");scanf("%f",&a[i].english);printf("修改成功!\n\n");break;}if(i==n)printf("找不到該同學!\n");printf("是否繼續:是請輸入'Y'或'y',否請輸入'N'或'n':");getchar();c=getchar();if(c=='Y'||c=='y')continue;elseif(c=='N'||c=='n')break;}}//查找

voidfind(structstudent*a){charname[10]; intr=0,i; printf("~~~~~~~~~~~~~查找學生信息~~~~~~~~~~~~~~\n\n"); while(1){ fflush(stdin);

printf("請輸入要查找學生的姓名:"); gets(name); for(i=0;i<n;i++){ if(strcmp(name,a[i].name)==0) {printf("已找到,相關信息為:\n");拓展案例

printf("學號:%s\n姓名:%4s\n數學:%2.0f\n語文:%2.0f\n英語:%2.0f\n",a[i].num,a[i].name,a[i].math,a[i].chinese,a[i].english); r=1; } }if(r==0)printf("NotFound!\n");printf("是否繼續:是請輸入'Y'或'y',否請輸入'N'或'n':");c=getchar();if(c=='Y'||c=='y')continue;elseif(c=='N'||c=='n')break; }}voidmain(){structstudentstu[50];//定義結構體變量stu,用來保存學生信息

inti;printf("請輸入學生個數:");scanf("%d",&n);//從健盤上輸入初始人數for(i=0;i<n;i++){printf("請輸入第%d學生的相關信息:(學號、姓名、數語英)\n",i+1);input(stu+i);//stu+i===>&stu[i]}show(stu);//顯示所有學生信息.insert(stu);show(stu);printf("~~~~~~~~~~~~~刪除學生信息~~~~~~~~~~~~~~\n\n");while(1){if(del(stu)==1)

拓展案例

{printf("刪除成功!\n");

}elseprintf("\n找不到該同學相關信息");printf("\n是否繼續:是請輸入'Y'或'y',否請輸入'N'或'n':");c=getchar();if(c=='Y'||c

溫馨提示

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

評論

0/150

提交評論