《C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)》實(shí)驗(yàn)報(bào)告_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)》實(shí)驗(yàn)報(bào)告_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)》實(shí)驗(yàn)報(bào)告_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)》實(shí)驗(yàn)報(bào)告_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)》實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1/1《C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)》實(shí)驗(yàn)報(bào)告《C語(yǔ)言程序設(shè)計(jì)試驗(yàn)》試驗(yàn)報(bào)告

指導(dǎo)老師:

專(zhuān)業(yè):

班級(jí):

學(xué)號(hào):

姓名:

日期:2023-05-29

重慶郵電高校計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院

試驗(yàn)一

試驗(yàn)名稱(chēng):一維數(shù)組程序設(shè)計(jì)

試驗(yàn)?zāi)康模?/p>

1、嫻熟把握使用一維數(shù)組編程的方法。

2、嫻熟把握排序算法。

試驗(yàn)內(nèi)容:

1、調(diào)試示例

輸入一個(gè)整數(shù)n(0n9)和一組數(shù),再輸入一個(gè)整數(shù),把x插入到這個(gè)數(shù)據(jù)中,使該組數(shù)據(jù)仍舊有序。

源程序:略

調(diào)試好的程序:

#includestdio.h

intmain()

{

inti,j,n,x,a[10];

printf(輸入數(shù)據(jù)的個(gè)數(shù)n:);

scanf(%d,n);

printf(輸入%d個(gè)整數(shù):,n);

for(i=0;in;i++)

scanf(%d,a[i]);

printf(輸入要插入的整數(shù):);

scanf(%d,x);

for(i=0;in;i++)

{

if(xa[i])continue;

j=n-1;

while(j=i){

a[j+1]=a[j];

j--;

}

a[i]=x;

break;

}

if(i==n)a[n]=x;

for(i=0;i=n;i++)

printf(%d\t,a[i]);

return0;

}

2、編程題1

輸入一個(gè)正整數(shù)n(0n=10),再輸入n個(gè)整數(shù),輸出平均值(保留兩位小數(shù))。

程序代碼:

#includestdio.h

intmain()

{

inti,n,sum=0,a[10];

floatav;

printf(輸入數(shù)據(jù)的個(gè)數(shù)n:);

scanf(%d,n);

printf(輸入%d個(gè)整數(shù):,n);

for(i=0;in;i++)

scanf(%d,a[i]);

for(i=0;in;i++)

{

sum+=a[i];

}

av=(float)sum/n;

printf(%0.2f\t,av);

return0;

}

3、編程題2

輸入一個(gè)正整數(shù)n(0n=10),再輸入n個(gè)整數(shù),按逆序輸出這些數(shù)。

程序代碼

#includestdio.h

intmain()

{

inti,n,a[10];

printf(輸入數(shù)據(jù)的個(gè)數(shù)n:);

scanf(%d,n);

printf(輸入%d個(gè)整數(shù):,n);

for(i=0;in;i++)

scanf(%d,a[i]);

for(i=n-1;i=0;i--)

printf(%d\t,a[i]);

return0;

}

4、編程題3

輸入一個(gè)正整數(shù)n(0n=10),再輸入n個(gè)整數(shù),輸出最大值及其下標(biāo)(設(shè)最大值唯一,下標(biāo)從零開(kāi)頭)。

程序代碼:

#includestdio.h

intmain()

{

inti,j,n,x,a[10];

printf(輸入數(shù)據(jù)的個(gè)數(shù)n:);

scanf(%d,n);

printf(輸入%d個(gè)整數(shù):,n);

for(i=0;in;i++)

scanf(%d,a[i]);

x=a[0];

for(i=0;in;i++)

{

if(a[i]x){x=a[i];j=i;}

}

printf(最大數(shù):%d\t下標(biāo):%d\t,x,j);

return0;

}

5、編程題4

輸入一個(gè)正整數(shù)n(0n=10),再輸入n個(gè)整數(shù),將最小值與第一個(gè)數(shù)交換,最大值與最終一個(gè)數(shù)交換,然后輸出交換后的n個(gè)數(shù)。

程序代碼:

#includestdio.h

intmain()

{

inti,n,j=0,k=0,x,y,a[10];

printf(輸入數(shù)據(jù)的個(gè)數(shù)n:);

scanf(%d,n);

printf(輸入%d個(gè)整數(shù):,n);

for(i=0;in;i++)

scanf(%d,a[i]);

y=a[0];

x=a[0];

for(i=0;in;i++)

{

if(a[i]x){x=a[i];j=i;}

if(a[i]y){y=a[i];k=i;}

}

a[j]=a[0];

a[0]=y;

a[k]=a[i-1];

a[i-1]=x;

for(i=0;in;i++)

printf(%d\t,a[i]);

return0;

}

6、編程題5

輸入一個(gè)正整數(shù)n(0n=10),再輸入n個(gè)整數(shù),再將它們從小到大排序后輸出。

程序代碼:

#includestdio.h

intmain()

{

inti,n,j=0,x,a[10];

printf(輸入數(shù)據(jù)的個(gè)數(shù)n:);

scanf(%d,n);

printf(輸入%d個(gè)整數(shù):,n);

for(i=0;in;i++)

scanf(%d,a[i]);

x=a[0];

for(i=0;in-1;i++)

{

for(j=i;jn-1;j++)

{

if(a[i]a[j+1])

{

x=a[i];a[i]=a[j+1];a[j+1]=x;

}

elsecontinue;

}

}

for(i=0;in;i++)

printf(%d\t,a[i]);

return0;

}

試驗(yàn)總結(jié):

本次C語(yǔ)言上機(jī)試驗(yàn),主要是對(duì)一維整數(shù)數(shù)組進(jìn)行處理,通過(guò)本次試驗(yàn),我嫻熟把握了一維數(shù)組元素的處理組排序算法(冒泡排序法和選擇排序法)。

試驗(yàn)二

試驗(yàn)名稱(chēng):字符串程序設(shè)計(jì)

【試驗(yàn)1】推斷回文

從鍵盤(pán)輸入一串字符,推斷該字符串是否是回文,即該字符串從左向右讀,與從右向左讀都一樣,如“ABCBA”、“ABCCBA”。

編程思路:

定義指針start和end,分別指向字符串首、尾。分別從串首、尾開(kāi)頭向中間比較,若指針?biāo)缸址煌?,則不是回文。

源程序:

#includestdio.h

#includestring.h

intis(char*ptr);

voidmain()

{

charstr[100];

printf(inputastring\n);

gets(str);

if(is(str))

{printf(%sisaPalindrome\n,str);}

else

{printf(%sisanotpalindrome\n,str);}

}

intis(char*ptr)

{

inti,a,flag=0;

a=(int)strlen(ptr)-1;//數(shù)組下標(biāo)從0開(kāi)頭!

for(i=0;a=0;i++,a--)

{

if(ptr[a]==ptr[i])

flag=1;

else

{

flag=0;

break;

}

}

returnflag;

}

【試驗(yàn)2】刪除排序

已知某已排好序的數(shù)組,其元素為{1,3,5,7,9},從鍵盤(pán)輸入x的值,若數(shù)組中存在與x相等的元素,則刪除。

編程思路:

搜尋整個(gè)數(shù)組推斷x是否存在于數(shù)組中;假如在,定位待刪除元素的下標(biāo);從該下標(biāo)開(kāi)頭,將全部后續(xù)元素往前移。留意移動(dòng)挨次應(yīng)從最終一個(gè)元素開(kāi)頭,還是先從待刪除元素的位置開(kāi)頭!

源程序:

#includestdio.h

#includestdlib.h

int*Delete(inta[],intn,intx)

{

inti,pos,k;

for(i=0;in;i++)

{

if(a[i]==x)

{pos=i;

break;

}

}

for(k=pos;kn-1;k++)

a[k]=a[k+1];

returna;

}

intmain()

{

intarr[5]={1,3,5,7,9},x,i;

printf(inputx=);

scanf(%d,x);

printf(beforedelete);

for(i=0;i5;i++)

printf(%4d,arr[i]);

printf(\n);

Delete(arr,5,x);

printf(afterdelete);

for(i=0;i4;i++)

printf(%4d,arr[i]);

printf(\n);

return0;

}

試驗(yàn)總結(jié):

通過(guò)這次試驗(yàn),了解了字符串的特點(diǎn),它在數(shù)組中有結(jié)束標(biāo)志“\0”,而其長(zhǎng)度又不將起算在內(nèi),牢記這點(diǎn)對(duì)編程速率很有關(guān)心。

試驗(yàn)三

試驗(yàn)名稱(chēng):指針和二維數(shù)組

【試驗(yàn)1】對(duì)N個(gè)字符串進(jìn)行排序

編程思路:

第一種實(shí)現(xiàn)方式:要求從鍵盤(pán)輸入N個(gè)字符串,將其存儲(chǔ)在二維數(shù)組中,在主函數(shù)中進(jìn)行排序。

其次種實(shí)現(xiàn)方式:要求定義指針數(shù)組指向N個(gè)字符串,調(diào)用函數(shù)sort()進(jìn)行排序。sort()具有如下原型:

/*

函數(shù)返回值:多級(jí)指針類(lèi)型char**,返回指針數(shù)組首地址

形式參數(shù):指針p,char*,用于操縱N個(gè)字符串

line,int,表示字符串個(gè)數(shù)

*/

char**sort(char*p[],intlinel)

源程序:

#includestdio.h

#includestring.h

#defineN5

intmain()

{

/*定義二維數(shù)組*/

inti,k,j;

chara[N][30],temp[20];

/*從鍵盤(pán)輸入N個(gè)字符串*/

printf(從鍵盤(pán)輸入%d個(gè)字符串\n,N);

for(i=0;iN;i++)

gets(a[i]);

for(i=0;iN-1;i++)

{

k=i;

/*若當(dāng)前字符串大于str[k],記錄其下標(biāo)*/

for(j=i+1;jN;j++)

{

if(strcmp(a[k],a[j])0)//a[i]改為a[k]

k=j;

}

if(k!=i)

{

/*交換字符串str[k]和str[i]*/

strcpy(temp,a[i]);strcpy(a[i],a[k]);strcpy(a[k],temp);

}

}

puts(\nAftersort:);

for(i=0;iN;i++)

puts(a[i]);

return0;

}

【試驗(yàn)2】找眾數(shù)

定義函數(shù)實(shí)現(xiàn):

(1)輸出整數(shù)數(shù)組中重復(fù)消失的數(shù)和重復(fù)的次數(shù)。

(2)找出整數(shù)數(shù)組中的眾數(shù)(即消失次數(shù)最多的數(shù))

并編寫(xiě)相應(yīng)的主函數(shù)測(cè)試之。

編程思路:

先對(duì)數(shù)組排序,排序后數(shù)組內(nèi)的元素如有相同值就會(huì)緊鄰存儲(chǔ)。

定義maxCount、maxI、seek,分別表示最多重復(fù)次數(shù)、最多重復(fù)次數(shù)對(duì)應(yīng)的元素下標(biāo)、當(dāng)前正在查找的數(shù)值,將兩數(shù)置0。從頭掃描整個(gè)數(shù)組,統(tǒng)計(jì)每個(gè)元素消失的次數(shù),假如消失次數(shù)大于maxCount,記錄其消失次數(shù)和該元素對(duì)應(yīng)下標(biāo)。掃描完畢即可找到眾數(shù)及其消失次數(shù)。

源程序:

#includestdio.h

#includestring.h

#defineN6

intmain()

{

inta[N];

inti,j,k,temp;

intmaxCount=0,maxI=0,seek=0,count=0;

for(i=0;iN;i++)

{

printf(請(qǐng)輸入第%d個(gè)數(shù):,i+1);

scanf(%d,a+i);

}

/*選擇法對(duì)數(shù)組排序*/

for(i=0;iN-1;i++)

{

k=i;

for(j=i;jN;j++)

if(a[k]a[j])//a[i]改為a[k]

k=j;

if(i!=k)

{temp=a[i];a[i]=a[k];a[k]=temp;}

}

for(i=0,seek=a[0];i=N;i++)

{

if(seek==a[i])

{

/*計(jì)數(shù)器加1*/

count++;

}

else

{

/*輸出前一元素的值和消失次數(shù)*/

printf(Number=%d,Count=%d\n,a[i-1],count);

/*假如前一元素的消失次數(shù)比maxCount大,則修改maxCount和maxI*/if(countmaxCount)

{

maxCount=count;

maxI=i-1;

}

count=0;

count++;

seek=a[i];

}

}

printf(\nmaxNumber=%d,maxCount=%d\n,a[maxI],maxCount);

return0;

}

試驗(yàn)總結(jié):

本次試驗(yàn)運(yùn)用了選擇法對(duì)數(shù)組進(jìn)行排序,不管是二維數(shù)組,還是一維數(shù)組,其思路是一樣的,只是詳細(xì)的實(shí)現(xiàn)有所不同,比如比較字符串要用函數(shù)strcmp()。

試驗(yàn)四

試驗(yàn)名稱(chēng):結(jié)構(gòu)體

【試驗(yàn)1】計(jì)算橢圓面積

已知坐標(biāo)系統(tǒng)中兩點(diǎn)p1、p2構(gòu)成的矩形是橢圓的外切矩形,如圖3-1所示。

定義結(jié)構(gòu)體

structellipse

{

structpoint

{

intx;

inty;

}p1,p2;

doublea;

doubleb;

};

從鍵盤(pán)輸入p1、p2的坐標(biāo)值,計(jì)算橢圓面積,已知積計(jì)算公式為:S=Πab。程序代碼:

#includestdio.h

#includemath.h

structellipse

{

structpoint

{

intx;

inty;

}p1,p2;

doublea;

doubleb;

};

typedefstructellipseell;

intmain()

{

}elle;doubles;printf(請(qǐng)輸入左上角頂點(diǎn)坐標(biāo):);/*輸入坐標(biāo)*/scanf(%d%d,e.p1.x,e.p1.y);printf(請(qǐng)輸入右下角頂點(diǎn)坐標(biāo):);/*輸入坐標(biāo)*/scanf(%d%d,e.p2.x,e.p2.y);/*計(jì)算橢圓面積*/e.a=abs((e.p1.y-e.p2.y))/2.0;//取整函數(shù)abs()e.b=abs((e.p1.x-e.p2.x))/2.0;s=3.14*e.a*e.b;printf(area=%lf\n,s);return0;

試驗(yàn)總結(jié):

這次試驗(yàn)用到了結(jié)構(gòu)體的嵌套定義,通過(guò)試驗(yàn),讓我更深化了解結(jié)構(gòu)體的定義,使用,訪(fǎng)問(wèn)等操作。

試驗(yàn)五

試驗(yàn)名稱(chēng):指針強(qiáng)化1

【試驗(yàn)1】字符串逆序存儲(chǔ)

編寫(xiě)一個(gè)函數(shù)inverse,實(shí)現(xiàn)將字符串逆序存放,即原字符串為“abcdef”,將其重新存儲(chǔ)為“fedcba”。

試驗(yàn)思路:

從字符串中第一個(gè)字符開(kāi)頭,使其和最終一個(gè)字符交換,其次個(gè)字符和倒數(shù)其次個(gè)字符交換,??,始終到字符串中間的字符為止。

程序代碼:

#includestdio.h

#includestring.h

char*inverse(char*p){

}

intmain()

{

}

/*定義需要用到的變量*/inti,len;chartmp;len=strlen(p);/*將原字符串逆序存儲(chǔ)于p所指數(shù)組中*/for(i=len-1;i=len/2;i--){}returnp;tmp=*(p+i);*(p+i)=*(p+len-1-i);*(p+len-1-i)=tmp;charstr[100];printf(請(qǐng)輸入字符串:);gets(str);puts(inverse(str));return0;

【試驗(yàn)2】字符串逆序存儲(chǔ)刪除字符串s中全部消失的與變量c相同的字符。

程序代碼:

#includestdio.h

#includestring.h

char*squeez(char*s,charc){

}

intmain()

{

chars[100],c;inti,j;for(i=j=0;istrlen(s);i++)//___請(qǐng)?zhí)羁誣__{}s[j]=\0;returns;if(s[i]!=c){}s[j]=s[i];//___請(qǐng)?zhí)羁誣__j++;

}printf(請(qǐng)輸入字符串:);gets(s);printf(請(qǐng)輸入變量:);c=getchar();puts(squeez(s,c));return0;

試驗(yàn)總結(jié):

這次與前面的某次試驗(yàn)的內(nèi)容差不多,用到了學(xué)問(wèn)點(diǎn)是指針,字符串。

試驗(yàn)六

試驗(yàn)名稱(chēng):指針強(qiáng)化2

【試驗(yàn)1】實(shí)現(xiàn)庫(kù)函數(shù)atoi

已知C標(biāo)準(zhǔn)庫(kù)函數(shù)atoi實(shí)現(xiàn)將字符串轉(zhuǎn)換為整數(shù)的功能,如:

charstr[]=123456;

printf(對(duì)應(yīng)的整數(shù)為:%d\n,atoi(str));

自定義函數(shù):intatoi(char*str),使其實(shí)現(xiàn)同名標(biāo)準(zhǔn)庫(kù)函數(shù)的功能。

試驗(yàn)思路:

先考慮最簡(jiǎn)潔的狀況,字符串中只有數(shù)字,假如是負(fù)數(shù),字符串第一個(gè)元素是負(fù)號(hào)。定義變量sign,若字符串中第一個(gè)元素是﹣,則sign值為-1,并讓字符串指針指向下一元素。指針指向字符串“-123456”的第一個(gè)數(shù)字字符1,將其轉(zhuǎn)換為對(duì)應(yīng)數(shù)字1,放入變量t中,指針下移至后一元素2,再將其轉(zhuǎn)換為對(duì)應(yīng)數(shù)字2,將t中1變成10,再加2,如此循環(huán),至字符串結(jié)束。返回變量t*sign即可。

程序代碼:

#includestdio.h

#includestring.h

intatoi(char*str);

intmain()

{

charstr[100];

printf(請(qǐng)輸入字符串:);

gets(str);//此處不能否替換成scanf()!printf(對(duì)應(yīng)的整數(shù)為:%d\n,atoi(str));return0;

}

intatoi(char*str)

{

inti=0,a,s=0,sign=0,p=1;for(i=0;*(str+i)!=\0p;i++){if(*(str+i)==-(*(str+i+1)=48*(str+i+1)=57||i==0))sign=-1;if(*(str+i)=48*(str+i)=57){a=*(str+i)-48;s=s*10+a;if(*(str+i+1)=48*(str+i+1)=57p)p=0;}

}}if(sign)s*=sign;returns;

【試驗(yàn)2】譯碼

編寫(xiě)change函數(shù)實(shí)現(xiàn):將大于0小于1000的阿拉伯?dāng)?shù)字轉(zhuǎn)換為羅馬數(shù)字輸出。阿拉伯?dāng)?shù)字和羅馬數(shù)字對(duì)應(yīng)關(guān)系如下:

并編寫(xiě)相應(yīng)的主函數(shù)測(cè)試該函數(shù)。

試驗(yàn)思路:

先考慮最簡(jiǎn)潔的狀況,字符串中只有數(shù)字,假如是負(fù)數(shù),字符串第一個(gè)元素是負(fù)號(hào)。定義變量sign,若字符串中第一個(gè)元素是﹣,則sign值為-1,并讓字符串指針指向下一元素。指針指向字符串“-123456”的第一個(gè)數(shù)字字符1,將其轉(zhuǎn)換為對(duì)應(yīng)數(shù)字1,放入變量t中,指針下移至后一元素2,再將其轉(zhuǎn)換為對(duì)應(yīng)數(shù)字2,將t中1變成10,再加2,如此循環(huán),至字符串結(jié)束。返回變量t*sign即可。

程序代碼:

#includestdio.h

/*定義數(shù)據(jù)結(jié)構(gòu)code存儲(chǔ)羅馬字符*/

typedefstruct

{chars[3];//別忘了\0inta;}COD;

intchange(COD*code,intnum);

intmain()

{

COD

code[13]={{M,1000},{CM,900},{D,500},{CD,400},{C,100},{XC,90},{L,50},{XL,40},{X,10},{IX,9},{V,5},{IV,4},{I,1}};

}

intchange(COD*code,intnum)

{

inti,a,last=0;while(num){a=num/(*(code+last)).a;intx;printf(請(qǐng)輸入一個(gè)阿拉伯?dāng)?shù)字:);scanf(%d,x);if(x0x4000)change(code,x);elseprintf(輸入的阿拉伯?dāng)?shù)字超出范圍!??!\n);return0;

}}if(a=0)last++;else{}for(i=0;ia;i++)printf(%s,(*(code+last)).s);num%=(*(code+last)).a;//有點(diǎn)類(lèi)似進(jìn)制型問(wèn)題putchar(10);return0;

試驗(yàn)總結(jié):

這次試驗(yàn)譯碼試驗(yàn)給我的印象比較深,開(kāi)頭在算法上有點(diǎn)糾結(jié),后來(lái)想到了以上程序中的算法,其實(shí)是個(gè)逐減和取余的問(wèn)題,另外還用到了結(jié)構(gòu)體,指針等學(xué)問(wèn),綜合性還是比較大的。但算法是面對(duì)過(guò)程程序設(shè)計(jì)的靈魂,想到算法就好辦了。

試驗(yàn)七

試驗(yàn)名稱(chēng):模擬1

簡(jiǎn)潔題:計(jì)算卡片的最大數(shù)量

將一摞卡片根據(jù)圖1所示疊放,使其中一部分懸于桌外(卡片數(shù)量為n,每張卡片長(zhǎng)度為

1)。當(dāng)n=1時(shí),僅有一張卡片,其最大可懸空長(zhǎng)度為1/2;當(dāng)n=2時(shí),置于底部的那張卡片其懸空長(zhǎng)度是1/3,而置于頂部的卡片其懸空長(zhǎng)度是1/2,故懸于桌外的總長(zhǎng)度是1/2+1/3=5/6??梢酝茢啵?dāng)有n張卡片時(shí),懸空部分的總長(zhǎng)度是:1/2+1/3+1/4+...+1/(n+1)。從鍵盤(pán)輸入一個(gè)最大懸空長(zhǎng)度值,推斷該長(zhǎng)度下最多能疊放幾張卡片。

圖1卡片最大可懸空長(zhǎng)度示意圖

程序代碼:

#includestdio.h

intmain()

{

}inti,maxl;floatl,sum=0;printf(inputlength:\n);scanf(%f,l);for(i=1;suml;i++){}printf(最多能放%d張。\n,maxl);return0;sum+=(floata)1/(i+1);maxl=i;

高難度題:圖書(shū)管理(可選用結(jié)構(gòu)體數(shù)組或鏈表完成)圖書(shū)館的書(shū)對(duì)應(yīng)的數(shù)據(jù)類(lèi)型定義如下:

structbook

{

Charname_of_book[100];

Charauthor[25];

};

編寫(xiě)函數(shù)實(shí)現(xiàn):

(1)統(tǒng)計(jì)某一編寫(xiě)了幾本書(shū)。

(2)將全部書(shū)的記錄存儲(chǔ)到文件a.txt。然后編寫(xiě)相應(yīng)的主函數(shù)調(diào)用這兩個(gè)函數(shù)。程序代碼:

#includestdio.h

#includestdlib.h

#includestring.h

typedefstructbook

{

charbook_name[50],

author[20];

structbook*next;

}BOOK;

/**********輸入鏈表單元內(nèi)容************/voidinput(BOOK*p)

{

printf(bookname:\n);

scanf(%s,p-book_name);

printf(pleaseinputtheauthorname:\n);scanf(%s,p-author);

}

/**********創(chuàng)建一個(gè)鏈表單元**********/BOOK*creat_node()

{

BOOK*p;

p=(BOOK*)malloc(sizeof(BOOK));if(p==NULL)

{printf(Noenoughmemory!);exit(0);

}

input(p);

p-next=NULL;

returnp;

}

/**********創(chuàng)建一個(gè)鏈表**********/BOOK*creat_list()

{

BOOK*head=NULL,*tail=NULL,*p;

charstr[4];

printf(Listcreating...\n);

do

{

printf(Doyouwanttocontinue(yes/no):);scanf(%s,str);

if(strcmp(str,yes)==0)

{

p=creat_node();

if(head==NULL){head=tail=p;continue;}tail-next=p;

tail=p;

}

if(strcmp(str,yes)!=0strcmp(str,no)!=0){

printf(Youmustinputyesorno.\n);//getchar();

continue;

}

if(strcmp(str,no)==0)break;

//getchar();

}while(1);

printf(Listcreateend...\n\n);

returnhead;

}

/************輸出一個(gè)鏈表頭部**********/voidprint_a_head()

{

printf(bnameauthor\n);

}

/************輸出鏈表**********/

intprint_list(BOOK*book)

{

BOOK*p=book;

if(book==NULL)

{

printf(norecords!!!\n);

return(0);

}

print_a_head();

while(p!=NULL)

{

printf(%s;\t%s;\n,book-book_name,book-author);

p=p-next;

}

putchar(10);

return(0);

}

/**********查找統(tǒng)計(jì)鏈表name**********/intcount(BOOK*book,charname[])

{

intcount=0;

BOOK*p=book;

while(p!=NULL)

{

if(strcmp(p-author,name)==0){count++;}p=p-next;

}

returncount;

}

/**********輸入外部*********/

intoutput(BOOK*book)

{

FILE*fp;

BOOK*p=book;

if((fp=fopen(a.txt,w))==NULL){printf(cannotopen!);return-1;}

while(p!=NULL)

{

fputs(p-book_name,fp);

fputc(32,fp);

fputs(p-author,fp);

fputc(10,fp);

p=p-next;

}

return0;

}

intmain()

{

charname[20];

BOOK*book;

book=creat_list();

//print_list(book);

printf(輸入某的名字:\n);

scanf(%s,name);

printf(%s寫(xiě)的的書(shū)數(shù):%d\n,name,count(book,name));

}

output(book);return0;

試驗(yàn)總結(jié):

這次試驗(yàn)的第一題算法上想得到的話(huà)能很開(kāi)做出來(lái)?!皥D書(shū)管理(可選用結(jié)構(gòu)體數(shù)組或鏈表完成)”這題用到的學(xué)問(wèn)點(diǎn)比較多,綜合性也比較大,和我們之前布置的一道作業(yè)題目很相像,我用了動(dòng)態(tài)鏈表+文件做這道題,算法上基本沒(méi)什么難度,就是工作量比較大,做出來(lái)的代碼也很長(zhǎng),這樣編程的速率就很重要了,要求編程者各方面的力量都必需過(guò)硬,比如打字、對(duì)學(xué)問(wèn)點(diǎn)的嫻熟程度、編程調(diào)試技巧等。

試驗(yàn)八

試驗(yàn)名稱(chēng):文件

【試驗(yàn)1】抓交通肇事犯(復(fù)習(xí)循環(huán))

一輛卡車(chē)交通肇事后逃逸。現(xiàn)場(chǎng)有三人目擊大事,但是都沒(méi)有記住車(chē)號(hào),只登記車(chē)號(hào)的一些特征。甲說(shuō):牌照的前兩位數(shù)字是相同的;乙說(shuō):牌照的后兩位數(shù)字是相同的,但與前兩位不同;丙是位數(shù)學(xué)家,他說(shuō):四位車(chē)號(hào)組成的數(shù)字剛好是一個(gè)整數(shù)的平方。請(qǐng)依據(jù)以上線(xiàn)索求出車(chē)號(hào)的四位數(shù)字。

程序代碼:

#includestdio.h

#includemath.h

intmain()

{

inti,j,k,num;

for(i=0;i=9;i++)

for(j=0;j=9;j++)

{

if(i==j)continue;

num=1100*i+11*j;

for(k=0;k=(int)sqrt(num);k++)

if(num==k*k)

printf(Thenumberis:%6d\n,num);

}

}

【試驗(yàn)2】寫(xiě)入數(shù)據(jù)至文件

從鍵盤(pán)輸入一個(gè)字符串,將其中的小寫(xiě)字母全部轉(zhuǎn)換為大寫(xiě)字母,然后輸出到磁盤(pán)文件“test”中保存。輸入的字符串以“!”結(jié)束。

程序代碼:

#includestdio.h

#includestdlib.h

voidPutToFile(char*FileName);

voidReadFromFile(char*FileName);

voidPutToFile(char*FileName)

{

charch;

FILE*fp=fopen(FileName,w);

if(fp==NULL)

{

printf(打開(kāi)文件失敗!\n);

exit(EXIT_FAILURE);

}

printf(請(qǐng)輸入數(shù)據(jù):);

while((ch=getchar())!=!)/*當(dāng)前輸入字符不是‘!’*/

{

if(ch96ch123)ch-=32;/*若是小寫(xiě)字母,將其換為大寫(xiě)字母*/if((fputc(ch,fp))==EOF)/*將當(dāng)前輸入字符寫(xiě)入文件*/

/*推斷寫(xiě)入是否勝利,假如不勝利,打印失敗信息,終止程序*/{

printf(打印失敗!\n);

exit(EXIT_FAILURE);

}

}

fclose(fp);

printf(向文件寫(xiě)入信息勝利!\n);

}

voidReadFromFile(char*FileName)

{

charch;

FILE*fp=fopen(FileName,r);

if(fp==NULL)

{

printf(打開(kāi)文件失敗!\n);

exit(EXIT_FAILURE);

}

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

putchar(10);

fclose(fp);

printf(勝利!\n);

}

intmain()

{

PutToFile(test.dat);

ReadFromFile(test.dat);

return0;

}

試驗(yàn)總結(jié):

這次試驗(yàn)主要練習(xí)文件處理,把那些相關(guān)的學(xué)問(wèn)點(diǎn)記牢了,加上前面的編程的閱歷積累,難度還不是很大的。

試驗(yàn)九

試驗(yàn)名稱(chēng):鏈表

【試驗(yàn)1】計(jì)算折線(xiàn)長(zhǎng)度

已知如下結(jié)構(gòu)體類(lèi)型:

structpoint

{

intx;//橫坐標(biāo)

inty;//縱坐標(biāo)

structpoint*next;

};

編程實(shí)現(xiàn)按一次enter鍵,動(dòng)態(tài)產(chǎn)生一個(gè)point類(lèi)型的節(jié)點(diǎn),該節(jié)點(diǎn)的橫縱坐標(biāo)值隨機(jī)產(chǎn)生,且坐標(biāo)值只能在[0,100],敲擊5次enter鍵以后,計(jì)算動(dòng)態(tài)產(chǎn)生的5個(gè)點(diǎn)構(gòu)成的折線(xiàn)總長(zhǎng)度。

編程思路:

定義函數(shù)pt*CreateLink()實(shí)現(xiàn)鏈表的創(chuàng)建。在該函數(shù)中,用戶(hù)敲擊一次ENTER鍵,程序調(diào)用malloc或者calloc創(chuàng)建一個(gè)節(jié)點(diǎn)p,利用隨機(jī)函數(shù)rand()給p-x和p-y賦值,再將該節(jié)點(diǎn)連接到head指針?biāo)告湵砦膊浚ㄔ敿?xì)方法見(jiàn)8-0)。

定義函數(shù)voidDestroyLink(pt*head)實(shí)現(xiàn)鏈表的銷(xiāo)毀。詳細(xì)方法是:讓指針p指向頭指針head所指的第一個(gè)節(jié)點(diǎn),此時(shí)p所指節(jié)點(diǎn)即為本次循環(huán)要銷(xiāo)毀的當(dāng)前節(jié)點(diǎn),然后讓頭指針指向下一個(gè)節(jié)點(diǎn),即head=head-next,最終free(p)。這樣就銷(xiāo)毀了一個(gè)節(jié)點(diǎn)。利用循環(huán)即可按此方法消退全部節(jié)點(diǎn)。

定義函數(shù)voidPrintLink(pt*head)實(shí)現(xiàn)鏈表的打印。詳細(xì)方法是:用p遍歷整個(gè)鏈表全部節(jié)點(diǎn),每遍歷一個(gè)節(jié)點(diǎn),即打印當(dāng)前節(jié)點(diǎn)的橫縱坐標(biāo),直到p指向鏈表的最終一個(gè)節(jié)點(diǎn)。定義函數(shù)doubleCalcLen(pt*head)實(shí)現(xiàn)折線(xiàn)長(zhǎng)度的計(jì)算。詳細(xì)方法是:定義指針pr、p,分別指向第一節(jié)點(diǎn)和其次節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),計(jì)算兩個(gè)節(jié)點(diǎn)的距離,累加到累加器中,再讓pr、p分別挪向下一結(jié)點(diǎn),指向其次節(jié)點(diǎn)和第三節(jié)點(diǎn),在計(jì)算它們的距離,再進(jìn)行累加,直到p指向最終一個(gè)節(jié)點(diǎn)。最終返回累加器的結(jié)果。

程序代碼:

#includestdio.h

#includestdlib.h

#includemath.h

#includetime.h

structpoint

{

intx;//橫坐標(biāo)

inty;//縱坐標(biāo)

structpoint*next;

};

typedefstructpointPT;

voidPrintLink(PT*head)

{

PT*p=head;

puts(打印全部點(diǎn)的坐標(biāo):);

puts();

while(p)

{

printf((%d,%d)\n,p-x,p-y);

p=p-next;

}

}

PT*CreateLink()//前插法

{

PT*p,*head=NULL;

inti=0;

while(getchar()==\ni5)

{

p=(PT*)malloc(sizeof(PT));

if(p==NULL)

{printf(Noenoughmemory!);

exit(0);

}

p-x=rand()%101-1;

p-y=rand()%101-1;

p-next=head;

head=p;

i++;

printf((%d,%d)\n,p-x,p-y);

}

returnhead;

}

doubleCalcLen(PT*head)

{

doublelength=0;

PT*p1=head,*p2=head-next;

while(p2!=NULL)

{

length+=sqrt(pow((p2-x-p1-x),2)+pow((p2-y-p1-y),2));p1=p1-next;

p2=p2-next;

}

returnlength;

}

voidDestroyLink(PT*head)//脫節(jié)再釋放

{

PT*p=head,*p1;

while(p!=NULL)

{

p1=p;

p=p-next;

p1-next=NULL;

free(p1);

}

printf(勝利釋放鏈表!\n);

}

intmain()

{

PT*head=CreateLink();

doublelength;

srand(time(NULL));

PrintLink(head);

length=CalcLen(head);

printf(length=%lf\n,length);

DestroyLink(head);//這個(gè)函數(shù)沒(méi)有,考試至少扣5分!!!

return0;

}

試驗(yàn)總結(jié):

這次試驗(yàn)主要練習(xí)鏈表處理,把那些相關(guān)的學(xué)問(wèn)點(diǎn)記牢了,加上前面的編程的閱歷積累,雖然難度是比較大的,但多練,多實(shí)踐,總會(huì)有收獲的。

試驗(yàn)十

試驗(yàn)名稱(chēng):綜合程序設(shè)計(jì)1

【任務(wù)1】獵取當(dāng)前系統(tǒng)日期和時(shí)間

已知標(biāo)準(zhǔn)C庫(kù)文件time.h中,有如下結(jié)構(gòu)體和函數(shù)可以獵取系統(tǒng)當(dāng)前的日期和時(shí)間:

(1)與系統(tǒng)時(shí)間和日期相關(guān)的結(jié)構(gòu)體

structm

{

inttm_sec;//秒,0-59

inttm_min;//分,0-59

inttm_hour;//時(shí),0-23

inttm_mday;//天數(shù),1-31

inttm_mon;//月數(shù),0-11

inttm_year;//自1900的年數(shù)

inttm_wday;//自星期日的天數(shù)0-6

inttm_yday;//自1月1日起的天數(shù),0-365

inttm_isdst;//是否采納夏時(shí)制,采納為正數(shù)

};

(2)獵取時(shí)間的兩個(gè)函數(shù)

longtime(long*tloc)//本函數(shù)給出自格林威治時(shí)間19xx年1月1日凌晨至現(xiàn)在所經(jīng)//過(guò)的秒數(shù),并將該值存于tloc所指的單元中

structtm*localtime(long*clock)//把clock所指的時(shí)間(如函數(shù)time()返回的時(shí)間)

//轉(zhuǎn)換成當(dāng)?shù)貥?biāo)準(zhǔn)時(shí)間,并以結(jié)構(gòu)體tm形式返回

程序代碼:

#includestdio.h

#includetime.h

intmain()

{

structtm*cc;

longtt=0;

time(tt);

//printf(%ld\n,tt);

cc=localtime(tt);

printf(\n\n\t\t**********************************\n);

printf(\t\t**\t%d年%d月%d日\(chéng)t\t**\n\t\t**\t%d:%d:%d\t\t**\n,1900+cc-tm_year,1+cc-tm_mon,cc-tm_mday,cc-tm_hour,cc-tm_min,cc-tm_sec);

printf(\t\t**********************************\n);

return0;

}

【任務(wù)2】利用OPENGL實(shí)現(xiàn)可視化時(shí)鐘

【問(wèn)題描述】

請(qǐng)認(rèn)真查找資料完成任務(wù)2。重點(diǎn)查找VC++中如何加入OPENGL相應(yīng)庫(kù)文件和頭文件的方法。關(guān)于OPENGL相關(guān)學(xué)問(wèn),請(qǐng)自相參閱已上傳到群中的《OpenGL編程指南(第四版)》、

(沒(méi)有做)

試驗(yàn)總結(jié):

這次試驗(yàn)我想應(yīng)當(dāng)是考察我們學(xué)習(xí)新學(xué)問(wèn)的力量,用到的主要學(xué)問(wèn)都是題中給出的,其次題要用到繪圖的學(xué)問(wèn),由于沒(méi)有資料參考,我沒(méi)做出來(lái)。自學(xué)對(duì)一個(gè)編程者是很重要的,由于現(xiàn)今世界IT技術(shù)進(jìn)展很快。

試驗(yàn)十一

試驗(yàn)名稱(chēng):綜合程序設(shè)計(jì)1

【試驗(yàn)10-1】數(shù)字校內(nèi)一卡通

完成如下程序(可以采納結(jié)構(gòu)體+文件、鏈表+文件、動(dòng)態(tài)數(shù)組+文件等方法完成)。最好每個(gè)方法都試驗(yàn)一次。

srtuctone_card

{

charID[9];//一卡通編號(hào)

charname[20];//姓名

chartype;//’s’表示同學(xué),’t’表示老師

doublebalance;//余額

};

請(qǐng)編寫(xiě)函數(shù)實(shí)現(xiàn)下列功能:

1、為每張老師用卡補(bǔ)助100元(1、2任選一)

2、從同學(xué)一卡通中扣除網(wǎng)費(fèi)50元

3、按一卡通編號(hào)查找某人信息(3、4、5任選一)

4、按姓名查找某人信息

5、按一卡通編號(hào)排序

6、插入一個(gè)元素(6、7任選一)

7、刪除一個(gè)元素

8、將信息寫(xiě)入文件a.txt(8、9任選一)

9、從a.txt文件中讀出全部信息

10、編寫(xiě)主函數(shù)

程序代碼:

#includestdio.h

#includestdlib.h

#includestring.h

typedefstructone_card

{

charID[9];//一卡通編號(hào)

charname[20];//姓名

chartype;//’s’表示同學(xué),’t’表示老師

doublebalance;//余額

structone_card*next;

}CARD;

CARD*CreatLink(intn)

{

CARD*head=NULL,*p,*pr;

inti;

for(i=1;i=n;i++)

{

p=(CARD*)malloc(sizeof(CARD));//生成新結(jié)點(diǎn)if(p==NULL)

{

puts(cannotsatisfytheneedtomemory!);exit(0);

}

//初始化當(dāng)前結(jié)點(diǎn)

puts(inputID:\t);

getchar();

gets(p-ID);

puts(inputname:\t);

//getchar();

gets(p-name);

puts(inputtype:\t);

//get

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論