谭浩强C第三章顺序结构、第四章选择结构课后习题

本文分享了C语言实操中关于增长百分比、存款利息、房贷计算、密码加密、数学运算、选择结构等知识点的实现,包括类型匹配、逻辑判断和函数应用,适合编程初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的实操,与课本过程不太一样,自己写的,结果是对的,仅供练习参考。持续更。

我用的是codeblocks(cb)17.12。

第三章

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

1.增长百分比

上面定义的类型要和输入类型一致,否则输出结果会错误

int main()
{
    float r,n,p;
    printf("请输入年份和当年的增长率\n");
    scanf("%f%f",&n,&r);      //上面定义的类型要和这里输入类型一致,否则输出结果会错误
    r=0.07;n=10;
    p=pow(1+r,n);
    printf("p=%f\n",p);
    return 0;
}

2.存款利息

int main()
{
    float p,p1,p2,p3,p5,p0,r1=0.015,r2=0.021,r3=0.0275,r5=0.03,r0=0.0035;
    char plan;
    printf("请输入本金和选择的方案:\n");
    scanf("%f,%c",&p,&plan);  //忘记地址符号,最好写一起
    switch(plan)
    {
       case 'a':p1=p*(1+5*r5);printf("%f",p1);break;
       case 'b':p2=p*(1+2*r2)*(1+3*p3);printf("%f",p2);break;
       case 'c':p3=p*(1+3*r3)*(1+2*p2);printf("%f",p3);break;
       case 'd':p5=p*pow((1+p*r1),5);printf("%f",p5);break;
       case 'e':p0=p*pow(1+r0/4,4*5);printf("%f",p0);break;
       default:printf("输入错误");
    }
    return 0;
}

3.住房贷款

用log10表示取对数10

int main()
{
    float m,d=300000,p=6000,r=0.01;
    m=log10(p/(p-d*r))/log10(1+r);   //书上好像有问题。对数10是这样表示的log10不是书上的lg10
    printf("m=%6.2f\n",m);
    return 0;
}

6.翻译密码

getchar()里面可以放四种字符:abc123、转义字符、八进制、十进制。

int main(){
char c1,c2,c3,c4,c5;
printf("请输入一个五个字母的单词:\n");
c1=getchar();c2=getchar();c3=getchar();c4=getchar();c5=getchar();  //只能放字符(abc123'\n''\t'等)
c1=c1+4;c2=c2+4;c3=c3+4;c5=c5+4;
printf("对应的密码是:\n");
putchar(c1);putchar(c2);putchar(c3);putchar(c4);putchar(c5);putchar('\n');
printf("对应密码是:\n%c%c%c%c%c",c1,c2,c3,c4,c5);
}

 7. 求球的面积体积及圆柱的体积

注意pi此类值要定义,在整数类型值相比时最好带.0转化为float型。

int main()
{
    float r,h,c,s,ss,sv,shv;
    float pi=3.1415926;  //注意pi也要定义
    printf("请输入圆的半径和圆柱的高:\n");
    scanf("%f %f",&r,&h);
    c=2*pi*r; //圆周长
    s=pi*r*r;   //圆面积
    ss=4*pi*r*r;  //圆球表面积
    sv=3.0/4.0*pi*r*r*r;  //圆球体积 四分之三表示方式前面最好加上.0
    shv=pi*r*r*h;  //圆柱体积
    printf("圆周长为%6.2f\n",c);
    printf("圆面积为%6.2f\n",s);
    printf("圆球表面积为%6.2f\n",ss);
    printf("圆球体积为%6.2f\n",sv);
    printf("圆柱体积为%6.2f\n",shv);
}

 8.putchar与printf在字符上的区别联系

整型变量(2或4字节)在可输出字符的范围内(ASCII码为0~127)是可以与字符变量(一个字节)互相转换的。

int main(){
    char c1,c2;  //c1c2定义成字符型和整数型都可以
    c1=getchar();c2=getchar();
    putchar(c1);putchar(c2);putchar('\n');
    printf("%c%c",c1,c2);
    printf("输出对应的ASCII码:%d %d",c1,c2);  //输出ascii码应该用printf
    return 0;                //整型变量2/4在可输出字符的范围内(ASCII码为0~127)是可以与字符变量1互相转换的
}

如果int(2或4字节)转char(1字节)再转int时将只将其存储单元中最后一个字节赋给c1。

如果是unsigned char类型可以存放0~255的整数;

如果是signed char类型可以存放-128~127的整数;

第四章 选择结构

4.输出其中最大的数

scanf后面的地址符号总是忘记,注意内嵌if的结构。三目运算符比较三个数的大小。

int main()  //第一种if方法
{
    int a,b,c;
    printf("请输入三个整数:");
    scanf("%d%d%d",&a,&b,&c);  //别忘地址符号
    if (a>b)
        if (c>a) printf("%d",c);    //注意内嵌if的结构
        else printf("%d",a);
    else
        if (c>b) printf("%d",c);
        else printf("%d",b);
    return 0;
}
int main()   //第二种三目运算符比较大小方法
{
    int a,b,c,max;
    printf("请输入三个整数:");
    scanf("%d%d%d",&a,&b,&c);
    max = a>b?(a>c?a:c):(b>c?b:c);
    printf("%d",max);
}

 5. 输入正数并判断,是则平方根并取整

int main()
{
    int a;
    printf("请输入一个小于1000的正数:");
    scanf("%d",&a);
    if (a<=0||a>=1000)
        printf("输入的数字不合法请重新输入!");
    else {a=sqrt(a);printf("%d",a);}
}

6.分段函数的值

不能忘记乘法要加*不能直接2x,(1<=x<10)C语言中不能这样写要写成逻辑运算符。

int main()
{
    float x,y;
    printf("请输入x的值:");
    scanf("%f",&x);
    if (x<1) printf("%.2f",y=x);
    else if (1<=x&&x<10) printf("%.2f",y=2*x-1); //(1<=x<10)C语言中不能这样写
    else printf("%.2f",y=3*x-11);  //(y=2x-1)没有乘号是错误的
    return 0;
}

8.分段输出成绩对应的等级

else后面什么都不加。

int main()
{
    float a;
    printf("请输入分数:");
    scanf("%f",&a);
    if (a>=90) printf("A");
    else if (a>=80&&a<90) printf("B");
    else if (a>=70&&a<80) printf("C");
    else if (a>=60&&a<70) printf("D");
    else printf("E");   //else后面什么都不加
    return 0;
}

9.输入一个数字求出它是几位数,并输出每一位数字,和按逆序输出各位数字。

int main()
{
    int n,a1,a2,a3,a4,a5;
    printf("请输入一个不多于五位的正整数:");
    scanf("%d",&n);
    a5=n/10000;
    a4=(n-a5*10000)/1000;
    a3=(n-a4*1000-a5*10000)/100;
    a2=(n-a3*100-a4*1000-a5*10000)/10;
    a1=(n-a2*10-a3*100-a4*1000-a5*10000);
    if ((n/10000)!=0)
        printf("输入的正整数为5位数。分别是%d,%d,%d,%d,%d。逆序数为:%d%d%d%d%d。",a5,a4,a3,a2,a1,a1,a2,a3,a4,a5);
    else if ((n/1000)!=0)
        printf("输入的正整数为4位数。分别是%d,%d,%d,%d。逆序数为:%d%d%d%d。",a4,a3,a2,a1,a1,a2,a3,a4);
    else if ((n/100)!=0)
        printf("输入的正整数为3位数。分别是%d,%d,%d。逆序数为:%d%d%d。",a3,a2,a1,a1,a2,a3);
    else if ((n/10)!=0)
        printf("输入的正整数为2位数。分别是%d,%d。逆序数为:%d%d。",a2,a1,a1,a2);
    else
        printf("输入的正整数为1位数。分别是%d。逆序数为:%d。",a1,a1);
    return 0;
}

 10根据利润提成

int main()
{
    float bonus,profit;
    printf("请输入当月的利润:");
    scanf("%f",&profit);
    if (profit<0)
        printf("输入不合法请重新输入!");
    else if (profit<=100000)
        bonus=profit*0.1;
    else if (profit>100000&&profit<=200000)
        bonus=100000*0.1+(profit-100000)*0.075;
    else if (profit>200000&&profit<=400000)
        bonus=100000*0.1+100000*0.075+(profit-200000)*0.05;
    else if (profit>400000&&profit<=600000)
        bonus=100000*0.1+100000*0.075+200000*0.05+(profit-400000)*0.03;
    else if (profit>600000&&profit<=1000000)
        bonus=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(profit-600000)*0.015;
    else
        bonus=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(profit-1000000)*0.01;
    printf("应发奖金数为%.2f",bonus);
    return 0;
}

用switch写用bonus/10000来判断,case0-case10。

11.输入四个整数按由大到小的顺序输出。用了数组。

int main()
{
    int a[4]= {0},t,i,j;
    printf("请输入四个整数:");
    scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
    for (i=0; i<4; i++)          //for用;分隔不用,!
    {
        for (j=i+1; j<4; j++)
        {
            if (a[i]>a[j])
                t=a[i],a[i]=a[j],a[j]=t;   //注意
            else continue;
        }
    }

    printf("按由小到大排列为:%d%d%d%d",a[0],a[1],a[2],a[3]);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值