第一篇:C語言結構體與指針實驗
實驗一 C語言結構體與指針
一、實驗內(nèi)容
1)學生信息的顯示,具體要求如下: ??定義一個結構體描述學生信息(學號,姓名,性別,年齡,住址); ??設計一個函數(shù),用于顯示單個學生信息,函數(shù)的參數(shù)為前面定義的結構體類型; ??設計一個主函數(shù),在主函數(shù)中輸入學生的信息,并調(diào)用前面定義的函數(shù)進行顯示(學生人數(shù)不少于5人)。
2)輸入若干個整數(shù)作為數(shù)組元素值,然后按輸入時順序的就地逆置排序,最后打印出逆置后的元素值。要求用指針和動態(tài)內(nèi)存分配方法實現(xiàn)。例如 輸入:10 2 30 4 5,逆置后顯示為:5 4 30 2 10。
二、代碼
1)#include
struct Student { int studentID;char name[20];char sex[2];//m=male f=female int age;char address[50];};
void showTheDetail(struct Student s){ printf(“%dn”,s.studentID);printf(“%sn”,s.name);printf(“%sn”,s.sex);printf(“%dn”,s.age);printf(“%snn”,s.address);}
void main(){ int i;struct Student student[5];for(i=0;i<5;i++){
printf(“student%dn”,i);
scanf(“%d”,&student[i].studentID);
}
scanf(“%s”,&student[i].name);scanf(“%s”,&student[i].sex);scanf(“%d”,&student[i].age);scanf(“%s”,&student[i].address);} for(i=0;i<5;i++){ showTheDetail(student[i]);} 2)#include
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;
}
return;}
int main(){
int n,i;printf(“please insert the amount of the numbers:n”);scanf(“%d”,&n);int array[n];printf(“please insert the numbers:n”);for(i=0;i scanf(“%d”,&array[i]);} change(array,n);for(i=0;i printf(“%d”,array[i]);} } 三、心得體會 復習了c語言中的數(shù)組,結構體的知識,編程中沒有出現(xiàn)問題。 C語言結構體指針變量作函數(shù)參數(shù) 在ANSI C標準中允許用結構變量作函數(shù)參數(shù)進行整體傳送。但是這種傳送要將全部成員逐個傳送,特別是成員為數(shù)組時將會使傳送的時間和空間開銷很大,嚴重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數(shù)參數(shù)進行傳送。這時現(xiàn)金網(wǎng)96y.org由實參傳向形參的只是地址,從而減少了時間和空間的開銷。 計算一組學生的平均成績和不及格人數(shù)。用結構指針變量作函數(shù)參數(shù)編程。 struct stu{ int num; char *name; char sex; float score; }boy[5]={ {101,Li ping,M,45},{102,Zhang ping,M,62.5},{103,He fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58} }; main(){ struct stu *ps; void ave(struct stu *ps); ps=boy; ave(ps); } void ave(struct stu *ps){ int c=0,i; float ave,s=0; for(i=0;i5;i++,ps++){ s+=ps-score; if(ps-score60)c+=1; } printf(s=%fn,s); ave=s/5; printf(average=%fncount=%dn,ave,c); } 本程序中定義了函數(shù)ave,其形參為結構指針變量ps。boy被定義為外部結構數(shù)組,因此在整個源程序中有效。在main函數(shù)中定義說明了結構指針變量ps,并把boy的首地址賦予它,使ps指向boy數(shù)組。然后博彩娛樂棋牌q07i5.org以ps作實參調(diào)用函數(shù)ave。在函數(shù)ave中完成計算平均成績和統(tǒng)計不及格人數(shù)的工作并輸出結果。 由于本程序全部采用指針變量作運算和處理,故速度更快,程序效率更高。 C語言指向結構體數(shù)組的指針 指針變量可以指向一個結構數(shù)組,這時結構指針變量的值是整個結構數(shù)組的首地址。結構指針變量也可指向結構數(shù)組的一個元素,這時結構指針變量的值是該結構數(shù)組元素的首地址。 設ps為指向結構數(shù)組的指針變量,則ps也指向該結構數(shù)組的0號元素,ps+1指向1號元素,ps+i則指向i號元素。這與普通數(shù)組的情況現(xiàn)金網(wǎng)96y.org是一致的。 用指針變量輸出結構數(shù)組。 struct stu{ int num; char *name; char sex; float score; }boy[5]={ {101,Zhou ping,M,45},{102,Zhang ping,M,62.5},{103,Liou fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58} }; main(){ struct stu *ps; printf(NotNametttSextScoretn); for(ps=boy;psboy+5;ps++) printf(%dt%stt%ct%ftn,ps-num,ps-name,ps-sex,ps-score); } 在程序中,定義了stu結構類型的外部數(shù)組boy并作了初始化賦值。在main函數(shù)內(nèi)定義ps為指向stu類型的指針。在循環(huán)語句for的表達式1中,ps被賦予boy的首地址,然后循環(huán)5次,輸出boy數(shù)組中各成員值。 應該注意的是,一個結構指針變量雖然可以用來訪問結構變量或結構數(shù)組元素的成員,但是,不能博彩公司排名q07i5.org使它指向一個成員。也就是說不允許取一個成員的地址來賦予它。因此,下面的賦值是錯誤的。 ps=boy[1].sex; 而只能是: ps=boy;(賦予數(shù)組首地址) 或者是: ps=boy[0];(賦予0號元素首地址) C語言程序設計實驗十——指針 【實驗1】 實驗題目: 1、下列代碼片段哪里有錯誤? char var1,ptr1; var1 = ?x?; ptr1 = &var1; 2、設有如下定義: Double var1, *ptr1, *ptr2; Float* ptr3; Int var2, *var4; 那么,var1, *ptr1, ptr2,*ptr2,ptr3,* ptr3,var2, var4,*var4個屬于哪種數(shù)據(jù)類型? 3、下列代碼片段在哪里有錯誤? Char c = ? A ?; Char * p; p = c;或*p=?A?; 4、下列代碼片段的輸出結果是什么? charvar1 = ? S ?; charvar2 = ? X ?; char*ptr1, *ptr2; ptr1 = &var1; ptr2 = &var2; *ptr2 = *ptr1; printf(“%ct%cn”, *ptr1, var2); 【實驗2】 實驗題目:輸入3個整數(shù),按由小到大的順序輸出。 【實驗3】 實驗題目:輸入10個整數(shù),將其中最小的數(shù)與第一個數(shù)對換,把最大的數(shù)與最后一個數(shù)對換。 實驗要求:寫3個函數(shù):(1)輸入10個數(shù);(2)進行處理;(3)輸出10個數(shù)。 【實驗4】輸入年和天數(shù),輸出對應的年、月、日。 例如:輸入2000和61,輸出2000-3-1。 要求:都用指針實現(xiàn)。 一 實驗目的 實驗七 指針 了解指針的概念,學會定義和使用指針變量。2 掌握指針、變量和數(shù)組的關系及使用方法。3 學會使用指向函數(shù)的指針變量。 二 實驗內(nèi)容 編寫函數(shù)fun(float *sn,int n),其功能是:根據(jù)以下公式計算s,計算結果通過形參sn傳回;n通過實參傳入,n的值大于等于0。上機運行并記錄輸入輸出(主函數(shù)已給出)。 s?1?1111 ????3572n?1fun(float *sn,int n){ 定義變量:和s,通項w,符號f,循環(huán)控制變量i; /* 其中s、f要初始化 */ 循環(huán)求累加和s { 改變符號;/* 由負變正或由正變負 */ 求通項w;累加:s+=w;} 形參指針變量sn賦值;/* 通過形參sn傳回累加和s */ } main(){ float s;int n;printf(“n=”);scanf(“%d”,&n);fun(&s,n);printf(“s=%fn”,s);} 完整程序如下: #include 輸出結果如下圖: 想使指針變量pt1指向a和b中的大者,pt2指向小者,以下程序能否實現(xiàn)此目的? swap(int *p1,int *p2){ int *p;p=p1;p1=p2;p2=p } main(){ int a,b;int *pt1,*pt2;scanf(“%d,%d”,&a,&b);pt1=&a;pt2=&b;if(a 上機調(diào)試此程序。如果不能實現(xiàn)題目要求,指出原因并修改之。 子函數(shù)swap改成下面程序方可實現(xiàn)目的,主函數(shù)不變: swap(int *p1,int *p2){ int p;p=*p1;*p1=*p2;*p2=p;} 下面的程序用來實現(xiàn)將一個3×3的矩陣轉(zhuǎn)置。#include 程序修改如下: #include 第二篇:C語言結構體指針變量作函數(shù)參數(shù)
第三篇:C語言指向結構體數(shù)組的指針
第四篇:C語言程序設計實驗十指針
第五篇:C語言實驗程序、總結 實驗七 指針