C程序设计(第五版)谭浩强 第三章课后习题详解(包含算法分析,原理解释,运行结果)

第三章 最简单的C程序设计——顺序程序设计

(1)国民生产总值变化

算法分析:该题属于数学问题,有计算公式、输入值,只需编写对应程序,对结果进行输出即可。

  难点在于c语言的次幂表示(例如:pow(4,2);求得是4的平方,pow(x,y)表示x的y次方,需要调用math.h头文件)

#include <stdio.h>
#include <math.h>
int main()
{
    double r,p;               //定义变量
    int n;
    r=0.07;                   //变量赋值
    n=10;
    p=pow(1+r,n);
    printf("%lf",p);
}

(2)存款利息的计算

算法分析:该问题也属于数学问题,通过提供的公式,进行编程从而求解。

#include <stdio.h>
#include <math.h>
int main()
{
    int p=1000;
    double a=0.015,b=0.021,c=0.0275,d=0.03,e=0.0035;//各年期的存款利息
    double p1,p2,p3,p4,p5;                          //五种方式的本息和
    p1=p*(1+5*d);
    printf("一次存5年本息和为%lf\n",p1);
    p2=(p*(1+2*b))*(1+3*c);
    printf("先存两年,到期后本息和再存三年的本息为%lf\n",p2);
    p3=(p*(1+3*c))*(1+2*b);
    printf("先存三年,到期后本息和在存两年的本息为%lf\n",p3);
    p4=p*pow((1+a),5);
    printf("存一年期,本息连存5年本息为%lf\n",p4);
    p5=p*pow((1+e/4),4*5);
    printf("活期存款本息和为%lf\n",p5);
    return 0;
}

(3)购房贷款(计算还清月数)

算法分析:该题属于数学问题,也是通过公式,编写程序的到所求答案。难点在于log函数的表示:(c语言中)

log10(100):log_{10}100,log2(8):计算log2^8,运用换底公式。基本格式不做改变,正常使用即可

#include <stdio.h>
#include <math.h>
int main()
{   double m,r=0.01;
    int d=300000,p=6000;
    m=log10(p/(p-d*r))/log10(1+r);
    printf("%0.2lf",m);               //取小数点后两位
}

#include <math.h>
int main()
{   double m,r=0.01;
    int d=300000,p=6000;
    m=log10(p/(p-d*r))/log10(1+r);
    printf("%0.1lf",m);               //取小数点后一位,直接是按第二位四舍五入处理
}

 

(4)分析下列程序

1)分析:在输出控制符中%c输出字符型数据,%d输出整形数据。字符在ASCII码的0-127范围内都可表示十进制整数。

# include <stdio.h>
int main()
{

    char c1,c2;
    c1=97;
    c2=98;
    printf("c1=%c,c2=%c\n",c1,c2);
    printf("c1=%d,c2=%d\n",c1,c2);
    return 0;
}

2)若将程序改为c1=197,c2=198(分析:因为标准字符是在0-127之间)

  有符号字符型取值范围在-128——127之间,因为字符的代码不可能为负值,所以在存储字符时实际上只用到了0——127之间。在中文的操作系统下,ASCII代码为127以后的部分被作为中文字符处理,所以不会显示扩展字符。

  197的二进制为11000101,在整数处理中左边第一位为符号位,该二进制是59的二进制10111011,-59的二进制位为59的二进制按位取反加1为11000101,故输出-59。

3)改为int c1,c2;

实验结果与1)相同,但执行时间相对较短为0.679s

(5)scanf如何输入问题

实验程序如下:

# include<stdio.h>
int main()
{
    int a,b;
    float x,y;
    char c1,c2;
    scanf("a=%db=%d",&a,&b);
    scanf("%f%e",&x,&y);//%e数据的指数形式
    scanf("%c%c",&c1,&c2);
    printf("%d %d\n",a,b);
    printf("%f %e\n",x,y);
    printf("%c %c\n",c1,c2);
    return 0;
}

注意:指数的输入格式以及字符不能换行输入,不然会把空格赋给变量。

(6)译密码

#include<stdio.h>
int main()
{
    char c1='C',c2='h',c3='i',c4='n',c5='a';
    putchar(c1+4);
    putchar(c2+4);
    putchar(c3+4);
    putchar(c4+4);
    putchar(c5+4);
    printf("\n");
    printf("%c%c%c%c%c",c1+4,c2+4,c3+4,c4+4,c5+4);
    return 0;
}

结果输出为:Glmre

(7)圆

#include <stdio.h>
#define pi 3.14   //符号常量
int main()
{
    double r,h;
    double a,b,c,d,e;
    printf("请输入圆的半径和圆柱的高\n");
    scanf("%lf %lf",&r,&h);
    a=2*pi*r;
    printf("圆的周长为:%.2lf",a);
    b=pi*r*r;
    printf("圆的面积为:%.2lf",b);
    c=4*pi*r*r;
    printf("圆球的表面积为:%.2lf",c);
    d=4/3*pi*r*r;
    printf("圆球的体积为:%.2lf",d);
    e=h*pi*r*r;
    printf("圆柱的体积为:%.2lf",e);
    return 0;
}

(8)char数据类型问题

1)

# include<stdio.h>
int main()
{
    char c1,c2;                   //定义为字符型
    c1=getchar();
    c2=getchar();
    putchar(c1);
    putchar(' ');
    putchar(c2);
    putchar('\n');
    printf("%c %c",c1,c2);
    return 0;
}
# include<stdio.h>
int main()
{
    int c1,c2;                         //定义为整形
    c1=getchar();
    c2=getchar();
    putchar(c1);
    putchar(' ');
    putchar(c2);
    putchar('\n');
    printf("%c %c",c1,c2);
    return 0;
}

分析:可以定义为int或char两者皆可,字符型在计算机当中都是以ASCII代码转换为二进制进行处理的。定义为整形,getchar得到字符a将a的ASCII赋值给c1。

2)使用printf函数格式声明为%d。putchar只输出字符型。

3)在ASCII码范围内可以相互代替,0-127之间可互相代替。

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 编写一个程序,输入两个整数,求它们的和、差、积、商、余数。 ``` #include <stdio.h> int main() { int a, b; printf("请输入两个整数:\n"); scanf("%d%d", &a, &b); printf("%d + %d = %d\n", a, b, a + b); printf("%d - %d = %d\n", a, b, a - b); printf("%d * %d = %d\n", a, b, a * b); printf("%d / %d = %d\n", a, b, a / b); printf("%d %% %d = %d\n", a, b, a % b); return 0; } ``` 2. 输入圆半径,求圆的周长和面积。 ``` #include <stdio.h> #define PI 3.14159 int main() { double r, c, s; printf("请输入圆的半径:\n"); scanf("%lf", &r); c = 2 * PI * r; s = PI * r * r; printf("圆的周长为%.2lf,面积为%.2lf。\n", c, s); return 0; } ``` 3. 输入一个三位数,分离出它的百位、十位和个位,然后输出它们。 ``` #include <stdio.h> int main() { int n, b, s, g; printf("请输入一个三位数:\n"); scanf("%d", &n); b = n / 100; s = n % 100 / 10; g = n % 10; printf("%d的百位为%d,十位为%d,个位为%d。\n", n, b, s, g); return 0; } ``` 4. 输入一个字符,判断它是否为大写字母。 ``` #include <stdio.h> int main() { char ch; printf("请输入一个字符:\n"); scanf("%c", &ch); if (ch >= 'A' && ch <= 'Z') { printf("%c是大写字母。\n", ch); } else { printf("%c不是大写字母。\n", ch); } return 0; } ``` 5. 输入一个分数,输出它的等级。等级分为优、良、中、及格和不及格。 ``` #include <stdio.h> int main() { int score; printf("请输入分数:\n"); scanf("%d", &score); if (score >= 90 && score <= 100) { printf("优\n"); } else if (score >= 80 && score < 90) { printf("良\n"); } else if (score >= 70 && score < 80) { printf("中\n"); } else if (score >= 60 && score < 70) { printf("及格\n"); } else { printf("不及格\n"); } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值