#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前加空格:忽略起首的空白字符

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


相关推荐
TeleostNaCl3 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
charlie1145141913 小时前
CSS笔记4:CSS:列表、边框、表格、背景、鼠标与常用长度单位
css·笔记·学习·css3·教程
QX_hao4 小时前
【Go】--反射(reflect)的使用
开发语言·后端·golang
inferno4 小时前
Maven基础(二)
java·开发语言·maven
我是李武涯4 小时前
从`std::mutex`到`std::lock_guard`与`std::unique_lock`的演进之路
开发语言·c++
yuuki2332334 小时前
【数据结构】用顺序表实现通讯录
c语言·数据结构·后端
史不了5 小时前
静态交叉编译rust程序
开发语言·后端·rust
ad钙奶长高高5 小时前
【C语言】扫雷游戏详解
c语言
读研的武5 小时前
DashGo零基础入门 纯Python的管理系统搭建
开发语言·python