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

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計習(xí)題(編程類)1、從鍵盤輸入任意的字符,按下列規(guī)則進行分類計數(shù)。 第一類 '0','1','2','3','4','5','6','7','8','9' 第二類 '+','-','*','/','%','=' 第三類 其它字符當(dāng)輸入字符''時先計數(shù),然后停止接收輸入,打印計數(shù)的結(jié)果。參考答案:#include &

2、lt;stdio.h>void main( ) int class1, class2, class3;char ch;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&#

3、39;:class1+; break; /* 對分類計數(shù) */case '+': case '-': case '*': case '/': case '%': case '=':class2+; break; /* 對分類計數(shù) */default: class3+; break; /* 對分類計數(shù) */while (ch!= ''); /* 字符''在C程序中要使用轉(zhuǎn)義符'' */printf("class1=%d, class2=%d,

4、class3=%dn", class1, class2, class3);2、從鍵盤輸入十個整數(shù),用插入法對輸入的數(shù)據(jù)按照從小到大的順序進行排序,將排序后的結(jié)果輸出。參考答案:void main( ) int i,j,num,a10;for(i=0;i<10;i+) printf("Enter No. %d:", i+1);scanf("%d",&num);for(j=i-1;j>=0&&aj>num;j-)aj+1=aj;aj+1=num;for(i=0;i<10;i+)printf (&quo

5、t;No.%d=%dn", i+1, ai);3、輸入一個正整數(shù),要求以相反的順序輸出該數(shù)。例如輸入12345,輸出位54321。參考答案:void main() int n;printf("Please enter n:");scanf("%d",&n);while(n>0) printf("%d",n%10);n=n/10; 4、編寫程序,讀入一個整數(shù);若為非負數(shù),則計算到2×之間的整數(shù)和;若為一個負數(shù),則求×到之間的整數(shù)和。分別利用for和while寫出兩個程序。參考答案:void m

6、ain() int i,n;long s1=0,s2=0;printf("Please enter N:");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=%ld result2=%ldn",s1,s2);5、一個自然數(shù)被8除余1,

7、所得的商被8除也余1,再將第二次的商被8除后余7,最后得到一個商為。又知這個自然數(shù)被17除余4,所得的商被17除余15,最后得到一個商是的2倍。編寫程序求這個自然數(shù)。參考答案:void main( ) int i,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=%dn",i);break;6、編寫程序,輸出用一元人民幣兌換成1分、2分和5分硬幣的不同兌換方法。參考答案:

8、void main( ) int f1,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: %4d 2: %2d 1: %2dn",+count,f5,f2,f1); 7、將一個數(shù)的數(shù)碼倒過來所得到的新數(shù)叫原數(shù)的反序數(shù)。如果一個數(shù)等于它的反序數(shù),則稱它為對稱數(shù)。求不超過1993的最大的二進制的對稱數(shù)。參考答案:void main() int i,j,n,k,a

9、16=0;for(i=1;i<=1993;i+) n=i;k=0;while(n>0) /* 將十進制數(shù)轉(zhuǎn)變?yōu)槎M制數(shù) */ ak+=n%2;n=n/2;for(j=0;j<k;j+)if(aj!=ak-j-1) break;if(j>=k) printf(" %d: ",i);for(j=0;j<k;j+)printf("%2d",aj);printf("n"); 8、十個小孩圍成一圈分糖果,老師分給第一個小孩10塊,第二個小孩2塊,第三個小孩8塊,第四個小孩22塊,第五個小孩16塊,第六個小孩4塊,第

10、七個小孩10塊,第八個小孩6塊,第九個小孩14 塊,第十個小孩20塊。然后所有的小孩同時將自己手中的糖分一半給右邊的小孩;糖塊數(shù)為奇數(shù)的人可向老師要一塊。問經(jīng)過這樣幾次調(diào)整后大家手中的糖的塊數(shù)都一樣每人各有多少塊糖參考答案:void main() int i,count=0,a11=0,10,2,8,22,16,4,10,6,14,20;while(1) for(i=1;i<=10;i+)ai-1=ai-1/2+ai/2;a10=a10/2+a0;for(i=1;i<=10;i+)if(ai%2=1) ai+;for(i=1;i<10;i+)if(ai!=ai+1) brea

11、k;if(i=10) break;else a0=0;count+;printf("count=%d number=%dn",count,a1);9、輸入5×5的數(shù)組,編寫程序?qū)崿F(xiàn):(1)求出對角線上各元素的和;(2)求出對角線上行、列下標(biāo)均為偶數(shù)的各元素的積;(3)找出對角線上其值最大的元素和它在數(shù)組中的位置。參考答案:void main() int i,j,s1=0,s2=1,a55;for(i=0;i<5;i+)for(j=0;j<5;j+) printf("%d %d: ",i,j);scanf("%d"

12、,&aij);for(i=0;i<5;i+) for(j=0;j<5;j+)printf("%5d",aij);printf("n");j=0;for(i=0;i<5;i+) s1=s1+aii;if(i%2=0) s2=s2*aii;if(aii>ajj) j=i;printf("SUN=%dnACCOM=%dna%d=%dn",s1,s2,j,ajj); 10、編寫程序,以字符形式輸入一個十六進制數(shù),將其變換為一個十進制整數(shù)后輸出。參考答案:#include "stdio.h"v

13、oid main() int i,n=0,a4=0;printf("Please enter a digit:");for(i=0;i<4 && (ai=getchar()!='n';i+) ;for(i=0;i<4;i+)if(ai>=48&&ai<=57) ai=ai-48;else if(ai>=65&&ai<=69) ai=ai-55;else if(ai>=97&&ai<=102) ai=ai-87;else printf("i

14、nput Error!");for(i=0;i<4;i+)n=n*16+ai;printf("%d",n); 11、編寫程序,輸入一個十進制整數(shù),將其變換為二進制后儲存在一個字符數(shù)組中。參考答案:void main() int i,n,k=16,a16=0;printf("Please enter a digit:");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

15、",ai); 12、對數(shù)組A中的N(0N100個整數(shù)從小到大進行連續(xù)編號,輸出各個元素的編號。要求不能改變數(shù)組中元素的順序,且相同的整數(shù)要具有相同的編號。例如數(shù)組是:A=(5,3,4,7,3,5,6) 則輸出為:(3,1,2,5,1,3,4)參考答案:void main() int i,j,k,n,m=1,r=1,a2100=0; printf("Please enter n:");scanf("%d",&n);for(i=0;i<n;i+) printf("a%d= ",i);scanf("%d&q

16、uot;,&a0i);while(m<=n) /* m記錄已經(jīng)登記過的數(shù)的個數(shù) */ for(i=0;i<n;i+) /* 記錄未登記過的數(shù)的大小 */ if(a1i!=0) /* 已登記過的數(shù)空過 */continue;k=i;for(j=i;j<n;j+) /* 在未登記過數(shù)中找最小數(shù) */if(a1j=0 && a0j<a0k) k=j;a1k=r+; /* 記錄名次,r為名次 */m+; /* 登記過的數(shù)增1 */for(j=0;j<n;j+) /* 記錄同名次 */if(a1j=0 && a0j=a0k) a1j=

17、a1k;m+;break;for(i=0;i<n;i+)printf("a%d=%d, %dn",i,a0i,a1i);13、求這樣一個三位數(shù),該三位數(shù)等于其每位數(shù)字的階乘之和。即:abc = a! + b! + c!參考答案:void main() int a5,i,t,k;for (i=100;i<1000;i+) for(t=0,k=1000;k>=10;t+) at=(i%k)/(k/10);k/=10;if(f(a0)+f(a1)+f(a2)=i)printf("%d ",i);f(m)int m; int i=0,t=1;w

18、hile(+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合并到 */char a,b,c; char tmp;int i,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(aj<

19、ak) k=j;tmp=ai; ai=ak; ak=tmp;for(i=0;i<n-1;i+) /* 對數(shù)組b排序 */ for(j=i+1,k=i;j<n;j+)if(bj<bk) k=j;tmp=bi; bi=bk; bk=tmp;i=0;j=0;k=0;while(i<m&&j<n) /* 合并 */if(ai>bj)ck+=bj+; /* 將ai、bj中的小者存入ck */else ck+=ai+; if(ai-1=bj) j+; /* 如果a、b當(dāng)前元素相等,刪掉一個 */while(i<m) ck+=ai+; /* 將a或b

20、中剩余的數(shù)存入c */while(j<n) ck+=bj+;ck='0';15、編寫函數(shù),采用遞歸方法實現(xiàn)將輸入的字符串按反序輸出。參考答案:#include "stdio.h"strout(s)char *s; if(*s!='0') strout(s+1); /* 遞歸調(diào)用strout函數(shù),字符串首地址前移一個字符 */putch(*s); /* 輸出字符串首地址所指向的字符 */else return; /* 遇到字符串結(jié)束標(biāo)志結(jié)束遞歸調(diào)用 */16、編寫函數(shù),采用遞歸方法將任一整數(shù)轉(zhuǎn)換為二進制形式。參考答案:turn(n,a,k

21、)int n,a ,k; if(n>0) ak=n%2;turn(n/2,a,k-1);else return;void main() int i,n,a16=0;printf("nPlease enter n:");scanf("%d",&n);turn(n,a,15);for(i=0;i<16;i+)printf("%d",ai);17、將一個數(shù)的數(shù)碼倒過來所得到的新數(shù),叫作原數(shù)的反序數(shù),如果一個數(shù)等于它的反序數(shù),則稱它為對稱數(shù)。編寫程序,采用遞歸算法求不超過1993的最大的二進制的對稱數(shù)。參考答案:smmt

22、( char s ) /* 指針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é)的英文句子,檢查其是否為回文(即正讀和反讀

23、都是一樣的,不考慮空格和標(biāo)點符號)。例如: 讀入句子:MADAM I'M ADAM. 它是回文,所以輸出:YES讀入句子:ABCDBA). 它不是回文,所以輸出:NO參考答案:#include "stdio.h"void main( ) char s21,*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("NOn");

24、break;if(p>=q)printf("YESn");19、編寫程序,其中包括一個函數(shù),此函數(shù)的功能是:對一個長度為N 的字符串從其第K個字符起,刪去M個字符,組成長度為N-M的新字符串(其中N、M<=80,K<=N)。例如輸入字符串"We are poor students.",利用此函數(shù)進行刪除"poor"的處理,輸出處理后的字符串是"We are students."。參考答案:strcut(s,m,k)char s ;int m,k; char *p;int i;p=s+m; /* 指

25、針p指向要被刪除的字符 */while(*p=*(p+k)!='0') /* p+k指向要前移的字符 */p+;20、編寫一個函數(shù)insert(s1,s2,ch),實現(xiàn)在字符串s1中的指定字符ch位置處插入字符串s2。參考答案:insert(s1,s2,ch)char s1,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接后,將串中全

26、部空格移到串首后輸出。參考答案:strcnb(s1,s2)char s1,s2; char *p;int i=1;p=s1;while(*p!='0') p+;while(*p+=*s2+)!='0') ; /* 將s2接于s1后面 */p=s1;while(*p!='0') /* 掃描整個字符串 */ if(*p=' ') /* 當(dāng)前字符是空格進行移位 */ while(*(p+i)=' ') i+; /* 尋找當(dāng)前字符后面的第一個非空格 */if(*(p+i)!='0') *p=*(p+i);

27、/* 將非空格移于當(dāng)前字符處 */*(p+i)=' '; /* 被移字符處換為空格 */else break; /* 尋找非空格時到字符串尾,移位過程結(jié)束 */p+;22、編寫程序,輸入字符串,分別統(tǒng)計字符串中所包含的各個不同的字符及其各自字符的數(shù)量。如:輸入字符串: abcedabcdcd則輸出:a=2 b=2 c=3 d=3 e=1。參考答案:#include "stdio.h"struct strnum int i;char ch;void main( ) char c;int i=0,k=0;struct strnum s100=0,NULL;while(c=getchar()!='n') for(i=0;si.i!=0;i+) if(c=si.ch) si.i+;break;if(si.i=0) sk.ch=c;sk+.i=1;i=0;while(si.i>0) printf("%c=%d &qu

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論