C語言程序設(shè)計習(xí)題試題編程題_第1頁
C語言程序設(shè)計習(xí)題試題編程題_第2頁
C語言程序設(shè)計習(xí)題試題編程題_第3頁
C語言程序設(shè)計習(xí)題試題編程題_第4頁
C語言程序設(shè)計習(xí)題試題編程題_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計習(xí)題(編程類)1、從鍵盤輸入任意的字符,按下列規(guī)則進行分類計數(shù)。

第一類'0','1','2','3','4','5','6','7','8','9'

第二類'+','-','*','/','%','='

第三類其它字符

當輸入字符'\'時先計數(shù),然后停止接收輸入,打印計數(shù)的結(jié)果。參考答案:#include<stdio.h>voidmain(){intclass1,class2,class3;charch;class1=class2=class3=0;/*初始化分類計數(shù)器*/do{ch=getch();switch(ch){case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':class1++;break;/*對分類1計數(shù)*/case'+':case'-':case'*':case'/':case'%':case'=':class2++;break;/*對分類2計數(shù)*/default:class3++;break;/*對分類3計數(shù)*/}}while(ch!='\\');/*字符'\'在C程序中要使用轉(zhuǎn)義符'\\'*/printf("class1=%d,class2=%d,class3=%d\n",class1,class2,class3);}2、從鍵盤輸入十個整數(shù),用插入法對輸入的數(shù)據(jù)按照從小到大的順序進行排序,將排序后的結(jié)果輸出。參考答案:voidmain(){inti,j,num,a[10];for(i=0;i<10;i++){printf("EnterNo.%d:",i+1);scanf("%d",&num);for(j=i-1;j>=0&&a[j]>num;j--)a[j+1]=a[j];a[j+1]=num;}for(i=0;i<10;i++)printf("No.%d=%d\n",i+1,a[i]);}3、輸入一個正整數(shù),要求以相反的順序輸出該數(shù)。例如輸入12345,輸出位54321。參考答案:voidmain(){intn;printf("Pleaseentern:");scanf("%d",&n);while(n>0){printf("%d",n%10);n=n/10;}}4、編寫程序,讀入一個整數(shù)N;若N為非負數(shù),則計算N到2×N之間的整數(shù)和;若N為一個負數(shù),則求2×N到N之間的整數(shù)和。分別利用for和while寫出兩個程序。參考答案:voidmain(){inti,n;longs1=0,s2=0;printf("PleaseenterN:");scanf("%d",&n);if(n>=0)for(i=n;i<=2*n;i++)s1=s1+i;elsefor(i=n;i>=2*n;i--)s1=s1+i;i=n;if(i>=0)while(i<=2*n)s2=s2+i++;elsewhile(i>=2*n)s2=s2+i--;printf("Result1=%ldresult2=%ld\n",s1,s2);}5、一個自然數(shù)被8除余1,所得的商被8除也余1,再將第二次的商被8除后余7,最后得到一個商為a。又知這個自然數(shù)被17除余4,所得的商被17除余15,最后得到一個商是a的2倍。編寫程序求這個自然數(shù)。參考答案:voidmain(){inti,n,a;for(i=0;;i++){if(i%8==1){n=i/8;if(n%8==1){n=n/8;if(n%8==7)a=n/8;}}if(i%17==4){n=i/17;if(n%17==15)n=n/17;}if(2*a==n){printf("result=%d\n",i);break;}}}6、編寫程序,輸出用一元人民幣兌換成1分、2分和5分硬幣的不同兌換方法。參考答案:voidmain(){intf1,f2,f5,count=0;for(f5=0;f5<=20;f5++)for(f2=0;f2<=(100-f5*5)/2;f2++){f1=100-f5*5-f2*2;if(f5*5+f2*2+f1==100)printf("No.%2d>>5:%4d2:%2d1:%2d\n",++count,f5,f2,f1);}}7、將一個數(shù)的數(shù)碼倒過來所得到的新數(shù)叫原數(shù)的反序數(shù)。如果一個數(shù)等于它的反序數(shù),則稱它為對稱數(shù)。求不超過1993的最大的二進制的對稱數(shù)。參考答案:voidmain(){inti,j,n,k,a[16]={0};for(i=1;i<=1993;i++){n=i;k=0;while(n>0)/*將十進制數(shù)轉(zhuǎn)變?yōu)槎M制數(shù)*/{a[k++]=n%2;n=n/2;}for(j=0;j<k;j++)if(a[j]!=a[k-j-1])break;if(j>=k){printf("%d:",i);for(j=0;j<k;j++)printf("%2d",a[j]);printf("\n");}}}8、十個小孩圍成一圈分糖果,老師分給第一個小孩10塊,第二個小孩2塊,第三個小孩8塊,第四個小孩22塊,第五個小孩16塊,第六個小孩4塊,第七個小孩10塊,第八個小孩6塊,第九個小孩14塊,第十個小孩20塊。然后所有的小孩同時將自己手中的糖分一半給右邊的小孩;糖塊數(shù)為奇數(shù)的人可向老師要一塊。問經(jīng)過這樣幾次調(diào)整后大家手中的糖的塊數(shù)都一樣?每人各有多少塊糖?參考答案:voidmain(){inti,count=0,a[11]={0,10,2,8,22,16,4,10,6,14,20};while(1){for(i=1;i<=10;i++)a[i-1]=a[i-1]/2+a[i]/2;a[10]=a[10]/2+a[0];for(i=1;i<=10;i++)if(a[i]%2==1)a[i]++;for(i=1;i<10;i++)if(a[i]!=a[i+1])break;if(i==10)break;else{a[0]=0;count++;}}printf("count=%dnumber=%d\n",count,a[1]);}9、輸入5×5的數(shù)組,編寫程序?qū)崿F(xiàn):

(1)求出對角線上各元素的和;

(2)求出對角線上行、列下標均為偶數(shù)的各元素的積;

(3)找出對角線上其值最大的元素和它在數(shù)組中的位置。參考答案:voidmain(){inti,j,s1=0,s2=1,a[5][5];for(i=0;i<5;i++)for(j=0;j<5;j++){printf("%d%d:",i,j);scanf("%d",&a[i][j]);}for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%5d",a[i][j]);printf("\n");}j=0;for(i=0;i<5;i++){s1=s1+a[i][i];if(i%2==0)s2=s2*a[i][i];if(a[i][i]>a[j][j])j=i;}printf("SUN=%d\nACCOM=%d\na[%d]=%d\n",s1,s2,j,a[j][j]);}10、編寫程序,以字符形式輸入一個十六進制數(shù),將其變換為一個十進制整數(shù)后輸出。參考答案:#include"stdio.h"voidmain(){inti,n=0,a[4]={0};printf("Pleaseenteradigit:");for(i=0;i<4&&(a[i]=getchar())!='\n';i++);for(i=0;i<4;i++)if(a[i]>=48&&a[i]<=57)a[i]=a[i]-48;elseif(a[i]>=65&&a[i]<=69)a[i]=a[i]-55;elseif(a[i]>=97&&a[i]<=102)a[i]=a[i]-87;elseprintf("inputError!");for(i=0;i<4;i++)n=n*16+a[i];printf("%d",n);}11、編寫程序,輸入一個十進制整數(shù),將其變換為二進制后儲存在一個字符數(shù)組中。參考答案:voidmain(){inti,n,k=16,a[16]={0};printf("Pleaseenteradigit:");scanf("%d",&n);while(n>0)/*將十進制數(shù)轉(zhuǎn)變?yōu)槎M制數(shù)*/{a[--k]=n%2;n=n/2;}for(i=0;i<16;i++)printf("%2d",a[i]);}12、對數(shù)組A中的N(0<N<100=個整數(shù)從小到大進行連續(xù)編號,輸出各個元素的編號。要求不能改變數(shù)組A中元素的順序,且相同的整數(shù)要具有相同的編號。例如數(shù)組是:A=(5,3,4,7,3,5,6)則輸出為:(3,1,2,5,1,3,4)參考答案:voidmain(){inti,j,k,n,m=1,r=1,a[2][100]={0};printf("Pleaseentern:");scanf("%d",&n);for(i=0;i<n;i++){printf("a[%d]=",i);scanf("%d",&a[0][i]);}while(m<=n)/*m記錄已經(jīng)登記過的數(shù)的個數(shù)*/{for(i=0;i<n;i++)/*記錄未登記過的數(shù)的大小*/{if(a[1][i]!=0)/*已登記過的數(shù)空過*/continue;k=i;for(j=i;j<n;j++)/*在未登記過數(shù)中找最小數(shù)*/if(a[1][j]==0&&a[0][j]<a[0][k])k=j;a[1][k]=r++;/*記錄名次,r為名次*/m++;/*登記過的數(shù)增1*/for(j=0;j<n;j++)/*記錄同名次*/if(a[1][j]==0&&a[0][j]==a[0][k]){a[1][j]=a[1][k];m++;}break;}}for(i=0;i<n;i++)printf("a[%d]=%d,%d\n",i,a[0][i],a[1][i]);}13、求這樣一個三位數(shù),該三位數(shù)等于其每位數(shù)字的階乘之和。

即:abc=a!+b!+c!參考答案:voidmain(){inta[5],i,t,k;for(i=100;i<1000;i++){for(t=0,k=1000;k>=10;t++){a[t]=(i%k)/(k/10);k/=10;}if(f(a[0])+f(a[1])+f(a[2])==i)printf("%d",i);}}f(m)intm;{inti=0,t=1;while(++i<=m)t*=i;return(t);}14、編寫一個函數(shù)實現(xiàn)將字符串str1和字符串str2合并,合并后的字符串按其ASCII碼值從小到大進行排序,相同的字符在新字符串中只出現(xiàn)一次。參考答案:#include"string.h"strcmbn(a,b,c)/*數(shù)組合并函數(shù):將數(shù)組a、b合并到*/chara[],b[],c[];{chartmp;inti,j,k,m,n;m=strlen(a);n=strlen(b);for(i=0;i<m-1;i++)/*對數(shù)組a排序*/{for(j=i+1,k=i;j<m;j++)if(a[j]<a[k])k=j;tmp=a[i];a[i]=a[k];a[k]=tmp;}for(i=0;i<n-1;i++)/*對數(shù)組b排序*/{for(j=i+1,k=i;j<n;j++)if(b[j]<b[k])k=j;tmp=b[i];b[i]=b[k];b[k]=tmp;}i=0;j=0;k=0;while(i<m&&j<n)/*合并*/if(a[i]>b[j])c[k++]=b[j++];/*將a[i]、b[j]中的小者存入c[k]*/else{c[k++]=a[i++];if(a[i-1]==b[j])j++;/*如果a、b當前元素相等,刪掉一個*/}while(i<m)c[k++]=a[i++];/*將a或b中剩余的數(shù)存入c*/while(j<n)c[k++]=b[j++];c[k]='\0';}15、編寫函數(shù),采用遞歸方法實現(xiàn)將輸入的字符串按反序輸出。參考答案:#include"stdio.h"strout(s)char*s;{if(*s!='\0'){strout(s+1);/*遞歸調(diào)用strout函數(shù),字符串首地址前移一個字符*/putch(*s);/*輸出字符串首地址所指向的字符*/}elsereturn;/*遇到字符串結(jié)束標志結(jié)束遞歸調(diào)用*/}16、編寫函數(shù),采用遞歸方法將任一整數(shù)轉(zhuǎn)換為二進制形式。參考答案:turn(n,a,k)intn,a[],k;{if(n>0){a[k]=n%2;turn(n/2,a,k-1);}elsereturn;}voidmain(){inti,n,a[16]={0};printf("\nPleaseentern:");scanf("%d",&n);turn(n,a,15);for(i=0;i<16;i++)printf("%d",a[i]);}17、將一個數(shù)的數(shù)碼倒過來所得到的新數(shù),叫作原數(shù)的反序數(shù),如果一個數(shù)等于它的反序數(shù),則稱它為對稱數(shù)。編寫程序,采用遞歸算法求不超過1993的最大的二進制的對稱數(shù)。參考答案:smmt(chars[])/*指針s指向字符串的第一個字符*/{char*p;p=s;while(*p!='\0')p++;p--;/*指針p指向字符串的最后一個字符*/if(p==s)return(1);/*兩個指針指向同一個字符表示字符串對稱*/else{if(*s!=*p)return(0);/*兩個指針指向字符不等表示字符串不對稱*/else{*p='\0';smmt(s+1);/*取掉首尾比較過的字符繼續(xù)比較*/}}}18、編寫程序,讀入一個以符號"."結(jié)束的長度小于20字節(jié)的英文句子,檢查其是否為回文(即正讀和反讀都是一樣的,不考慮空格和標點符號)。例如:

讀入句子:MADAMI'MADAM.它是回文,所以輸出:YES

讀入句子:ABCDBA).它不是回文,所以輸出:NO參考答案:#include"stdio.h"voidmain(){chars[21],*p,*q;gets(s);p=s;q=s;while(*q!='\0')q++;q-=2;while(p<q)/*指針p指向字符串首,指針q指向串未*/if(*p++!=*q--)/*指針p、q同時向中間移動,比較對稱的兩個字符*/{printf("NO\n");break;}if(p>=q)printf("YES\n");}19、編寫程序,其中包括一個函數(shù),此函數(shù)的功能是:對一個長度為N的字符串從其第K個字符起,刪去M個字符,組成長度為N-M的新字符串(其中N、M<=80,K<=N)。例如輸入字符串"Wearepoorstudents.",利用此函數(shù)進行刪除"poor"的處理,輸出處理后的字符串是"Wearestudents."。參考答案:strcut(s,m,k)chars[];intm,k;{char*p;inti;p=s+m;/*指針p指向要被刪除的字符*/while((*p=*(p+k))!='\0')/*p+k指向要前移的字符*/p++;}20、編寫一個函數(shù)insert(s1,s2,ch),實現(xiàn)在字符串s1中的指定字符ch位置處插入字符串s2。參考答案:insert(s1,s2,ch)chars1[],s2[],ch;{char*p,*q;p=s1;while(*p++!=ch);while(*s2!='\0'){q=p;while(*q!='\0')q++;while(q>=p)*(q+1)=*q--;*++q=*s2++;p++;}}21、編寫程序?qū)⑤斎氲膬尚凶址B接后,將串中全部空格移到串首后輸出。參考答案:strcnb(s1,s2)chars1[],s2[];{char*p;inti=1;p=s1;while(*p!='\0')p++;while((*p++=*s2++)!='\0');/*將s2接于s1后面*/p=s1;while(*p!='\0')/*掃描整個字符串*/{if(*p=='')/*當前字符是空格進行移位*/{while(*(p+i)=='')i++;/*尋找當前字符后面的第一個非空格*/if(*(p+i)!='\0'){*p=*(p+i);/*將非空格移于當前字符處*/*(p+i)='';/*被移字符處換為空格*/}elsebreak;/*尋找非空格時到字符串尾,移位過程結(jié)束*/}p++;}}22、編寫程序,輸入字符串,分別統(tǒng)計字符串中所包含的各個不同的字符及其各自字符的數(shù)量。如:輸入字符串:abcedabcdcd

則輸出:a=2b=2c=3d=3e=1。參考答案:#include"stdio.h"structstrnum{inti;charch;}voidmain(){charc;inti=0,k=0;structstrnums[100]={0,NULL};while((c=getchar())!='\n'){for(i=0;s[i].i!=0;i++){if(c==s[i].ch){s[i].i++;break;}}if

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論