1. 第1题
1.1 题目描述
设计一个函数min(x,y),返回两个double类型值的较小值。在一个简单的驱动程序中测试该函数。
1.2 编程源码
# include<stdio.h>
double min(double x,double y){
return x>y?x:y;
}
int main(){
printf("%lf 和 %lf 两个数之间较小的为:%lf \n", 10.0,11.0,min(10,11));
printf("%lf 和 %lf 两个数之间较小的为:%lf \n", 7.0,6.0,min(7,6));
return 0;
}
1.3 结果显示
2. 第2题
2.1 题目描述
设计一个函数chline(ch,i,j),打印指定的字符j行j列。在一个简单的驱动程序测试函数。
2.2 编程源码
# include<stdio.h>
void chline(char ch, int i, int j){
for(int l = 0;l<j;++l){
for(int m = 0;m<i;++m)
putchar(ch);
putchar('\n');
}
}
int main(){
chline('*', 10,10);
return 0;
}
2.3 结果显示
3. 第3题
3.1 题目描述
编写一个函数,接受3个参数:一个字符和两个整数。字符参数时待打印的字符,第一个整数指定一行中打印字符的次数,第2个整数指定打印指定字符的行数。编写一个调用该函数的程序。
3.2 编程源码
# include<stdio.h>
void chline(char ch, int i, int j){
for(int l = 0;l<j;++l){
for(int m = 0;m<i;++m)
putchar(ch);
putchar('\n');
}
}
int main(){
chline('*', 10,10);
return 0;
}
3.3 结果显示
4. 第4题
4.1 题目描述
两数的调和平均数这样计算:先得到两数的倒数,然后计算两个倒数的平均值,最后取计算结果的倒数。编写一个函数,接受两个double类型的参数,返回这两个参数的调和平均数。
4.2 编程源码
# include<stdio.h>
double chline(double m, double n){
return 2.0/(1/m+1/n);
}
int main(){
printf("%.2f 和 %.2f的调和平均数为 %.2f\n", 2.0,3.0, chline(2,3));
return 0;
}
4.3 结果显示
5. 第5题
5.1 题目描述
编写并测试一个函数large_of(),该函数把两个double类型变量的值替换为较大的值。例如large_of(x,y)会把x和y中较大的值重新赋值给两个变量。
5.2 编程源码
# include<stdio.h>
void large_of(double* m, double* n){
double t = *m>*n?*m:*n;
*m = t;
*n = t;
}
int main(){
double m = 2;
double n = 3;
printf("运行前:%.2f 和 %.2f\n", m,n);
large_of(&m,&n);
printf("运行后:%.2f 和 %.2f\n", m,n);
return 0;
}
5.3 结果显示
6. 第6题
6.1 题目描述
编写并测试一个函数,该函数以3个double变量的地址作为参数,把最小值放入第一个函数,中间值放入第2个变量,最大值放入第3个变量。
6.2 编程源码
# include<stdio.h>
void large_of(double* l, double* m, double* n){
double t;
if(*l>*m){
t = *l;
*l = *m;
*m = t;
}
if(*l>*n){
t = *l;
*l = *n;
*n = t;
}
if(*m>*n){
t = *n;
*n = *m;
*m = t;
}
}
int main(){
double l = 4;
double m = 2;
double n = 3;
printf("运行前:%.2f\t%.2f\t%.2f\n",l,m,n);
large_of(&l,&m,&n);
printf("运行后:%.2f\t%.2f\t%.2f\n",l,m,n);
return 0;
}
6.3 结果显示
7. 第7题
7.1 题目描述
编写一个函数,从标准输入中读取字符,直到遇到文件结尾。程序要报告每个字符是否是字母。如果是,还要报告该字母在字母表中的数值位置。例如,c和C在字母表中的位置都是3。合并一个函数,以一个字符作为参数,如果该字符是一个字母则返回一个数字的,否则返回-1
7.2 编程源码
# include<stdio.h>
# include<ctype.h>
void large_of(void){
char c;
while((c=getchar())!=EOF){
if(isupper(c))printf("%c:%d", c, c-'A');
else if(islower(c))printf("%c:%d", c, c-'a');
else putchar(c);
}
}
int main(){
large_of();
return 0;
}
7.3 结果显示
文件内容:
ABC
a b c
d e f
A
8. 第8题
8.1 题目描述
第6章的程序清单6.20中,power()函数返回一个double类型数的正整数次幂。改进该函数,使其能正确计算负幂。另外,函数要处理0的任何次幂都为0,任何数的0次幂都为1(函数应报告0的0次幂未定义,因此把该值处理为1)。要是用一个循环,并在程序中测试该函数。
8.2 编程源码
# include<stdio.h>
double cal(double a, int n){
double s = 1;
for(int i=0;i<n;++i) s*=a;
return s;
}
double power(double a, int n){
if(-0.000000000001<a && a < 0.0000000001){
if(n==0){
printf("0的0次幂未定义,因此把该值处理为1\n");
return 1;
}else return 0;
}
int f = n>0?0:1;
n = n>0?n:-n;
if(f)return(1/cal(a,n));
else return(cal(a,n));
}
int main(){
printf("%.2lf的%d次幂为%.2lf\n", 0.0,0, power(0.0,0));
printf("%.2lf的%d次幂为%.2lf\n", 1.0,0, power(1.0,0));
printf("%.2lf的%d次幂为%.2lf\n", 2.0,2, power(2.0,2));
printf("%.2lf的%d次幂为%.2lf\n", 2.0,-2, power(2.0,-2));
return 0;
}
8.3 结果显示
9. 第9题
9.1 题目描述
使用递归函数重写编程练习8。
9.2 编程源码
# include<stdio.h>
# include<ctype.h>
double cal(double a, int n){
if(n<=0)return 1;
else return a*cal(a, n-1);
}
double power(double a, int n){
if(-0.000000000001<a && a < 0.0000000001){
if(n==0){
printf("0的0次幂未定义,因此把该值处理为1\n");
return 1;
}else return 0;
}
int f = n>0?0:1;
n = n>0?n:-n;
if(f)return(1/cal(a,n));
else return(cal(a,n));
}
int main(){
printf("%.2lf的%d次幂为%.2lf\n", 0.0,0, power(0.0,0));
printf("%.2lf的%d次幂为%.2lf\n", 1.0,0, power(1.0,0));
printf("%.2lf的%d次幂为%.2lf\n", 2.0,2, power(2.0,2));
printf("%.2lf的%d次幂为%.2lf\n", 2.0,-2, power(2.0,-2));
return 0;
}
9.3 结果显示
10. 第10题
10.1 题目描述
为了让程序清单9.8中的to_binary函数更通用,编写一个to_base_n函数接受两个在2~10范围内的参数,然后以第2个参数中指定的禁止打印第一个参数的数值。例如,to_base_n(129,8)显示的结果为201,也就是129的八进制数。在一个完整的程序中测试该函数。
10.2 编程源码
# include<stdio.h>
int to_base_n(int num,int n){
int a;
int b;
if(num>=n){
b = num%n;
a = num/n;
return b+to_base_n(a,n)*10;
}else
return num;
}
int main(){
printf("%d的%d进制表示为%d\n", 129,8,to_base_n(129,8));
printf("%d的%d进制表示为%d\n", 65,2,to_base_n(65,2));
return 0;
}
10.3 结果显示
11. 第11题
11.1 题目描述
编写并测试Fibonacci函数,该函数用循环代替递归计算斐波那契数。
11.2 编程源码
# include<stdio.h>
int Fibonacci(int n){
int s = 0;
int p = 1;
int pp = 1;
if(n<=2)return 1;
for(int i=2;i<n;++i){
s = pp+p;
pp = p;
p = s;
}
return s;
}
int main(){
printf("第%d个Fibonacci数为%d\n", 1,Fibonacci(1));
printf("第%d个Fibonacci数为%d\n", 2,Fibonacci(2));
printf("第%d个Fibonacci数为%d\n", 3,Fibonacci(3));
printf("第%d个Fibonacci数为%d\n", 4,Fibonacci(4));
printf("第%d个Fibonacci数为%d\n", 10,Fibonacci(10));
return 0;
}