c/c++从入门到入土(5)

开始时间2023-04-19 23:25:06

结束时间2023-04-20 00:44:28

前言:经过昨天的学习,想必大家对选择结构的了解还不够深刻。今天我来带大家进行选择结构实验练习,同样我会以编程四部曲的方式全方位解析每个题,打起精神,发车啦!

实验一 C选择结构程序设计

第一题 应用if语句解决分段函数问题

一.问题描述

有一函数功能描述如下,请应用if语句编写算法实现:

输入格式:
请在一行中给出1个实数x。

输出格式:
对每一组输入,在一行中输出分段函数y的值。

输入样例1:
0
输出样例1:
0.0
输入样例2:
2
输出样例2:
3.0
输入样例3:
12
输出样例3:
25.0
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

 二.设计思路

  对于这一个函数,根据自变量定义域,函数表达式不同。即对应多分支控制结构,以x的取值作为if内判断条件,函数表达式作为语句序列对y进行赋值,最后输出y的值。

三.流程图

 四.源代码

#include<stdio.h>
int main(){
    float x;
    scanf("%f",&x);
    if(x<=1)
    printf("%.1f",x);
    else if(x<10)
    printf("%.1f",2*x-1);
    else if(x>=10)
    printf("%.1f",3*x-11);
    return 0;
}

第二题 奖金计算问题

一.问题描述

企业发放的奖金根据利润提成。利润低于或等于100000元时,奖金可提10%;利润高于100000元,低于200000元时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%;200000到400000之间时,高于200000元的部分,可提成5%;400000到600000之间时高于400000元的部分,可提成3%;600000到1000000之间时,高于600000元的部分,可提成1.5%,高于1000000元时,超过1000000元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数。

输入格式:
输入在一行中给出当月利润值。

输出格式:
对输入的当月利润值,在一行中输出当月的奖金总额。

输入样例1:
210000
输出样例1:
prize=18000
输入样例2:
-10000
输出样例2:
prize=0
输入样例3:
1100000
输出样例3:
prize=40500
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二.设计思路

  这属于很简单的初中数学问题,有输入为利润。根据利润不同,所获奖金不同,以此做多分支控制结构,if的语句序列给奖金赋值,最后输出奖金。

三.流程图

 四.源代码

#include<stdio.h>
int main(){
    int lr,jj;
    scanf("%d",&lr);
    if(lr<=0)
        jj=0;
    else if(lr<=100000)
        jj=lr*0.1;
    else if(lr<=200000)
        jj=10000+(lr-100000)*0.075;
    else if(lr<=400000)
        jj=17500+(lr-200000)*0.05;
    else if(lr<=600000)
        jj=27500+(lr-400000)*0.03;
    else if(lr<=1000000)
        jj=33500+(lr-600000)*0.015;
    else if(lr>1000000)
        jj=39500+(lr-1000000)*0.01;
    printf("prize=%d",jj);
    return 0;
}

第三题 季节判断

一.问题描述

编写程序,输入年份和月份,判断该年是否是润年,并根据输入的月份判断是什么季节和该月有多少天?(提示:规定3~5月为春季,6~8月为夏季,9~11月为秋季,1、2和12月为冬季)。

输入格式:
输入在一行中给出年份year和月份month,以空格为间隔。

输出格式:
分三行输出,第一行输出是否为闰年,第二行输出季节,第三行输出当月天数。

输入样例1:
1992 2
输出样例1:
leap
winter
days=29
输入样例2:
1990 5
输出样例2:
not leap
spring
days=31
输入样例3:
1990 13
输出样例3:
error data
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二.设计思路

  首先有输入,为年份和月份。判断闰年的方式普通闰年是指公历年份是4的倍数的,且不是100的倍数,世纪闰年则必须是400的倍数,由此可做单分支控制结构判断闰年。接着根据输入月份采用多分支控制结构判断季度。最后用Switch语句输出天数。注意,因为有闰年元素,二月天数会因此改变。

三.流程图

 四.源代码

#include<stdio.h>
#include<math.h>
int main()
{
    int n,y;
    scanf("%d%d",&n,&y);
    if(n%4==0||n%400==0)
    {if(y<=12)
        printf("leap\n");
      if(y>12)
      {}
    }
    else {if(y<=12)
        printf("not leap\n");
      if(y>12)
      {}
          }
    if(y>=3&&y<=5)
    {
        printf("spring\n");
    }
     if(y>=6&&y<=8)
    {
        printf("summer\n");
    }
     if(y>=9&&y<=11)
    {
        printf("autumn\n");
    }
     if(y==1||y==2||y==12)
    {
        printf("winter\n");
    }
     if(n%4==0||n%400==0)
    {if(y==2)
    {
        printf("days=29\n");
    }
    
    }
switch(y){
    case 1:printf("days=31");break;
    case 3:printf("days=31");break;
    case 5:printf("days=31");break;
    case 7:printf("days=31");break;
    case 8:printf("days=31");break;
    case 10:printf("days=31");break;
    case 12:printf("days=31");break;
    
        case 4:printf("days=31");break;
        case 6:printf("days=31");break;
        case 9:printf("days=31");break;
        case 11:printf("days=31");break;}
    if(y>=13)
    {
        printf("error data");
    }
    return 0;
}

第四题 五位逆序数

一.问题描述

(谭浩强,《C程序设计(第四版)》,清华大学出版社:第四章,P113,第9题)
给一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③输出它的逆序数。

输入格式:
输入在一行中给出1个不多于5位的正整数。

输出格式:
分三行输出。第一行输出这是一个几位数。第二行按照从高到低的顺序输出各位数字,每位数字显示宽度为2位,右对齐。第三行输出逆序数。

输入样例1:
21345
输出样例1:
5
 2 1 3 4 5
54312
输入样例2:
0
输出样例2:
error data
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二.设计思路

  有输入一个不超过99999的正整数。输入时,首先输出这是个几位数,接着输出各位数字,再以反向输出一次 。根据数的范围,用多分支控制结构输出这是个几位数并留下标记。计算每一位上的数并赋值,通过Switch语句输出各位上的数字。逆序数是什么?比如12345的逆序数为54321,如何求逆序数,我这里用了一种特别的方法,加入循环结构,以样例21345举例,首先m=0,t为21345,第一步,m=m*10+t取余10,t进行除10运算,此时m=5,t=2134;第二步,m=m*10+t取余10,t进行除10运算,此时m=54,t=213,同理在t为0之前一直计算,t的21345会变成m的54312最后输出m。

三.流程图

 四.源代码

#include<stdio.h>
int main(){
    int w,q,b,s,g,t,place,m,f;
    scanf("%d",&t);
    if(t==0)
        printf("error data\n"),place=t;
    else if(t>0&&t<10)
        place=1,printf("%d\n",place);
    else if(t>=10&&t<100)
        place=2,printf("%d\n",place);
    else if(t>=100&&t<1000)
        place=3,printf("%d\n",place);
    else if(t>=1000&&t<10000)
        place=4,printf("%d\n",place);
    else if(t>=10000&&t<100000)
        place=5,printf("%d\n",place);
    w=t/10000;
    q=t/1000%10;
    b=t/100%10;
    s=t/10%10;
    g=t%10;
    switch(place)
    {
        case 5:printf(" %d %d %d %d %d\n",w,q,b,s,g);break;
        case 4:printf(" %d %d %d %d\n",q,b,s,g);break;
        case 3:printf(" %d %d %d\n",b,s,g);break;
        case 2:printf(" %d %d\n",s,g);break;
        case 1:printf(" %d\n",g);break;
        default:;
    }
    m=0; f=1;
         while (t!=0)
         {
                   m=m*10+t%10;
                   t/=10;
         }
         m=f*m;
        if(m>0){
         printf("%d\n",m);}
    return 0;
}

总结:选择结构能够解决大部分生活中的实际问题,但在第三题季节判断中会发现有明显的局限性,能够解决单一条件下的命令,若重复次数累加便显得繁琐,这时就要引入三大结构中的最后一环“循环结构” ,想必你更加期待明天的学习了吧!加油加油!

每日一mo:天赋何尝不是一种诅咒,当我害怕成功,我又怎么可能成功......