#C语言——刷题攻略:牛客编程入门训练(八):分支控制(二)

🌟菜鸟主页:@晨非辰的主页

👀学习专栏:《C语言刷题合集》

💪学习阶段:C语言方向初学者

名言欣赏:"代码行数决定你的下限,算法思维决定你的上限。"


目录

[1. BC58 健康评估](#1. BC58 健康评估)

[2. BC59 小乐乐找最大数](#2. BC59 小乐乐找最大数)

[3. 牛牛的二三七整除](#3. 牛牛的二三七整除)

[4. 统计数据正负个数](#4. 统计数据正负个数)

[5. BC63 网购](#5. BC63 网购)

[6. BC64 牛牛的快递](#6. BC64 牛牛的快递)

[7. BC65 计算商品打折结算金额](#7. BC65 计算商品打折结算金额)


前言:在学习编程语言的同时,千万别忘了刷刷题来巩固一下学到的知识,对于牛客网_编程入门系列,小子会持续更新分享刷题过程,其中包括一些基础板块的题目,本次将呈现的分支控制章节,共7道题。题目大部分较简单,单独几个需要一点小思考,大家开开胃~~

~~注意部分标题括号内代表对题目涉及到的知识进行说明!


1. BC58 健康评估

题目链接:牛客网_BC58 健康评估_简单

cpp 复制代码
#include <stdio.h>

int main() 
{
    float height = 0, weight = 0;
    scanf("%f%f", &weight, &height);
    float BMI =  weight / (height * height);
    if(BMI >= 18.5 && BMI <= 23.9 )
    {
        printf("Normal\n");
    }
    else 
    {
        printf("Abnormal\n");
    }
    return 0;
}

解题思路------

--本题情况也十分简单,只需要将数值按要求进行处理,在根据分支条件进行判断即可。


2. BC59 小乐乐找最大数

题目链接:牛客网_BC59 小乐乐找最大数_入门

cpp 复制代码
#include <stdio.h>

int main() 
{
   int arr[4] = {0};
   //循环输入
   int i;
   for(i = 0; i < 4; i++)
   {
    scanf("%d", &arr[i]);
   }
    //假定第一元素最大
    int max = arr[0];

    //循环比较,当后一位比前一位大,就替换
    int count;//循环次数
    for(count = 1; count < 4; count++)//只需比较3回
    {
        if(arr[count] > max)
        {
            max = arr[count];
        }
    }
    printf("%d", max);
    return 0;
}

解题思路------

--本题在之前的练习有过涉猎,思路都是一样的,小子嘴遁~~


3. 牛牛的二三七整除

题目链接:牛客网_BC61 牛牛的二三七整除_中等

cpp 复制代码
#include <stdio.h>

int main() 
{
    int a;
    scanf("%d", &a);
    int num[3] = {2, 3, 7};
    int flag = 0;//0代表一个都不行
    for(int i = 0; i < 3; i++)
    {
        if(a % num[i] == 0)
    {
        printf("%d ", num[i]);
        flag = 1;//代表至少有一个
    }
    }
    if(flag == 0)
    {
        printf("n ");
    }
    return 0;
}

解题思路------

--本题的难点在于如何在循环判断外,进行对所有数都不能满足条件情况的的判断;这个时候,我们就可以先树立一个旗帜 flag 变量,比如 flag = 1 代表至少有一个数满足条件,相反, flag = 0 代表所有数都不能满条件;虽然这种变量的利用比较类似于布尔类型,但是这样兼容性好,也更容易想到。


4. 统计数据正负个数

题目链接:牛客网_BC62 统计数据正负个数_简单

cpp 复制代码
int main()
{
    int num[10] = { 0 };
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &num[i]);
    }
    int positive = 0;//定义正数
    int negative = 0;//定义负数
    i = 0;
    while (i < 10)
    {
        if (num[i] > 0)
        {
            positive++;
            i++;
        }
        else if (num[i] < 0)
        {
            negative++;
            i++;
        }
        else
        {
            i++;
        }
    }
    printf("positive:%d\nnegative:%d", positive, negative);
    return 0;
}

解题思路------

--本题代码结构简单,只需要分出大于0、小于0以及等于0的情况即可。


**5.**BC63 网购

题目链接:牛客网_BC63 网购_简单

cpp 复制代码
int main()
{
    float price = 0.0;
    int m = 0;
    int d = 0;
    int n = 0;
    scanf("%f %d %d %d", &price, &m, &d, &n);

    if ((m == 11 && d == 11))
    {
        //有优惠卷
        if (n == 1)
        {
            price = price * 0.7 - 50;
        }
        else
        {
            price = price * 0.7;
        }
    }
    else
    {
        if (n == 1)
        {
            price = price * 0.8 - 50;
        }
        else
        {
            price = price * 0.8;
        }
    }
    printf("%.2f\n", price);
    return 0;
}

解题思路------

--本题分支情况清晰,但是有一点要注意,输出描述已经给出:不要希望商家倒贴钱,也就是打折加优惠,价钱为负数时按0算。


6. BC64 牛牛的快递

题目链接:牛客网_BC64 牛牛的快递_中等

cpp 复制代码
int main()
{
    float kg = 0.0;
    char Urgent = 0;//加急与否
    int pay = 0;
    scanf("%f %c", &kg, &Urgent);
    //当重量不足1kg
    if (kg <= 1.0)
    {
        if (Urgent == 'y')
        {
            pay = 25;
        }
        else
        {
            pay = 20;
        }
    }
    //超过1kg
    else
    {
        float beyond = kg - 1.0;//求出超过kg数,包括小数
        //判断是否有小数部分,小数部分按1kg算
        if (beyond < 1.0 || (int)beyond != beyond)
        {
            beyond += 1;
        }
        if (Urgent == 'y')
        {
            pay = 25 + beyond * 1;
        }
        else
        {
            pay = 20 + beyond * 1;
        }
    }
    printf("%d\n", pay);
    return 0;
}

解题思路------

--本题难点在于如何判断输入的kg数(>1kg)是否有小数部分,这时就可以使用强制转换成int 型:当是整数的时候,int、float 的主要数值相同,反之 int 型 < float 型。


7. BC65 计算商品打折结算金额

题目链接:牛客网_BC65 计算商品打折结算金额_简单

cpp 复制代码
#include <stdio.h>

int main() 
{
    int price = 0;//实际价格
    scanf("%d", &price);
    float pay = 0;//实付价格
    if(price >= 5000)
    {
        pay = price * 0.6;
    }
    else if(price >= 2000)
    {
        pay = price * 0.7;
    }
    else if(price >= 500)
    {
        pay = price * 0.8;
    }
    else 
    {
        pay = price * 0.9;
    }
    printf("%.1f\n", pay);
    return 0;
}

解题思路------

--本题分支结构比较清晰,为了书写简便,从后往前进行判断。

相关刷题系列回顾 :

#C语言------刷题攻略:牛客编程入门训练(六):运算(三)-- 涉及 辗转相除法求最大公约数

#C语言------刷题攻略:牛客编程入门训练(七):分支控制(一)-- 涉及 %c前加空格:忽略起首的空白字符

结语:本篇文章就到此结束了,本文主要是练习有关分支控制的题目,后续的题目练习难度会慢慢上来,但总体来说不会太难,喜欢的朋友们,一起来学习吧!欢迎三连~


相关推荐
歪歪1004 分钟前
Vue原理与高级开发技巧详解
开发语言·前端·javascript·vue.js·前端框架·集成学习
智者知已应修善业6 分钟前
【51单片机数码管循环显示3位数字】2022-10-26
c语言·经验分享·笔记·嵌入式硬件·算法·51单片机
紫金修道8 分钟前
python安装部署rknn-toolkit2(ModuleNotFoundError: No module named ‘rknn_toolkit2‘)
开发语言·python
菜菜子爱学习29 分钟前
Nginx学习笔记(三)——在 CentOS 7 中配置阿里云镜像源
笔记·学习·nginx·centos·运维开发·vmware
EndingCoder1 小时前
Next.js API 路由:构建后端端点
开发语言·前端·javascript·ecmascript·全栈·next.js·api路由
2401_858286111 小时前
CD64.【C++ Dev】多态(3): 反汇编剖析单继承下的虚函数表
开发语言·c++·算法·继承·面向对象·虚函数·反汇编
草莓熊Lotso2 小时前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day1
c语言·经验分享·强化训练
pzzqq2 小时前
buildroot编译qt 5.9.8 arm64版本踩坑
开发语言·qt
还债大湿兄2 小时前
基于Qt Property Browser的通用属性系统:Any类与向量/颜色属性的完美结合
开发语言·qt
William一直在路上3 小时前
10种经典学习方法的指令化应用
人工智能·chatgpt·学习方法