1.设计函数 min(x,y),返回两个double数值中较小的数值,同时用一个简单的驱动程序测试该函数。
//exercise01 #include<stdio.h> double min(double x,double y); int main(void) { double x= 0; double y = 0 ; double min_num = 0; printf("enter two double number:"); while(scanf("%lf %lf",&x,&y) != 2) { printf("enter error,try again!\n"); while(getchar() != '\n') continue; } min_num = min(x,y); printf("the minium number is %.2f\n",min_num); return 0; } double min(double x,double y) { if( x < y) return x; return y; }
2.设计函数chline(ch, i, j),实现指定字符在i列到j列的输出,并用一个简单的驱动程序测试该函数。
//exercise02 #include<stdio.h> void chline(char ch , int i , int j); int main(void) { int i = 0; int j = 0 ; char ch = ' '; printf("enter the char you want to print:"); ch = getchar(); printf("enter i , j:"); scanf("%d %d",&i,&j); chline(ch,i,j); return 0; } void chline(char ch , int i , int j ) { for(int col1 = 1 ; col1 < i ; col1++) putchar(' '); for(int col2 = i ; col2 <= j ; col2 ++) putchar(ch); putchar('\n'); }
3.编写一个函数。函数的3个参数是一个字符和两个整数。字符参数是需要输出的字符。第一个整数说明了在每行中该字符输出的个数,而第二个整数指的是需要输出的行数。编写一个调用该函数的程序。
*chap9_03.cpp -- exercise02*/ #include<stdio.h> void chline(char ch , int i , int j); int main(void) { int rows = 0; int cols = 0 ; char ch = ' '; printf("enter the char you want to print:"); ch = getchar(); printf("enter rows and colums:"); scanf("%d %d",&rows,&cols); chline(ch,rows,cols); return 0; } void chline(char ch , int i , int j ) { for(int row = 0 ; row < i ; row++) { for(int col = 0 ; col < j ; col ++) putchar(ch); putchar('\n'); } }
4.两数值的谐均值可以这样计算:首先对两数值的倒数取平均值,最后再取倒数。编写一个带有两个double参数的函数,计算这两个参数的谐均值。
#include<stdio.h> double meanValue(double x,double y); int main() { double x = 1; double y = 1; double result = 0; printf("enter two numbers(can not 0):"); while(scanf("%lf %lf",&x,&y) == 2 && x != 0 && y != 0) { result = meanValue(x,y); printf("mean value is %.2f\n",result); printf("enter two numbers(can not 0,q to quit):"); } return 0; } double meanValue(double x , double y) { double temp = 1; temp = (1 / x + 1 / y) / 2; return 1/temp; }
5.编写并测试函数larger_of(),其功能是将两个double类型变量的数值替换成它们中的较大值。例如,larger_of(x,y)会把x和y中的较大数值重新赋给变量x和y
//exercise05 #include<stdio.h> void large_of(double *x, double * y); int main() { double x = 1; double y = 1; printf("enter two numbers(can not 0):"); while(scanf("%lf %lf",&x,&y) == 2 ) { large_of(&x,&y); printf("x = %.2f , y = %.2f \n",x , y); printf("enter two numbers(can not 0,q to quit):"); } printf("Done!\n"); return 0; } void large_of(double *x , double * y) { if(*x > *y) *y = *x; else *x = *y; }
6.编写一个程序,使其从标准输入读取字符,直到遇到文件结尾。对于每个字符,程序需要检查并报告该字符是否是一个字母。如果是的话,程序还应报告该字母在字母表中的数值位置。例如,c和C的字母位置都是3。可以先实现这样一个函数:接受一个字符参数,如果该字符为字母则返回该字母的数值位置,否则返回-1。
//exercise06 #include<stdio.h> #include<ctype.h> int isChar(char ch); int main(void) { char ch; int position; printf("printf chars(ctrl + z is end):\n"); while(( ch = getchar() ) != EOF) { position = isChar(ch); if(position > 0) printf("%c %d\n",ch,position); } printf("Done!\n"); return 0; } int isChar(char ch) { if(isalpha(ch)) { ch = toupper(ch); return ch - 64; } return -1 ; }
7.在第6章“C控制语句:循环”的程序清单6.20中,函数power()的功能是返回一个double类型数的某个正整数次幂。现在改进该函数,使其能正确地计算负幂。同时,用该函数实现0的任何次幂为0,并且任何数值的0次幂为l。使用循环的方法编写该函数并在一个程序中测试它。
//exercise07 #include<stdio.h> double power(double x, int y); //计算 x 的 y 次方 int main(void) { double x=0; int y = 0 ; double result = 0; printf("enter base number and exponent number:"); while(scanf("%lf %d",&x , &y) == 2) { result = power(x,y); printf("result is %.2f\n",result); printf("enter base number and exponent number(q to quit):"); } printf("Done! \n"); return 0; } double power(double x, int y) // x 的 y次方 { double result = 1; if( x == 0) return 1; else { if( y > 0) for(int i = 0 ; i < y ; i ++) result *=x; else if ( y < 0) for(int i = 0 ; i < -y ; i ++) result *= 1 / x; else return 1; } return result ; }
8.使用递归函数重做练习7。
#include<stdio.h> //#include<math.h> double power(double x , int y); // x 的 y次方 int main(void) { double x=0; int y = 0 ; double result = 0; printf("enter base number and exponent number:"); while(scanf("%lf %d",&x , &y) == 2) { result = power(x,y); printf("result is %.2f\n",result); printf("enter base number and exponent number(q to quit):"); } printf("Done! \n"); return 0; } double power(double x , int y) // x 的 y次方 { double result = 0; if( x == 0 ) return 1 ; if( y > 0) return x * power(x,y-1); else if( y < 0) return ( 1 / x ) * power(x , y + 1); else return 1; return result; }
9.为了使程序清单 9.八 中的函数to_binary()更一般化,可以在新的函数to_base_n()中使用第二个参数,且该参数的范围从2到10。然后,这个新函数输出第一个参数在第二个参数规定的进制数下的数值结果。例如,to_base_n (129,8)的输出是201,也就是129的八进制数值。最后在一个完整的程序中对该函数进行测试。
//exercise09 #include<stdio.h> void convert(int input, int n) ; //把input转换成n进制的数 int main(void) { int input = 0; int n = 0; printf("please enter number and scale: "); while(scanf("%d %d", &input, & n) == 2) { convert(input , n); } return 0; } *input 要转换的数, n 要转换的进制*/ void convert(int input, int n) { int r ; r = input % n; if(input >= n) convert( input / n, n); putchar('0' + r); return; }
10.编写并测试一个函数Fibonacci(),在该函数中使用循环代替递归完成斐波纳契数列的计算。
//exercise10 #include<stdio.h> int Fibonacci(int n) ; int main(void) { int n = 0; printf("please input an integer:"); while(scanf("%d",&n) == 1) printf("%d",Fibonacci(n)); return 0 ; } int Fibonacci(int n) { if( n <= 2) return 1; else return Fibonacci(n -1) + Fibonacci( n - 2) ; }