1.设计函数min(x,y),返回两个double数值中较小的数值,同时用一个简单的驱动程序测试该函数。
#include <stdio.h>
double min(double,double);
int main(void)
{
double a,b;
double min_num;
while((scanf("%lf %lf",&a,&b))!=2)
{
printf("please enter two number.\n");
}
min_num=min(a,b);
printf("the minisum number is %f\n",min_num);
}
double min(double a,double b)
{
return a<b?a:b;
}
2.设计函数chline(ch,i,j),实现指定字符i列到j列的输入,并用一个简单的驱动程序测试该函数。
#include <stdio.h>
void chline(char ch,int i,int h);
int main(void)
{
int i=5,j=3;
char ch='x';
chline(ch,i,j);
return 0;
}
void chline(char ch,int i,int h)
{
int n,m;
for(n=1;n<=h;n++)
{
for(m=1;m<=i;m++)
{
putchar(ch);
}
putchar('\n');
}
}
3.编写一个函数。函数的3个参数是一个字符和两个整数。字符参数是需要输入的字符。第一个整数说明了在每行中该字符输出的个数,而第二个整数指的是需要输出的行数。编写一个调用该函数的程序。
#include <stdio.h>
void chline(char ch,int i,int h);
int main(void)
{
int i,j;
char ch;
printf("Enter two number,the first as column and latter as row\n");
while((scanf("%d %d",&i,&j))!=2)
continue;
while(getchar()!='\n');
printf("Enter a charact for print\n");
ch=getchar();
while(getchar()!='\n');
chline(ch,i,j);
return 0;
}
void chline(char ch,int i,int h)
{
int n,m;
for(n=1;n<=h;n++)
{
for(m=1;m<=i;m++)
{
putchar(ch);
}
putchar('\n');
}
}
4.两数值的谐均值可以这样计算:首先对两数值的倒数取平均值,然后再取倒数,编写一个带有两个double参数的函数,计算着两个参数的谐均值。
#include <stdio.h>
double xiejun(double a,double b);
int main(void)
{
double a,b;
printf("请输入两个不为0的浮点数\n");
while((scanf("%lf %lf",&a,&b))!=2&&a==0&&b==0)
{
printf("请输入两个不为0的浮点数\n");
}
printf("这两个数的谐均数是%f\n",xiejun(a,b));
return 0;
}
double xiejun(double a,double b)
{
return 1/((1/a+1/b)/2);
}
5.编写并测试函数larger_of(),其功能是将两个double类型的变量的数值替换成他们中的较大值。例如,larger_of(x,y)会把x,y中的较大值重新赋值给x和y。
#include <stdio.h>
void chang(double* a,double* b);
int main(void)
{
double a,b;
printf("请输入两个不为0的浮点数\n");
while((scanf("%lf %lf",&a,&b))!=2)
{
printf("请输入两个不为0的浮点数\n");
}
printf("函数调用前,a=%.2f和b=%.2f\n",a,b);
chang(&a,&b);
printf("函数调用后,a=%.2f和b=%.2f\n",a,b);
return 0;
}
void chang(double* a,double* b)
{
double large;
large=*a>*b?*a:*b;
*a=*b=large;
}
6.编写一个程序,使其从标准输入读取字符,直到遇到文件结尾。对于每个字符,程序需要检查并报告字符是否是一个字母。如果是的话,程序还应该报告该字母在字母表中的数值位置。例如,c和C的字母位置都是3.可以先实现这样一个函数:接受一个字符参数,如果该字符为字母则返回该字母的数值位置,否则返回-1。
#include <stdio.h>
#include <ctype.h>
int PosionOfChar(char ch);
int main(void)
{
char ch;
while((ch=getchar())!=EOF)
{
if(ch!='\n')
printf("%c:%d ",ch,PosionOfChar(ch));
}
return 0;
}
int PosionOfChar(char ch)
{
int posion;
if(isalpha(ch))
{
if(isupper(ch))
{
ch=tolower(ch);
}
posion=ch-96;
}
else
{
posion=-1;
}
return posion;
}
7.在第6章“C控制语句:循环”的程序清单6.20中,函数power()的功能是返回一个double类型的某个正整数次幂。现在改进该函数,使其能正确计算负幂。同时,该函数实现0的任何次幂为0,并且任何数值的0次幂为1.使用循环的方法编写该函数并且在一个程序中测试它。
#include <stdio.h>
#include <math.h>
double power(int n,int p);
int main(void)
{
int n,p;
printf("please enter two integer number1.\n");
scanf("%d %d",&n,&p);
power(n,p);
printf("%d^%d is %.2f",n,p,power(n,p));
}
double power(int n,int p)
{
int x;
double rt=1;
if(n!=0)
{
if(p>0)
{
for(x=1;x<=p;x++)
{
rt*=n;
}
}
if(p<0)
{
p=fabs(p);
for(x=1;x<=p;x++)
{
rt*=n;
}
rt=1/rt;
}
if(p==0)
{
rt=1;
}
}
else
{
rt=0;
}
return rt;
}
8.使用递归函数重做练习7.
#include <stdio.h>
#include <math.h>
double power(int n,int p);
int main(void)
{
int n,p;
double result;
int status;
do{
printf("please enter two integer number(q to quit):\n");
status=scanf("%d %d",&n,&p);
result=power(n,p);
printf("%d^%d is %.2f\n",n,p,result);
}while(status==2);
return 0;
}
double power(int n,int p)
{
int x;
double rt=1;
if(n!=0)
{
if(p==0)
{
rt=1;
}
else if(p>0)
{
rt=n*power(n,p-1);
}
else
{
p=fabs(p);
rt=1/(n*power(n,p-1));
}
}
else
{
rt=0;
}
return rt;
}
9.为了使程序清单9.8中的to_binary函数一般化,可以在新的函数to_base_n()中使用第二个参数,且该参数的范围从2到10.然后,这个新函数输出第一个参数在第二个参数规定的进制数下的数值结果。例如,to_base_n(129,8)的输出结果是201,也就是129的八进制数值。最后在一个完整的程序对该函数进行测试。
#include <stdio.h>
void to_binary_n(int num,int digit);
int main(void)
{
int num,digit;
double result;
int status;
do{
printf("\nplease enter two integer number(q to quit):\n");
status=scanf("%d %d",&num,&digit);
to_binary_n(num,digit);
}while(status==2);
}
void to_binary_n(int num,int digit)
{
int r;
r=num%digit;
if(num!=0)
{
to_binary_n(num/digit,digit);
printf("%d",num%digit);
}
}
10.编写并测试一个函数Fibonacci(),在该函数中使用循环代替递归完成斐波那契数列的计算。
暂时还不会。