文档章节

C Primer Plus 第9章 函数 9.11 编程练习答案

idreamo
 idreamo
发布于 2016/07/19 06:59
字数 1436
阅读 386
收藏 0

1、设计函数min(x,y)返回两个double数值中较小的数值,同时用一个驱动程序测试该函数。

#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);
}

2、 设计函数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、编写一个函数。函数的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;
}

4、两个数的谐均值可以这样计算:首先对两个数值的倒数取平均值,最后再取拿到。编写一个带有两个double参数的函数,计算这两个参数的谐均值。

#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);
}

5、编写并测试函数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);
}

6、编写一个程序,使其从标准输入读取字符,下到遇到文件结尾。对于每个字符,程序需要检查并报告该字符是否是一个字母。如果是的话,程序还应报告字母在字母表中的位置。例如,c和C的字母位置都是3.可以先实现这样一个函数:接受一个字符参数,如果该字符是字母则返回该字母的数值位置,否则返回-1。

#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;
}

7、在第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;
}

8、使用递归函数重做练习7.

#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、为了使程序清单9.8中的函数to_binary()更一般化,可以在新的函数to_base_n中使用第二个参数,且该参数的范围从2-10.然后,新函数输出第一个参数在第二个参数规定的进制数下的数值结果。例如,to_base_n(129,8)的输出结果是201,也就是129的八进制数值。最后在一个完整的程序中对该函数进行测试。

#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 ;
}

10、编写并测试一个函数FIbonacci(),在该函数中使用循环代替递归完成斐波纳契数列的计算。

#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;
}

 

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
加载中

评论(0)

C Primer Plus 第10章 数组和指针 编程练习答案

1、修改程序清单10.7中的程序rain,使它不使用数组下标,而是使用指针进行计算(程序中仍然需要声明并初始化数组)。 2、编写一个程序,初始化一个double数组,然后把数组内容复制到另外两个...

idreamo
2016/08/14
300
0
C Primer Plus 第9章 函数 9.4 多源代码文件程序的编译

9.4.1 UNIX 首先假定UNIX系统下安装了标准的UNIX C 编译器cc。文件file1.c和file2.c中包含有C的函数。下面的命令将把这两个文件编译在一起并生成可执行文件a.out; cc file1.c file2.c 另外还...

idreamo
2016/07/13
205
0
关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部...

tony关东升
2018/06/26
0
0
关东升的《《从零开始学Swift》即将出版

大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》《从零开始学Swift》将在《Swift开发指南》第1版的基础上添加Swift2.0的...

智捷课堂
2015/08/17
113
0
关东升的《从零开始学Swift》第2版已经出版

关东升的《从零开始学Swift》第2版已经出版 大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》 《从零开始学Swift》将在《...

tony关东升
2016/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

laravel 多条件查询 闭包写法

laravel 多条件查询 闭包写法 直接上代码 1: 比如我要查询 符合条件的 部门和 用户 DB::table('user')->where('user_id',20)->whereIn('d_id',[82,83])->get(); 可以使用下面这种方法替换 ......

李佳顺
17分钟前
21
0
springboot实现热部署

一、前言 在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。对于一个后端开发者来说,重启过程确实很难受。在java开发领域...

素小暖OSC
17分钟前
65
0
为什么要选择开源的直播源码开发直播系统?

相信大家在购买直播源码的过程中,肯定都会咨询过是否开源这个问题。对于懂技术的人来说,开源的意思非常好理解,而对于不懂技术的人来说,开源可能是个非常难以理解的词汇。在这里跟大家简单...

图玩智能科技
19分钟前
26
0
真的在Windows中杀死一个进程

偶尔,Windows机器上的程序会发疯,只是挂起。 所以我将调用任务管理器并点击“结束进程”按钮。 但是,这并不总是有效; 如果我尝试了足够多次,那么它通常会最终死亡,但我真的希望能够立即...

技术盛宴
24分钟前
56
0
使用低代码平台 - 危险的赌注

低代码应用平台(LCAP - low code application platforms)在多样、复杂的现代软件开发情势下应运而生。依据Gartner(高德纳,全球最具权威的IT研究与顾问咨询公司)的数据,Mendix 是这方面...

CUBAChinaTeam
25分钟前
46
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部