版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
編輯版word編輯版word編輯版wordC語言上機(jī)考試練習(xí)題(1)說明:我們已經(jīng)學(xué)習(xí)完成了基本數(shù)據(jù)類型、基本控制語句,以及數(shù)組、函數(shù)這些知識(shí)了,請(qǐng)同學(xué)們看看附件中的這些題目是否能夠快速編寫出來?可能有個(gè)別題目與過去的練習(xí)有些重復(fù),請(qǐng)盡量不要去參考過去的答案。如果現(xiàn)在編寫起來困難還很多,那你就要加倍努力了。1、編寫一個(gè)程序,判定一個(gè)字符串是否是另一個(gè)字符串的子串,若是,返回子串在主串中的位置。要求:(1)在主函數(shù)中輸入兩個(gè)字符串,調(diào)用子函數(shù)cmpsubstr()判斷,并在主函數(shù)輸出結(jié)果。(2)子函數(shù)的返回值為-1表示未找到,否則返回子串的位置(起始下標(biāo))。#include<stdio.h>#include<string.h>voidmain(){ intcmpsubstr(char*s1,char*s2); charstr1[20],str2[50]; char*s1=str1,*s2=str2; gets(str1); gets(str2); printf("%d",cmpsubstr(s1,s2));}intcmpsubstr(char*s1,char*s2){ inti,d,a=0,situation=0; d=strlen(s1); for(i=0;*(s2+i)!='\0';i++) { if(*(s1+a)==*(s2+i)) { a++; if(a==d) { situation=1; break; } } else { a=0; } } if(situation==0)return(-1); elsereturn(i-d+2);}2、輸入一個(gè)字符串,內(nèi)有數(shù)字和非數(shù)字字符,如:a123x45617960?302tab5876,將其中連續(xù)的數(shù)字作為一個(gè)整數(shù),依次存放到數(shù)組a中。例如,123放在a[0]中,456放在a[1]中等等,統(tǒng)計(jì)共有多少個(gè)整數(shù),并輸出這些整數(shù)。要求:(1)在主函數(shù)中輸入字符串,并輸出結(jié)果。調(diào)用子程序處理字符串。(2)子函數(shù)的返回值為整數(shù)的個(gè)數(shù)。#include<stdio.h>#include<string.h>voidmain(){ intsearch(char*str,int*sum); charstr[100]; intd,sum[20],i; gets(str); d=search(str,sum); for(i=0;i<d;i++)printf("%d\n",*(sum+i));}search(char*str,int*sum){ inti,t=0,a=0; for(i=0;*(str+i)!='\0';i++) { if(*(str+i)>='0'&&*(str+i)<='9') { if(a==0) { *(sum+t)=(int)(*(str+i)-'0'); a++; } else { *(sum+t)=*(sum+t)*10+(int)(*(str+i)-'0'); } } elseif(*(str+i-1)>='0'&&*(str+i-1)<='9') { t++; a=0; } } if(*(str+i-1)>='0'&&*(str+i-1)<='9')return(t+1); elsereturn(t);}3、編寫一個(gè)主函數(shù)和子函數(shù)tran(x,r),要求是:函數(shù)tran(x,r)將十進(jìn)制整數(shù)x轉(zhuǎn)換成r進(jìn)制數(shù)y(r在2-16之間),x和r的值由主調(diào)函數(shù)(即主函數(shù))傳入,y的值需要返回主調(diào)函數(shù)進(jìn)行輸出。要求:y的值利用字符數(shù)組進(jìn)行存儲(chǔ),數(shù)組的每一個(gè)元素存放y的一位數(shù)字字符。#include<stdio.h>#include<string.h>#include<malloc.h>#include<math.h>voidmain(){ char*tran(intx,intr); intx,r; char*y; printf("Pleaseinputx&r=\n"); scanf("%d,%d",&x,&r); y=tran(x,r); puts(y);}char*tran(intx,intr){ intlen1,len2,i,t; char*y1,*y2; len1=2+(int)log((double)x)/log((double)r); y1=(char*)malloc(len1*sizeof(char)); for(i=0;x!=0;i++) { t=x%r; if(t<10) *(y1+i)=(char)(t+48); else*(y1+i)=(char)(t+87); x=(int)x/r; } *(y1+i)='\0'; len2=strlen(y1); y2=(char*)malloc(len2*sizeof(char)); for(i=0;i<len2;i++) { *(y2+i)=*(y1+len2-i-1); } *(y2+i)='\0'; return(y2);}4、編寫一個(gè)主函數(shù)和函數(shù)tran(x),要求是:(1)函數(shù)tran(x)產(chǎn)生支付指定金額x(如234.78元)的各種面額人民幣的數(shù)量(注意:盡量支付大面額的人民幣),要求按100元、50元、10元、1元、5角、1角、5分、1分八種面額進(jìn)行統(tǒng)計(jì),產(chǎn)生的結(jié)果存放在數(shù)組中返回主函數(shù)。(2)在主函數(shù)中輸入一金額,并以該金額調(diào)用tran函數(shù),并輸出該函數(shù)返回的統(tǒng)計(jì)結(jié)果。5、編寫程序?qū)崿F(xiàn)將鍵盤輸入的一行字符按單詞倒排輸出。如鍵盤輸入“Iloveyou”,屏幕顯示“youloveI”。要求:(1)編寫一個(gè)函數(shù)intinvertion(charch1[],charch2[])實(shí)現(xiàn)按單詞倒排字符串,第一個(gè)形參ch1接受實(shí)參傳過來的原字符串,倒排后的新字符串通過第二個(gè)形參返回主函數(shù),函數(shù)中還需要統(tǒng)計(jì)該字符串中共有多少個(gè)單詞,函數(shù)最后返回字符串中包含的單詞個(gè)數(shù)。(2)主函數(shù)中輸入字符串,調(diào)用子函數(shù)invertion,輸出倒排后的字符串及字符串中包含的單詞個(gè)數(shù)。#include<stdio.h>#include<string.h>#include<math.h>#include<malloc.h>voidmain(){ intinvertion(charch1[],charch2[]); intlen; char*ch1,*ch2; ch1=(char*)malloc(100); ch2=(char*)malloc(100); gets(ch1); len=invertion(ch1,ch2); puts(ch2); printf("%d\n",len);}intinvertion(charch1[],charch2[]){ inti,j,t=0,len1,len,sum=0; char*str; str=(char*)malloc(10); for(i=0,len=0;*(ch1+i)!='\0';i++,len++); len1=len; for(i=0;*(ch1+i)!='\0';i++) { if(*(ch1+i)!='') { *(str+t)=*(ch1+i); //將ch1的單詞轉(zhuǎn)移到str上// t++; } else { sum++; //單詞個(gè)數(shù)加一// *(ch2+len1)=''; len1=len1-t; for(j=0;j<t;j++)*(ch2+j+len1)=*(str+j); //將str轉(zhuǎn)移到ch2上// t=0; len1--; } } sum++; //最后一個(gè)單詞轉(zhuǎn)移到ch2上// *(ch2+len1)=''; len1=len1-t; for(j=0;j<t;j++)*(ch2+j+len1)=*(str+j); *(ch2+len)='\0'; return(sum);}6、編寫一個(gè)主函數(shù)以及一個(gè)函數(shù)maxlong(str)。要求是:(1)函數(shù)maxlong(str)找出字符串str中包含的第一個(gè)最長單詞(用字符數(shù)組進(jìn)行存儲(chǔ)),并返回主調(diào)函數(shù)。(2)在主函數(shù)中輸入一個(gè)字符串,假定輸入字符串中只含字母和空格,空格用來分割不同單詞;以該字符串作為參數(shù)調(diào)用maxlong函數(shù),并輸出返回的結(jié)果。#include<stdio.h>#include<string.h>#include<math.h>#include<malloc.h>voidmain(){ char*maxlong(char*str); charstr[100],*str0; gets(str); str0=maxlong(str); puts(str0);}char*maxlong(char*str){ char*word,*str0; intt=0,i,max=0; for(i=0;*(str+i)!='\0';i++) { if(*(str+i)!='')t++;//t為單詞字母個(gè)數(shù)// else { if(t>max)//比較t與之前最大的單詞個(gè)數(shù)的大小// { word=(str+i-t); max=t; } t=0;//t初始化// } } if(t>max)//最后一個(gè)單詞在循環(huán)中沒有比較// { word=(str+i-t); max=t; } str0=(char*)malloc(max+1); for(i=0;i<max;i++) { *(str0+i)=*(word+i);//將最大的單詞賦給str0// } *(str0+i)='\0'; return(str0);}7、編寫一個(gè)函數(shù)ad(a,m,n)找出一個(gè)m行n列的二維數(shù)組a中的“鞍點(diǎn)”;在主函數(shù)中輸入二維數(shù)組的值(假設(shè)數(shù)組中任意兩個(gè)數(shù)都不相等),并將它作為實(shí)參調(diào)用ad函數(shù)。所謂“鞍點(diǎn)”是指該位置上的元素在該行上最大,在該列上最小;一個(gè)二維數(shù)組中可能沒有鞍點(diǎn)。#include<stdio.h>#include<malloc.h>#include<string.h>#include<time.h>voidmain(){ int**input(intm,intn); voidprint(int**p,intm,intn); intad(int**p,intm,intn); int**p,m,n; while(!ad(p,m,n)){ printf("請(qǐng)輸入行數(shù):m,列數(shù):n.\n"); m=n=7; p=input(m,n); print(p,m,n);}}intad(int**p,intm,intn){ inti,j,k,s,max,l,time=0; for(i=0;i<m;i++) { for(j=0;j<n;j++)//max為一行最大值// { if(j==0) { max=*(*(p+i)+j);l=j; } else { if(max<*(*(p+i)+j)) { max=*(*(p+i)+j);l=j; } } } s=0; for(k=0;k<m;k++) { if(max>*(*(p+k)+l)) { s=1;break; } } if(s==0) { printf("NO.%drowNO.%dline:%d\n",i+1,l+1,*(*(p+i)+l)); time++; } } return(time);}int**input(intm,intn)//建造一個(gè)m行,n列二維數(shù)組//{ int**p; inti,j; p=(int**)malloc(m*sizeof(int*)); for(i=0;i<m;i++) { *(p+i)=(int*)malloc(n*sizeof(int)); } srand(time(NULL));//// for(i=0;i<m;i++) { for(j=0;j<n;j++) { *(*(p+i)+j)=rand()%100;//給數(shù)組賦值// } } return(p);}voidprint(int**p,intm,intn){ inti,j; for(i=0;i<m;i++) { printf("第%d行為:\n",i+1); for(j=0;j<n;j++) printf("%4d",*(*(p+i)+j)); printf("\n"); }}8、編寫主函數(shù)和兩個(gè)遞歸函數(shù)sum(a,n)、max(a,n)。要求是:(1)函數(shù)sum(a,n)求數(shù)組a中前n個(gè)元素之和,并返回求得的和值。(2)函數(shù)max(a,n)求數(shù)組a中前n個(gè)元素中的最大值,并返回求得的最大值。(3)主函數(shù):輸入任意10個(gè)正整數(shù)給數(shù)組,調(diào)用sum函數(shù)求數(shù)組中的10個(gè)元素之和,并輸出求得的和值;調(diào)用max函數(shù)求數(shù)組中10個(gè)元素的最大值,并輸出求得的最大值。#include<stdio.h>#include<malloc.h>#include<time.h>voidmain(){ intsum(int*a,intn); int*input(intn); intmax(int*a,intn); int*s,n=10; s=input(n); printf("%5d,%5d\n",sum(s,n),max(s,n));}int*input(intn){ int*a,i; a=(int*)malloc(sizeof(int)*n); srand(time(NULL)); for(i=0;i<n;i++) { *(a+i)=rand()%100; printf("%4d",*(a+i)); } printf("\n"); return(a);}intmax(int*a,intn){ intm; if(n==1)return(*a); else { m=max(a,n-1); if(m>*(a+n-1))return(m); elsereturn(*(a+n-1)); }}intsum(int*a,intn){ if(n==1)return(*a); elsereturn(*(a+n-1)+sum(a,n-1));}9、編寫一個(gè)遞歸程序,利用折半查找法在一個(gè)升序數(shù)組中查找一個(gè)數(shù),如果查找成功,則輸出它是第幾個(gè)數(shù),否則輸出“NoFind.”。#include<stdio.h>#include<malloc.h>#include<time.h>voidmain(){ int*input(intn); voidprint(int*s,intn); voidsort(int*s,intn); intsearch(int*s,intn,intkey); int*s,n=10,key,d; s=input(n); print(s,n); sort(s,n); print(s,n); scanf("%d",&key); d=search(s,n,key); if(d!=0) printf("ThekeyisatNO.%d.\n",d); elseprintf("NOFIND\n");}intsearch(int*s,intn,intkey){ intm,d; if(n==1) { if(*s==key)return(1); elsereturn(0); } else { m=n/2; if(d=search(s,m,key))return(d); elseif(d=search(s+m,n-m,key))return(d+m); elsereturn(0); }}int*input(intn){ int*a,i; a=(int*)malloc(sizeof(int)*n); srand(time(NULL)); for(i=0;i<n;i++) { *(a+i)=rand()%100; } return(a);}voidprint(int*s,intn){ inti; for(i=0;i<n;i++)printf("%4d",*(s+i)); printf("\n");}voidsort(int*s,intn){ inti,j,temp; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if(*(s+j)>*(s+j+1)) { temp=*(s+j); *(s+j)=*(s+j+1); *(s+j+1)=temp; } } }}10、用遞歸法實(shí)現(xiàn):對(duì)于一個(gè)正整數(shù)n(n是一個(gè)不超過8位的任意正整數(shù),由鍵盤輸入),(1)順序輸出它的各位數(shù);(2)判斷它是一個(gè)幾位數(shù)。如輸入:56439;則輸出:5,6,4,3,95要求:不允許使用數(shù)組;在遞歸函數(shù)中順序輸出該數(shù)的各位數(shù),該數(shù)的位數(shù)則必須在主函數(shù)中輸出。#include<stdio.h>#include<malloc.h>#include<string.h>voidmain(){ intf(intn); intn,d; scanf("%d",&n); d=f(n); printf("\n個(gè)數(shù)為%d\n",d);}intf(intn){ intd; if(n<10)d=1; elsed=f((int)n/10)+1; printf("%d",n%10); return(d);}11、輸入一個(gè)日期(年、月、日),并輸入該年的元旦(即1月1日)是星期幾(星期一、星期二、…、星期六、星期日分別用數(shù)字1、2、…、6、7表示),計(jì)算該日期在本年中是第幾天、星期幾(注意潤年問題)?要求寫兩個(gè)函數(shù)days和week,分別實(shí)現(xiàn)計(jì)算該日期在本年中是第幾天和星期幾。由主函數(shù)將日期傳遞給days函數(shù),并將計(jì)算得到的結(jié)果返回給主函數(shù)輸出;由主函數(shù)將日期及元旦的星期幾傳遞給week函數(shù),并將計(jì)算得到的結(jié)果返回給主函數(shù)輸出。12、編寫一個(gè)主函數(shù)以及一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東白云學(xué)院《平面廣告》2023-2024學(xué)年第一學(xué)期期末試卷
- 共青科技職業(yè)學(xué)院《智能汽車傳感技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東財(cái)經(jīng)大學(xué)《古代女性文學(xué)研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 貨運(yùn)司機(jī)培訓(xùn)課件
- 贛南衛(wèi)生健康職業(yè)學(xué)院《JavaWeb程序設(shè)計(jì)SIT》2023-2024學(xué)年第一學(xué)期期末試卷
- 2022年上海注冊(cè)會(huì)計(jì)師《審計(jì)》考試題庫(含典型題和真題)
- 贛東學(xué)院《小學(xué)跨學(xué)科教育研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 七年級(jí)生物上冊(cè)第三單元生物圈中的綠色植物第五章綠色植物與生物圈中的碳-氧平衡第一節(jié)光合作用吸收二氧化碳釋放氧氣教案新版新人教版1
- 七年級(jí)道德與法治上冊(cè)第一單元成長的節(jié)拍第一課中學(xué)時(shí)代第一框中學(xué)序曲教案新人教版
- 《常見案例分析類型》課件
- 安徽省合肥市廬江縣2022-2023學(xué)年八年級(jí)上學(xué)期期末物理試卷(含答案)
- 造價(jià)年度工作總結(jié)
- 護(hù)理人員應(yīng)急預(yù)案培訓(xùn)課件:居家病人護(hù)理與應(yīng)急服務(wù)
- 液壓與氣動(dòng)傳動(dòng)CAI第1章
- 廣告?zhèn)髅叫袠I(yè)操作人員安全培訓(xùn)
- SB-T 11238-2023 報(bào)廢電動(dòng)汽車回收拆解技術(shù)要求
- ICU呼吸系統(tǒng)護(hù)理的專業(yè)技巧與注意事項(xiàng)
- 藝術(shù)類院校加強(qiáng)藝術(shù)法教育的思考
- 銀行商會(huì)戰(zhàn)略合作協(xié)議書
- 2025年日歷表帶農(nóng)歷【陰歷】完美打印版
- 重點(diǎn)實(shí)驗(yàn)室申報(bào)
評(píng)論
0/150
提交評(píng)論