第一篇:c語言第8章書后習題_編程題
第8章函數(shù)
三、編程題
8.17請編寫函數(shù),其功能是對傳送過來的兩個浮點數(shù)求出和值和差值,并通過形參傳送回調(diào)用函數(shù)。#include
}
8.18 請編寫函數(shù),對傳送過來的三個數(shù)選出最大數(shù)和最小數(shù),并通過形參傳回調(diào)用函數(shù)。#include
} void main(){
int m,n,p,nmax,nmin;scanf(“%d%d%d”,&m,&n,&p);fun(m,n,p,&nmax,&nmin);printf(“max=%dn”,nmax);printf(“min=%dn”,nmin);*max = a>b?a:b;*max = *max>c?*max:c;*min = a第二篇:C語言程序設(shè)計習題試題(編程題)
C語言程序設(shè)計習題(編程類)
1、從鍵盤輸入任意的字符,按下列規(guī)則進行分類計數(shù)。
第一類 '0','1','2','3','4','5','6','7','8','9'
第二類 '+','-','*','/','%','='
第三類 其它字符
當輸入字符''時先計數(shù),然后停止接收輸入,打印計數(shù)的結(jié)果。參考答案:
#include
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=%dn”, class1, class2, class3); }
2、從鍵盤輸入十個整數(shù),用插入法對輸入的數(shù)據(jù)按照從小到大的順序進行排序,將排序后的結(jié)果輸出。參考答案: void main(){ int i,j,num,a[10]; for(i=0;i<10;i++){ printf(“Enter No.%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=%dn”, i+1, a[i]); }
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ù)N;若N為非負數(shù),則計算N到2×N之間的整數(shù)和;若N為一個負數(shù),則求2×N到N之間的整數(shù)和。分別利用for和while寫出兩個程序。參考答案: void main(){ 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; else for(i=n;i>=2*n;i--)s1=s1+i; i=n; if(i>=0)while(i<=2*n)s2=s2+i++; else while(i>=2*n)s2=s2+i--;
printf(“Result1=%ld result2=%ldn”,s1,s2); }
5、一個自然數(shù)被8除余1,所得的商被8除也余1,再將第二次的商被8除后余7,最后得到一個商為a。又知這個自然數(shù)被17除余4,?所得的商被17除余15,最后得到一個商是a的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分硬幣的不同兌換方法。參考答案: 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[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 8、十個小孩圍成一圈分糖果,老師分給第一個小孩10塊,第二個小孩2塊,第三個小孩8塊,第四個小孩22塊,第五個小孩16塊,第六個小孩4塊,第七個小孩10塊,第八個小孩6塊,第九個小孩14 塊,第十個小孩20塊。然后所有的小孩同時將自己手中的糖分一半給右邊的小孩;糖塊數(shù)為奇數(shù)的人可向老師要一塊。問經(jīng)過這樣幾次調(diào)整后大家手中的糖的塊數(shù)都一樣?每人各有多少塊糖? 參考答案: void main(){ int i,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=%d number=%dn”,count,a[1]); } 9、輸入5×5的數(shù)組,編寫程序?qū)崿F(xiàn):(1)求出對角線上各元素的和; (2)求出對角線上行、列下標均為偶數(shù)的各元素的積;(3)找出對角線上其值最大的元素和它在數(shù)組中的位置。參考答案: void main(){ int i,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=%dnACCOM=%dna[%d]=%dn”,s1,s2,j,a[j][j]); } 10、編寫程序,以字符形式輸入一個十六進制數(shù),將其變換為一個十進制整數(shù)后輸出。參考答案: #include “stdio.h” void main(){ int i,n=0,a[4]={0}; printf(“Please enter a digit:”); 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; else if(a[i]>=65&&a[i]<=69)a[i]=a[i]-55; else if(a[i]>=97&&a[i]<=102)a[i]=a[i]-87; else printf(“input Error!”); for(i=0;i<4;i++)n=n*16+a[i]; printf(“%d”,n); } 11、編寫程序,輸入一個十進制整數(shù),將其變換為二進制后儲存在一個字符數(shù)組中。參考答案: void main(){ int i,n,k=16,a[16]={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”,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)參考答案: void main(){ int i,j,k,n,m=1,r=1,a[2][100]={0}; printf(“Please enter n:”); scanf(“%d”,&n); for(i=0;i for(j=i;j 13、求這樣一個三位數(shù),該三位數(shù)等于其每位數(shù)字的階乘之和。 即: abc = a!+ b!+ c!參考答案: void main(){ int a[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)int m; { int i=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合并到 */ char a[],b[],c[]; { char tmp; int i,j,k,m,n; m=strlen(a); n=strlen(b); for(i=0;i tmp=a[i]; a[i]=a[k]; a[k]=tmp; } for(i=0;i tmp=b[i]; b[i]=b[k]; b[k]=tmp; } i=0;j=0;k=0; while(i