《C語言程序設(shè)計實驗》實驗報告_第1頁
《C語言程序設(shè)計實驗》實驗報告_第2頁
《C語言程序設(shè)計實驗》實驗報告_第3頁
《C語言程序設(shè)計實驗》實驗報告_第4頁
《C語言程序設(shè)計實驗》實驗報告_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1/1《C語言程序設(shè)計實驗》實驗報告《C語言程序設(shè)計試驗》試驗報告

指導(dǎo)老師:

專業(yè):

班級:

學(xué)號:

姓名:

日期:2023-05-29

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

試驗一

試驗名稱:一維數(shù)組程序設(shè)計

試驗?zāi)康模?/p>

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

2、嫻熟把握排序算法。

試驗內(nèi)容:

1、調(diào)試示例

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

源程序:略

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

#includestdio.h

intmain()

{

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

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

scanf(%d,n);

printf(輸入%d個整數(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

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

程序代碼:

#includestdio.h

intmain()

{

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

floatav;

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

scanf(%d,n);

printf(輸入%d個整數(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

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

程序代碼

#includestdio.h

intmain()

{

inti,n,a[10];

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

scanf(%d,n);

printf(輸入%d個整數(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

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

程序代碼:

#includestdio.h

intmain()

{

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

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

scanf(%d,n);

printf(輸入%d個整數(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下標:%d\t,x,j);

return0;

}

5、編程題4

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

程序代碼:

#includestdio.h

intmain()

{

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

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

scanf(%d,n);

printf(輸入%d個整數(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

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

程序代碼:

#includestdio.h

intmain()

{

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

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

scanf(%d,n);

printf(輸入%d個整數(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;

}

試驗總結(jié):

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

試驗二

試驗名稱:字符串程序設(shè)計

【試驗1】推斷回文

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

編程思路:

定義指針start和end,分別指向字符串首、尾。分別從串首、尾開頭向中間比較,若指針所指字符不同,則不是回文。

源程序:

#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ù)組下標從0開頭!

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

{

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

flag=1;

else

{

flag=0;

break;

}

}

returnflag;

}

【試驗2】刪除排序

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

編程思路:

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

源程序:

#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;

}

試驗總結(jié):

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

試驗三

試驗名稱:指針和二維數(shù)組

【試驗1】對N個字符串進行排序

編程思路:

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

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

/*

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

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

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

*/

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

源程序:

#includestdio.h

#includestring.h

#defineN5

intmain()

{

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

inti,k,j;

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

/*從鍵盤輸入N個字符串*/

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

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

gets(a[i]);

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

{

k=i;

/*若當前字符串大于str[k],記錄其下標*/

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;

}

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

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

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

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

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

編程思路:

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

定義maxCount、maxI、seek,分別表示最多重復(fù)次數(shù)、最多重復(fù)次數(shù)對應(yīng)的元素下標、當前正在查找的數(shù)值,將兩數(shù)置0。從頭掃描整個數(shù)組,統(tǒng)計每個元素消失的次數(shù),假如消失次數(shù)大于maxCount,記錄其消失次數(shù)和該元素對應(yīng)下標。掃描完畢即可找到眾數(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(請輸入第%d個數(shù):,i+1);

scanf(%d,a+i);

}

/*選擇法對數(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])

{

/*計數(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;

}

試驗總結(jié):

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

試驗四

試驗名稱:結(jié)構(gòu)體

【試驗1】計算橢圓面積

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

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

structellipse

{

structpoint

{

intx;

inty;

}p1,p2;

doublea;

doubleb;

};

從鍵盤輸入p1、p2的坐標值,計算橢圓面積,已知積計算公式為:S=Πab。程序代碼:

#includestdio.h

#includemath.h

structellipse

{

structpoint

{

intx;

inty;

}p1,p2;

doublea;

doubleb;

};

typedefstructellipseell;

intmain()

{

}elle;doubles;printf(請輸入左上角頂點坐標:);/*輸入坐標*/scanf(%d%d,e.p1.x,e.p1.y);printf(請輸入右下角頂點坐標:);/*輸入坐標*/scanf(%d%d,e.p2.x,e.p2.y);/*計算橢圓面積*/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;

試驗總結(jié):

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

試驗五

試驗名稱:指針強化1

【試驗1】字符串逆序存儲

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

試驗思路:

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

程序代碼:

#includestdio.h

#includestring.h

char*inverse(char*p){

}

intmain()

{

}

/*定義需要用到的變量*/inti,len;chartmp;len=strlen(p);/*將原字符串逆序存儲于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(請輸入字符串:);gets(str);puts(inverse(str));return0;

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

程序代碼:

#includestdio.h

#includestring.h

char*squeez(char*s,charc){

}

intmain()

{

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

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

試驗總結(jié):

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

試驗六

試驗名稱:指針強化2

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

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

charstr[]=123456;

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

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

試驗思路:

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

程序代碼:

#includestdio.h

#includestring.h

intatoi(char*str);

intmain()

{

charstr[100];

printf(請輸入字符串:);

gets(str);//此處不能否替換成scanf()!printf(對應(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;

【試驗2】譯碼

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

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

試驗思路:

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

程序代碼:

#includestdio.h

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

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(請輸入一個阿拉伯數(shù)字:);scanf(%d,x);if(x0x4000)change(code,x);elseprintf(輸入的阿拉伯數(shù)字超出范圍?。?!\n);return0;

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

試驗總結(jié):

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

試驗七

試驗名稱:模擬1

簡潔題:計算卡片的最大數(shù)量

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

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

圖1卡片最大可懸空長度示意圖

程序代碼:

#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;

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

structbook

{

Charname_of_book[100];

Charauthor[25];

};

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

(1)統(tǒng)計某一編寫了幾本書。

(2)將全部書的記錄存儲到文件a.txt。然后編寫相應(yīng)的主函數(shù)調(diào)用這兩個函數(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)建一個鏈表單元**********/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)建一個鏈表**********/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;

}

/************輸出一個鏈表頭部**********/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)計鏈表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寫的的書數(shù):%d\n,name,count(book,name));

}

output(book);return0;

試驗總結(jié):

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

試驗八

試驗名稱:文件

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

一輛卡車交通肇事后逃逸?,F(xiàn)場有三人目擊大事,但是都沒有記住車號,只登記車號的一些特征。甲說:牌照的前兩位數(shù)字是相同的;乙說:牌照的后兩位數(shù)字是相同的,但與前兩位不同;丙是位數(shù)學(xué)家,他說:四位車號組成的數(shù)字剛好是一個整數(shù)的平方。請依據(jù)以上線索求出車號的四位數(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);

}

}

【試驗2】寫入數(shù)據(jù)至文件

從鍵盤輸入一個字符串,將其中的小寫字母全部轉(zhuǎ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(打開文件失敗!\n);

exit(EXIT_FAILURE);

}

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

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

{

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

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

printf(打印失敗!\n);

exit(EXIT_FAILURE);

}

}

fclose(fp);

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

}

voidReadFromFile(char*FileName)

{

charch;

FILE*fp=fopen(FileName,r);

if(fp==NULL)

{

printf(打開文件失敗!\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;

}

試驗總結(jié):

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

試驗九

試驗名稱:鏈表

【試驗1】計算折線長度

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

structpoint

{

intx;//橫坐標

inty;//縱坐標

structpoint*next;

};

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

編程思路:

定義函數(shù)pt*CreateLink()實現(xiàn)鏈表的創(chuàng)建。在該函數(shù)中,用戶敲擊一次ENTER鍵,程序調(diào)用malloc或者calloc創(chuàng)建一個節(jié)點p,利用隨機函數(shù)rand()給p-x和p-y賦值,再將該節(jié)點連接到head指針所指鏈表尾部(詳細方法見8-0)。

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

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

程序代碼:

#includestdio.h

#includestdlib.h

#includemath.h

#includetime.h

structpoint

{

intx;//橫坐標

inty;//縱坐標

structpoint*next;

};

typedefstructpointPT;

voidPrintLink(PT*head)

{

PT*p=head;

puts(打印全部點的坐標:);

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);//這個函數(shù)沒有,考試至少扣5分!!!

return0;

}

試驗總結(jié):

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

試驗十

試驗名稱:綜合程序設(shè)計1

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

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

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

structm

{

inttm_sec;//秒,0-59

inttm_min;//分,0-59

inttm_hour;//時,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ù)

};

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

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

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

//轉(zhuǎn)換成當?shù)貥藴蕰r間,并以結(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日\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實現(xiàn)可視化時鐘

【問題描述】

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

(沒有做)

試驗總結(jié):

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

試驗十一

試驗名稱:綜合程序設(shè)計1

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

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

srtuctone_card

{

charID[9];//一卡通編號

charname[20];//姓名

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

doublebalance;//余額

};

請編寫函數(shù)實現(xiàn)下列功能:

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

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

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

4、按姓名查找某人信息

5、按一卡通編號排序

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

7、刪除一個元素

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

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

10、編寫主函數(shù)

程序代碼:

#includestdio.h

#includestdlib.h

#includestring.h

typedefstructone_card

{

charID[9];//一卡通編號

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é)點if(p==NULL)

{

puts(cannotsatisfytheneedtomemory!);exit(0);

}

//初始化當前結(jié)點

puts(inputID:\t);

getchar();

gets(p-ID);

puts(inputname:\t);

//getchar();

gets(p-name);

puts(inputtype:\t);

//get

溫馨提示

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

最新文檔

評論

0/150

提交評論