版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度集合大合集人員管理篇
- 單位管理制度匯編大合集人力資源管理
- 《家具導(dǎo)購(gòu)圣經(jīng)》課件
- 單位管理制度分享匯編職員管理篇十篇
- 單位管理制度分享大全職工管理十篇
- 2024教科室工作計(jì)劃
- 單位管理制度呈現(xiàn)合集職工管理篇十篇
- 《投資管理復(fù)習(xí)》課件
- 《市場(chǎng)考察報(bào)告》課件
- 《廣告效果的測(cè)定》課件
- 西安信息職業(yè)大學(xué)《工程管理導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江省杭州市拱墅區(qū)2023-2024學(xué)年六年級(jí)(上)期末數(shù)學(xué)試卷
- 突發(fā)事件及自救互救學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 期末質(zhì)量評(píng)價(jià)(試題)-2024-2025學(xué)年一年級(jí)上冊(cè)數(shù)學(xué)人教版
- 生產(chǎn)與運(yùn)作管理第5版配套教材電子課件(完整版)
- 偉大的《紅樓夢(mèng)》智慧樹(shù)知到期末考試答案章節(jié)答案2024年北京大學(xué)
- 凈水廠(chǎng)課程設(shè)計(jì)
- (完整版)八年級(jí)上綜合性學(xué)習(xí)-我們的互聯(lián)網(wǎng)時(shí)代-練習(xí)卷(含答案)
- 地災(zāi)治理全套表格
- 2021國(guó)家開(kāi)放大學(xué)電大本科《流行病學(xué)》期末試題及答案
- 中國(guó)銀行_境外匯款申請(qǐng)表模板(練手)
評(píng)論
0/150
提交評(píng)論