一、設計函數min(x,y)返回兩個double數值中較小的數值,同時用一個驅動程序測試該函數。c++
#include<stdio.h> double min(double ,double ); int main(void) { double x,y; printf("input two doubles:"); scanf("%lf%lf",&x,&y); printf("the smaller is:%.2lf\n",min(x,y)); return(0); } double min(double a,double b) { r=(a<b?a:b); }
二、 設計函數chline(ch,i,j),實現指定字符在i列到j列的輸出,同時用一個驅動程序測試該函數。函數
#include<stdio.h> void chline(char ch,int i,int j); int main (void) { char ch; int x,y; printf("Input a char: "); scanf("%c",&ch); printf("Input two inter: "); scanf("%d%d",&x,&y); chline(ch,x,y); return 0; } void chline(char ch,int i,int j) { int k; for(k=1;k<i;k++) printf(" "); for(;k<=j;k++) printf("%c",ch); return 0; }
三、編寫一個函數。函數的3個參數是一個字符和兩個整數。字符參數是須要輸出的字符。第一個字符說明了在每行中該字符輸出的個數,而第二個整數指的是須要輸出的行數。編寫一個調用該函數的程序。測試
#include<stdio.h> void chline(char ch,int i,int j); int main (void) { char ch; int x,y; printf("Input a char : "); scanf("%c",&ch); printf("Input the row and column : "); scanf("%d%d",&x,&y); chline(ch,x,y); return 0; } void chline(char ch,int i,int j) { int r,c; for(r=1;r<=i;r++) { for(c=1;c<=j;c++) printf("%c",ch); printf("\n"); } return 0; }
四、兩個數的諧均值能夠這樣計算:首先對兩個數值的倒數取平均值,最後再取拿到。編寫一個帶有兩個double參數的函數,計算這兩個參數的諧均值。ui
#include<stdio.h> double calculate(double,double);; int main(void) { double a,b; printf("Input two doubles: "); scanf("%lf%lf",&a,&b); printf("1/((1/x+1/y)/2)=%0.3lf\n",calculate(a,b)); return 0; } double calculate(double x,double y) { return 1/((1/x+1/y)/2); }
五、編寫並測試函數larger_of(),其功能是將兩個double類型變量的數值替換成它們中的較大值。例如,larger_of(x,y)會把x和y中的較大者從新賦值給變量x和y。設計
#include<stdio.h> void larger_of(double *,double *); int main(void) { double a,b; printf("Input two doubles: "); scanf("%lf%lf",&a,&b); larger_of(&a,&b); printf("the result is: a=%0.3lf,b=%0.3lf\n",a,b); return 0; } void larger_of(double *x,double *y) { *x=*y=(*x>*y?*x:*y); }
六、編寫一個程序,使其從標準輸入讀取字符,下到遇到文件結尾。對於每一個字符,程序須要檢查並報告該字符是不是一個字母。若是是的話,程序還應報告字母在字母表中的位置。例如,c和C的字母位置都是3.能夠先實現這樣一個函數:接受一個字符參數,若是該字符是字母則返回該字母的數值位置,不然返回-1。code
#include<stdio.h> #include<ctype.h> int adress(char); int main(void) { char ch; printf("Input a ch: "); while((ch=getchar())!='\n') { printf("the position of the char in ABC is: %d\n",adress(ch)); } return 0; } int adress(char ch) { if(isalpha(ch)) return tolower(ch)-'a'+1; else return -1; }
七、在第6章「c控制語句:循環」的程序清單6.20中,函數power()的功能是返回一個double類型數的某個正整數次冪。如今改進該函數使用能正確的計算負冪。同時,用該函數實現0的任何次冪爲0,而且任何數值的0次冪爲1。使用循環的方法編寫該函數並在程序中測試它。遞歸
#include<stdio.h> double power(double ,int); int main(void) { double x; int exp; printf("input the base number and the exponent: "); scanf("%lf%d",&x,&exp); printf("%.3g to the power %d is %.5g\n",x,exp,power(x,exp)); return 0; } double power(double n,int p) { int i; double pow=1; if (p>0) for(i=1;i<=p;i++) pow*=n; else if (p<0) for(i=-1;i>=p;i--) pow/=n; else if(n!=0) pow=1; else pow=1/n; //0的0次冪無心義,因此用1/0這個無心義氣數代替 return pow; }
八、使用遞歸函數重作練習7.ci
#include<stdio.h> double power(double ,int); int main(void) { double x; int exp; printf("input the base number and the exponent: "); scanf("%lf%d",&x,&exp); printf("%.3g to the power %d is %.5g\n",x,exp,power(x,exp)); return 0; } double power(double n,int p) { int i; double pow=1; if (p>0) for(i=1;i<=p;i++) pow*=n; else if (p<0) for(i=-1;i>=p;i--) pow = 1 / power(n,-p); else if(n!=0) pow=1; else pow=1/n; //0的0次冪無心義,因此用1/0這個無心義氣數代替 return pow; }
九、爲了使程序清單9.8中的函數to_binary()更通常化,能夠在新的函數to_base_n中使用第二個參數,且該參數的範圍從2-10.而後,新函數輸出第一個參數在第二個參數規定的進制數下的數值結果。例如,to_base_n(129,8)的輸出結果是201,也就是129的八進制數值。最後在一個完整的程序中對該函數進行測試。get
#include <stdio.h> void to_base_n(unsigned long,unsigned int); int main(void) { unsigned long number; unsigned int base; printf("Enter an integer (q to quit):\n"); while(scanf("%lu%u",&number,&base)==2) { printf("%lu's base %u equivalent: ",number,base); to_base_n(number,base); putchar('\n'); printf("Enter an integer (q to quit):\n"); } printf("Done.\n"); return 0; } void to_base_n(unsigned long n,unsigned int base) { int r ; r=n%base; if(n>=base) to_base_n(n/base,base); putchar('0'+r); return 0 ; }
十、編寫並測試一個函數FIbonacci(),在該函數中使用循環代替遞歸完成斐波納契數列的計算。input
#include <stdio.h> long Fibonacci(int); int main(void) { int n; printf("Enter an integer (q to quit):\n"); while(scanf("%d",&n)==1) { printf("The term %d of Fibonacci sequence is %d\n",n,Fibonacci(n)); printf("Enter an integer (q to quit):\n"); } printf("Done.\n"); return 0; } long Fibonacci(int n) { int n1,n2,temp,i; if(n>2) for(n1=1,n2=1,i=3;i<=n;i++) { temp=n1+n2; //計算前兩個數的和 n1=n2; //把第二個數的值賦給第一個數 n2=temp; //把二者以後再賦給第二個變量 } else n2=1; return n2; }