【C语言】在线OJ题 BC7-BC52-牛客网编程初学者入门训练


BC7 缩短二进制

描述
我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数的表达特点。请输出十进制整数1234对应的八进制和十六进制。

输入描述:

输出描述:
十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。
备注:
printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符==“#”控制前导显示==

题目链接

#include <stdio.h>
 
int main()
{
    printf("0%o 0X%X", 1234, 1234);
    return 0;
}
printf("%#o %#0X\n", 1234, 1234);

012 - 八进制 12
0X12 - 16进制 18
打印:八进制%o,十六进制%X

打印格式

%c - 字符
%hd - 短整型
%d - 整形
%s - 字符串
%f - 单精度浮点型
%lf - 双精度浮点型
%p - 地址


BC8 十六进制转十进制

描述
BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。

输入描述:

输出描述:
十六进制整数ABCDEF对应的十进制整数,所占域宽为15。
备注:
printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数。

题目链接

#include <stdio.h>

int main()
{
    //15 - 数值 - 十进制的方式
    //二进制:1111
    //八进制:017
    //十六进制:0xf
    printf("%15d", 0xABCDEF);
    
    return 0;
}

BC9 printf的返回值

描述
KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?
输入描述:

输出描述:
包括两行:
第一行为“Hello world!”
第二行为printf(“Hello world!”)调用后的返回值。

题目链接

#include <stdio.h>
/*
int main()
{
    //printf函数返回的是:打印在屏幕上的字符的个数
    int ret = printf("Hello world!");
    printf("\n");
    printf("%d", ret);
    
    return 0;
}
*/
/*
int main()
{
    int ret = printf("Hello world!");
    printf("\n%d", ret);
    return 0;
}
*/
int main()
{
    printf("\n%d\n", printf("Hello world!"));
    return 0;
}

BC10 成绩输入输出

描述
输入3科成绩,然后把三科成绩输出,成绩为整数形式。
输入描述:
一行,3科成绩,用空格分隔,范围(0~100)。
输出描述:
一行,把3科成绩显示出来,输出格式详见输出样例。
示例1
输入:
60 80 90
输出:
score1=60,score2=80,score3=90

题目链接

#include <stdio.h>

int main()
{
    int s1 = 0;
    int s2 = 0;
    int s3 = 0;

    scanf("%d %d %d", &s1, &s2, &s3);
    printf("score1=%d,score2=%d,score3=%d", s1, s2, s3);
    
    return 0;
}

BC11 学生基本信息输入输出

依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩。
输入描述:
学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。
输出描述:
学号,3科成绩,输出格式详见输出样例。
示例1
输入:
17140216;80.845,90.55,100.00

输出:
The each subject score of No. 17140216 is 80.85, 90.55, 100.00.

题目链接

#include <stdio.h>

int main()
{
    int id = 0;
    float c_socre = 0.0;
    float math_socre = 0.0;
    float eng_socre = 0.0;
    
    scanf("%d;%f,%f,%f", &id, &c_socre, &math_socre, &eng_socre);
    printf("The each subject score of  No. %d is %.2f, %.2f, %.2f.", id, c_socre, math_socre, eng_socre);
    
    return 0;
}

BC12 字符金字塔

描述
输入一个字符,用它构造一个三角形金字塔。
输入描述:
输入只有一行,一个字符。
输出描述:
该字符构成的三角形金字塔。
示例1
输入:
1
输出:
1
1 1
1 1 1
1 1 1 1
1 1 1 1 1

题目链接

#include <stdio.h>

int main()
{
    char ch;
    scanf("%c", &ch);
    int i = 0;
    for(i=0; i<5; i++)
    {
        int j = 0;
        for(j=0; j<5-1-i; j++)
        {
            printf(" ");
        }
        for(j=0; j<=i; j++)
        {
            printf("%c ", ch);
        }
        printf("\n");
    }
    
    return 0;
}

BC13 ASCII码

描述
BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,转换以下ASCII码为对应字符并输出他们。

73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33

输入描述:

输出描述:
转换输出题目中给出的所有ASCII到对应的字符。

题目链接

#include <stdio.h>

int main()
{
    char arr[] = {73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116, 33};
    
    int i = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    for(i=0; i<sz; i++)
    {
        printf("%c", arr[i]);
    }
    
    return 0;
}

BC14 出生日期输入输出

描述
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。
输入描述:
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。
输出描述:
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。
示例1
输入:
20130225
输出:
year=2013
month=02
date=25
备注:
通过scanf函数的==%m格式控制可以指定输入域宽==,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。

题目链接

#include <stdio.h>
/*
int main()
{
    int y = 0;
    scanf("%d", &y);
    
    int year = y / 10000;
    int month = y % 10000 / 100;
    int date = y % 100;
    
    printf("year=%d\n", year);
    printf("month=%02d\n", month);
    printf("date=%02d\n", date);
    
    return 0;
}
*/

int main()
{
    int year = 0;
    int month = 0;
    int date = 0;
    //按公式输入
    scanf("%4d%2d%2d", &year, &month, &date);
    
    printf("year=%4d\n", year);
    printf("month=%02d\n", month);
    printf("date=%02d\n", date);
    
    return 0;
}

BC15 按照格式输入并交换输出

描述
输入两个整数,范围-231~231-1,交换两个数并输出。

输入描述:
输入只有一行,按照格式输入两个整数,范围,中间用“,”分隔。
输出描述:
把两个整数按格式输出,中间用“,”分隔。
示例1
输入:
a=1,b=2
输出:
a=2,b=1

题目链接

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    scanf("a=%d,b=%d", &a, &b);
    c = a;
    a = b;
    b = c;
    printf("a=%d,b=%d\n", a, b);
    
    return 0;
}

BC16 字符转ASCII码

描述
BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,输入一个字符,输出该字符相应的ASCII码。
输入描述:
一行,一个字符。
输出描述:
一行,输出输入字符对应的ASCII码。
示例1
输入:
c
输出:
99

题目链接

#include <stdio.h>

int main()
{
    char ch = 0;
    //scanf("%c", &ch);
    ch = getchar();
    printf("%d\n", ch);
    return 0;
}

BC17 计算表达式的值

描述
请计算表达式“(-8+22)×a-10+c÷2”,其中,a = 40,c = 212。

输入描述:
无。
输出描述:
(-8+22)×a-10+c÷2计算之后的结果,为一个整数。

题目链接

#include <stdio.h>

int main()
{
    int a = 40;
    int c = 212;
    printf("%d\n", (-8 + 22) * a - 10 + c / 2);
    
    return 0;
}

BC18 计算带余除法

描述
给定两个整数a和b (-10,000 < a,b < 10,000),计算a除以b的整数商和余数。
输入描述:
一行,包括两个整数a和b,依次为被除数和除数(不为零),中间用空格隔开。
输出描述:
一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。
示例1
输入:
15 2
输出:
7 1

题目链接

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    printf("%d %d\n", a/b, a%b);
    
    return 0;
}

BC19 反向输出一个四位数

描述
将一个四位数,反向输出。

输入描述:
一行,输入一个整数n(1000 <= n <= 9999)。
输出描述:
针对每组输入,反向输出对应四位数。
示例1
输入:
1234
输出:
4321

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    
    while(n)
    {
        printf("%d", n % 10);
        n /= 10;
    }
    
    return 0;
}

BC20 kiki算数

描述
问题:KiKi今年5岁了,已经能够认识100以内的非负整数,并且并且能够进行 100 以内的非负整数的加法计算。不过,BoBo老师发现KiKi在进行大于等于100的正整数的计算时,规则如下:

1.只保留该数的最后两位,例如:对KiKi来说1234等价于34;

2.如果计算结果大于等于 100, 那么KIKI也仅保留计算结果的最后两位,如果此两位中十位为0,则只保留个位。

例如:45+80 = 25

要求给定非负整数 a和 b,模拟KiKi的运算规则计算出 a+b 的值。

输入描述:
一行,输入两个非负整数a和b,用一个空格分隔。(0 <= a,b<= 231-1)。
输出描述:
针对每组输入,输出按照KiKi的运算规则计算出 a+b 的值。
示例1
输入:
45 80
输出:
25

题目链接

#include <stdio.h>
/*
int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    int c = a + b;
    if(c/10%10 == 0)
    {
        if(c%10==0)
        {
            printf("0");
        }
        else
        {
            printf("%d", c%10);
        }
    }
    else
        printf("%d%d", c/10%10, c%10);
    
    return 0;
}
*/

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    int sum = (a+b)%100;
    printf("%d\n", sum);
    return 0;
}

BC21 浮点数的个位数字

描述
给定一个浮点数,要求得到该浮点数的个位数。

输入描述:
一行,包括一个浮点数。
输出描述:
一行,包含一个整数,为输入浮点数对应的个位数。
示例1
输入:
13.141
输出:
3

题目链接

#include <stdio.h>

int main()
{
    float n = 0;
    scanf("%f", &n);
    printf("%d", (int)n % 10);
    
    return 0;
}

BC22 你能活多少秒

描述
问题:一年约有3.156×107s,要求输入您的年龄,显示该年龄合多少秒。

输入描述:
一行,包括一个整数age(0<age<=200)。
输出描述:
一行,包含一个整数,输出年龄对应的秒数。
示例1
输入:
20
输出:
631200000

题目链接

#include <stdio.h>

int main()
{
    int age = 0;
    
    scanf("%d", &age);
    
    long long second = age*3.156e7;
    
    printf("%lld", second);
    
    return 0;
}

3.156e7 --> 3.156乘以10的7次方


BC23 时间转换

描述
给定秒数seconds (0< seconds < 100,000,000),把秒转化成小时、分钟和秒。

输入描述:
一行,包括一个整数,即给定的秒数。
输出描述:
一行,包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开。
示例1
输入:
3661
输出:
1 1 1

题目链接

#include <stdio.h>
/*
int main()
{
    int seconds = 0;
    scanf("%d", &seconds);
    int h = seconds/3600;
    int m = seconds%3600/60;
    int s = seconds%3600%60;
    printf("%d %d %d", h, m, s);
    return 0;
}
*/

int main()
{
    int seconds = 0;
    int h = 0;
    int m = 0;
    int s = 0;
    scanf("%d", &seconds);
    
    h = seconds/60/60;
    m = seconds/60%60;
    s = seconds%60;
    
    printf("%d %d %d\n", h, m, s);
    
    return 0;
}

BC24 总成绩和平均分计算

描述
依次输入一个学生的3科成绩,在屏幕上输出该学生的总成绩以及平均成绩。
输入描述:
一行,3科成绩,成绩之间用一个空格隔开。
输出描述:
一行,总成绩和平均成绩(小数点后保留两位),用一个空格隔开。
示例1
输入:
79.5 80.0 98.0
输出:
257.50 85.83

题目链接

#include <stdio.h>

int main()
{
	double socre = 0.0;
    double sum = 0.0;
    int i = 0;
    for(i=0; i<3; i++)
    {
        scanf("%lf", &socre);
        sum += socre;
    }
	printf("%.2lf %.2lf", sum, sum/3);
	return 0;
}

/*
int main()
{
	double socre[3] = { 0 };
	scanf("%lf %lf %lf", &socre[0], &socre[1], &socre[2]);
	double sum = socre[0] + socre[1] + socre[2];
	double avg = sum / 3.0;
	printf("%.2lf %.2lf", sum, avg);

	return 0;
}
*/

/*
int main()
{
    float m,c,e;
    scanf("%f %f %f", &m, &c, &e);
    printf("%.2f %.2f", m+c+e, (m+c+e)/3);
    
    return 0;
}
*/

BC25 计算体重指数

描述
问题:计算BMI指数(身体质量指数)。BMI指数(即身体质量指数,简称体质指数又称体重,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。主要用于统计用途,当我们需要比较及分析一个人的体重对于不同高度的人所带来的健康影响时,BMI值是一个中立而可靠的指标。

输入描述:
一行,两个整数,分别表示体重(公斤),身高(厘米),中间用一个空格分隔。
输出描述:
一行,BMI指数(保留两位小数)。
示例1
输入:
70 170
输出:
24.22

题目链接

#include <stdio.h>

int main()
{
    int weight = 0;
    int high = 0;
    double bmi = 0.0;
    scanf("%d %d", &weight, &high);
    
    bmi = weight/((high/100.0)*(high/100.0));
    
    printf("%.2lf\n", bmi);
    
    return 0;
}

BC26 计算三角形的周长和面积

描述
根据给出的三角形3条边a, b, c(0 < a, b, c < 100,000),计算三角形的周长和面积。
输入描述:
一行,三角形3条边(能构成三角形),中间用一个空格隔开。
输出描述:
一行,三角形周长和面积(保留两位小数),中间用一个空格隔开,输出具体格式详见输出样例。
示例1
输入:
3 3 3
输出:
circumference=9.00 area=3.90

题目链接

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

int main()
{
    double a = 0.0;
    double b = 0.0;
    double c = 0.0;
    scanf("%lf %lf %lf", &a, &b, &c);
    
    
    double circumference = a+b+c;
    double p = circumference/2;
    double area = sqrt(p*(p-a)*(p-b)*(p-c));
    
    printf("circumference=%.2lf area=%.2lf\n", circumference, area);

    return 0;
}

BC27 计算球体的体积

描述
给定一个球体的半径,计算其体积。其中球体体积公式为 V = 4/3*πr3,其中 π= 3.1415926。
输入描述:
一行,用浮点数表示的球体的半径。
输出描述:
一行,球体的体积,小数点后保留3位。
示例1
输入:
3.0
输出:
113.097

题目链接

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

#define pi 3.1415926
int main()
{
    double r = 0.0;
    double v = 0.0;
    scanf("%lf", &r);
    
    v = 4.0/3*pi*(pow(r, 3));
    printf("%.3lf", v);
    
    return 0;
}

BC28 大小写转换

描述
实现字母的大小写转换。多组输入输出。
输入描述:
多组输入,每一行输入大写字母。
输出描述:
针对每组输入输出对应的小写字母。
示例1
输入:
A
B
输出:
a
b

题目链接

#include <stdio.h>

int main()
{
    int ch = 0;
    while((ch=getchar()) != EOF)
    {
        //putchar(ch+32);
        //printf("\n");
        printf("%c\n", ch+32);
        getchar(); //读取\n
    }
    
    return 0;
}

BC29 2的n次方计算

描述
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。

输入描述:
多组输入,每一行输入整数n(0 <= n < 31)。
输出描述:
针对每组输入输出对应的2的n次方的结果。
示例1
输入:
2
10
输出:
4
1024

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    while((scanf("%d", &n) != EOF))
    {
            printf("%d\n", 1<<n);
    }
    
    return 0;
}

BC30 KiKi和酸奶

描述
BoBo买了一箱酸奶,里面有n盒未打开的酸奶,KiKi喜欢喝酸奶,第一时间发现了酸奶。KiKi每h分钟能喝光一盒酸奶,并且KiKi在喝光一盒酸奶之前不会喝另一个,那么经过m分钟后还有多少盒未打开的酸奶?

输入描述:
多组输入,每组输入仅一行,包括n,h和m(均为整数)。输入数据保证m <= n * h。
输出描述:
针对每组输入,输出也仅一行,剩下的未打开的酸奶盒数。
示例1
输入:
8 5 16
输出:
4

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    int h = 0;
    int m = 0;
    while((scanf("%d %d %d", &n, &h, &m)) != EOF)
    {
        if(m%h)
        {
            printf("%d\n", n - m/h -1);
        }
        else
        {
            printf("%d\n", n-m/h);
        }
    }
    
    return 0;
}

BC31 发布信息

描述
你的手机丢了,在屏幕上输出信息告诉大家。
输入描述:

输出描述:
I lost my cellphone!

题目链接

#include <stdio.h>

int main()
{
    printf("I lost my cellphone!");
    
    return 0;
}

BC32 输出学生信息

描述
学生信息管理系统是学校教学管理的重要工具,现有一名学生基本信息如下:姓名-Jack,年龄-18,性别-Man,请按照输出样例的格式输出该学生的信息。
输入描述:

输出描述:
输出分为三行,分别为标题行,分隔行,信息行。
第一行,标题行,每个标题之间间隔4个空格。
第二行,分隔行,一共21个减号"-"。
第三行,信息行,每列输出信息和标题首字母对齐。输出样例如下:
Name Age Gender
---------------------
Jack 18 man

题目链接

#include <stdio.h>

int main()
{
    printf("Name    Age    Gender\n");
    printf("---------------------\n");
    printf("Jack    18     man\n");
    
    return 0;
}

BC33 计算平均成绩

描述
从键盘输入5个学生的成绩(整数),求他们的平均成绩(浮点数,保留一位小数)。

输入描述:
一行,连续输入5个整数(范围0~100),用空格分隔。
输出描述:
一行,输出5个数的平均数(保留一位小数)。
示例1
输入:
75 80 43 67 96
输出:
72.2

题目链接

#include <stdio.h>

int main()
{
    double price = 0.0;
    int mouth = 0;
    int day = 0;
    int flag1 = 0;
    int flag2 = 0;
    double discount = 1.0;
    double last = 0.0;
    
    scanf("%lf %d %d %d", &price, &mouth, &day, &flag1);
    
    if (mouth == 11 && day  == 11)
    {
        discount = 0.7;
        if(flag1 == 1)
            flag2 = flag1;
    }
    else if (mouth == 12 && day == 12)
    {
        discount = 0.8;
        if(flag1 == 1)
            flag2 = flag1;
    }
    
    last = price * discount-flag2 * 50;
    
    if (last < 0.0)
        printf("%.2lf", 0.0);
    else
        printf("%.2lf", last);
    
    return 0;
}

/*#include <stdio.h>

int main()
{
    double price = 0.0;
    int month = 0;
    int day = 0;
    int flag = 0; //是否有优惠券
    double cut = 1.0; //折扣
    double last = 0.0;

    scanf("%lf %d %d %d", &price, &month, &day, &flag);
    if (month == 11 && day == 11)
    {
        cut = 0.7;
    }
    else if (month == 12 && day == 12)
    {
        cut = 0.8;
    }
    
    last = price * cut - flag*50;
    
    if (last < 0.0)
        printf("%.2lf\n", 0.0);
    else
        printf("%.2lf\n", last);

    return 0;
}
*/
/*
int main()
{
    double price = 0.0;
    int month = 0;
    int day = 0;
    int flag = 0; //是否有优惠券
    double last = 0.0;

    scanf("%lf %d %d %d", &price, &month, &day, &flag);
    if (month == 11 && day == 11)
    {
        price *= 0.7;
        if (flag == 1)
            price -= 50;
    }
    else if (month == 12 && day == 12)
    {
        price *= 0.8;
        if (flag == 1)
            price -= 50;
    }

    if (price < 0.0)
        printf("%.2lf\n", 0.0);
    else
        printf("%.2lf\n", price);

    return 0;
}
*/

/*
int main()
{
    double price = 0.0;
    int month = 0;
    int day = 0;
    int flag = 0; //是否有优惠券
    double cut = 1.0; //折扣
    double last = 0.0;

    scanf("%lf %d %d %d", &price, &month, &day, &flag);
    if (month == 11 && day == 11)
    {
        cut = 0.7;
        if (flag == 1)
        {
            last = price * cut - 50;
        }
        else
        {
            last = price * cut;
        }
    }
    else if(month == 12 && day == 12)
    {
        cut = 0.8;
        if (flag == 1)
        {
            last = price * cut - 50;
        }
        else
        {
            last = price * cut;
        }
    }

    if (last < 0.0)
    {
        printf("%.2lf\n", 0.0);
    }
    else
    {
        printf("%.2lf\n", last);
    }

    return 0;
}
*/

/*
int main()
{
    float price;
    int month,day,c;
    scanf("%f %d %d %d", &price, &month, &day, &c);
    if(month==11 && day==11)
    {
        if(c==1)
        {
            price = price*0.7-50;
        }
        else{
                price = price*0.7;
            }
    }
    if(month==12 && day==12)
    {
        if(c==1)
        {
            price = price*0.8-50;
        }
        else{
                price = price*0.8;
            }
    }
    
    if(price <= 0)
    {
        price = 0;
        printf("%.2f", price);
    }
    else
    {
        printf("%.2f", price);
    }
    
    return 0;
}
*/

BC34 进制A+B

描述
输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-231~231-1)。
输入描述:
一行,一个十六进制数a,和一个八进制数b,中间间隔一个空格。
输出描述:
一行,a+b的十进制结果。
示例1
输入:
0x12 05
复制
输出:
23
备注:
十六进制Hexadecimal一般以0x开头,例如0xFF。八进制Octal,一般以0开头,例如07。

题目链接

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    scanf("%x %o", &a, &b);
    printf("%d\n", a+b);
    
    return 0;
}

BC35 判断字母

描述
从键盘任意输入一个字符,编程判断是否是字母(包括大小写)。
输入描述:
多组输入,每行输入包括一个字符。
输出描述:
针对每行输入,输出该字符是字母(YES)或不是(NO)。
示例1
输入:
H
9
输出:
YES
NO

题目链接

#include <stdio.h>

/*
int main()
{
	// 多组输入
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'x'))
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
		getchar(); // 处理\n
	}

	return 0;
}
*/

#include <ctype.h>

//isalpha - 专门用来判断一个字符是不是字母
//是字母返回非0
//不是字母返回0
int main()
{
    int ch = 0;
    while ((ch = getchar()) != EOF)
    {
        if (isalpha(ch))
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
        getchar();
    }

    return 0;
}

BC36 健康评估

描述
BMI指数(即身体质量指数)是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。例如:一个人的身高为1.75米,体重为68千克,他的BMI=68/(1.752)=22.2(千克/米2)。当BMI指数为18.5~23.9时属正常,否则表示身体存在健康风险。编程判断人体健康情况。
输入描述:
一行,输入一个人的体重(千克)和身高(米),中间用一个空格分隔。
输出描述:
一行,输出身体Normal(正常)或Abnormal(不正常)。
示例1
输入:
68 1.75
输出:
Normal

示例2
输入:
67.5 1.65
输出:
Abnormal

题目链接

#include <stdio.h>

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

BC37 网购

描述
KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,如果有优惠券可以额外减50元(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。
输入描述:
一行,四个数字,第一个数表示小明看中的衣服价格,第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。
输出描述:
一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)
示例1
输入:
1000.0 11 11 1
输出:
650.00
示例2
输入:
999.8 12 12 0
输出:
799.84
示例3
输入:
66.6 11 11 1
输出:
0.00

题目链接

#include <stdio.h>

int main()
{
	double price = 0.0;
	int month = 0;
	int date = 0;
	double discount = 1.0;
	int flag = 0;
	scanf("%lf %d %d %d", &price, &month, &date, &flag);

	if (month == 11 && date == 11)
	{
		discount = 0.7;
	}
	if (month == 12 && date == 12)
	{
		discount = 0.8;
	}

	price = price * discount - (double)flag * 50;

	if (price < 0.0)
		price = 0.0;

	printf("%.2lf\n", price);

	return 0;
}

//
int main()
{
    double price = 0.0;
    int month = 0;
    int day = 0;
    int flag = 0; //是否有优惠券
    double cut = 1.0; //折扣
    double last = 0.0;

    scanf("%lf %d %d %d", &price, &month, &day, &flag);
    if (month == 11 && day == 11)
    {
        cut = 0.7;
    }
    else if (month == 12 && day == 12)
    {
        cut = 0.8;
    }
    
    last = price * cut - flag*50;
    
    if (last < 0.0)
        printf("%.2lf\n", 0.0);
    else
        printf("%.2lf\n", last);

    return 0;
}

//
int main()
{
    double price = 0.0;
    int month = 0;
    int day = 0;
    int flag = 0; //是否有优惠券
    double last = 0.0;

    scanf("%lf %d %d %d", &price, &month, &day, &flag);
    if (month == 11 && day == 11)
    {
        price *= 0.7;
        if (flag == 1)
            price -= 50;
    }
    else if (month == 12 && day == 12)
    {
        price *= 0.8;
        if (flag == 1)
            price -= 50;
    }

    if (price < 0.0)
        printf("%.2lf\n", 0.0);
    else
        printf("%.2lf\n", price);

    return 0;
}


//
int main()
{
    double price = 0.0;
    int month = 0;
    int day = 0;
    int flag = 0; //是否有优惠券
    double cut = 1.0; //折扣
    double last = 0.0;

    scanf("%lf %d %d %d", &price, &month, &day, &flag);
    if (month == 11 && day == 11)
    {
        cut = 0.7;
        if (flag == 1)
        {
            last = price * cut - 50;
        }
        else
        {
            last = price * cut;
        }
    }
    else if(month == 12 && day == 12)
    {
        cut = 0.8;
        if (flag == 1)
        {
            last = price * cut - 50;
        }
        else
        {
            last = price * cut;
        }
    }

    if (last < 0.0)
    {
        printf("%.2lf\n", 0.0);
    }
    else
    {
        printf("%.2lf\n", last);
    }

    return 0;
}


//
int main()
{
    float price;
    int month,day,c;
    scanf("%f %d %d %d", &price, &month, &day, &c);
    if(month==11 && day==11)
    {
        if(c==1)
        {
            price = price*0.7-50;
        }
        else{
                price = price*0.7;
            }
    }
    if(month==12 && day==12)
    {
        if(c==1)
        {
            price = price*0.8-50;
        }
        else{
                price = price*0.8;
            }
    }
    
    if(price <= 0)
    {
        price = 0;
        printf("%.2f", price);
    }
    else
    {
        printf("%.2f", price);
    }
    
    return 0;
}

BC38 变种水仙花

描述
变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。

例如:
655 = 6 * 55 + 65 * 5
1461 = 1461 + 1461 + 146*1

求出 5位数中的所有 Lily Number。

输入描述:

输出描述:
一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格。

题目链接

#include <stdio.h>

int main()
{
    int i = 0;
    for(i=10000; i<=99999; i++)
    {
        int j = 0;
        int sum = 0;
        for(j=10; j<=10000; j*=10)
        {
            sum += ((i/j) * (i%j));
        }
        if(sum == i)
        {
            printf("%d ", i);
        }
    }
    
    return 0;
}

在这里插入图片描述


BC39 争夺前五名

描述
期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入n个学生成绩(不超过40个),输出每组排在前五高的成绩。

输入描述:
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
输出描述:
一行,输出成绩最高的前五个,用空格分隔。
示例1
输入:
6
99 45 78 67 72 88
输出:
99 88 78 72 67

题目链接

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

int cmp_int(const void* e1, const void* e2)
{
    return *(int*)e1 - *(int*)e2;
}

int main()
{
    int n = 0;
    int i = 0;
    int j = 0;
    int arr[40] = { 0 };
    scanf("%d", &n);
    //元素个数(要排序的个数) 每个元素的大小
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    qsort(arr, n, 4, cmp_int);
    //冒泡 升序 后5元素
    for (i = n - 1; i >= n - 5; i--)
    {
        printf("%d ", arr[i]);
    }

    return 0;
}

//
int main()
{
    int n = 0;
    int i = 0;
    int j = 0;
    int arr[40] = {0};
    scanf("%d", &n);
    //元素个数(要排序的个数) 每个元素的大小
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for(i=0; i<n-1; i++)//趟数
    {
        for(j=0; j<n-1-i; j++)
        {
            if(arr[j] > arr[j+1])
            {
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
    //冒泡 升序 后5元素
    for(i=n-1; i>=n-5; i--)
    {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

//
int main()
{
    int n = 0;
    int i = 0;
    int j = 0;
    int arr[40] = {0};
    scanf("%d", &n);
    //
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for(i=0; i<n-1; i++)//趟数
    {
        for(j=0; j<n-1-i; j++)
        {
            if(arr[j] > arr[j+1])
            {
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
    //冒泡 升序 后5元素
    for(i=n-1; i>=n-5; i--)
    {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

BC40 竞选社长

描述
假设你们社团要竞选社长,有两名候选人分别是A和B,社团每名同学必须并且只能投一票,最终得票多的人为社长.
输入描述:
一行,字符序列,包含A或B,输入以字符0结束。
输出描述:
一行,一个字符,A或B或E,输出A表示A得票数多,输出B表示B得票数多,输出E表示二人得票数相等。
示例1
输入:
ABBABBAAB0
输出:
B

题目链接

#include <stdio.h>

int main()
{
    char buf[100] = { 0 };
    gets(buf);
    int count_a = 0;
    int count_b = 0;
    int i = 0;
    while (buf[i] != '0')
    {
        if (buf[i] == 'A')
            count_a++;
        if (buf[i] == 'B')
            count_b++;
        i++;
    }
    if(count_a > count_b)
    {
        printf("A\n");
    }
    else if(count_a < count_b)
    {
        printf("B\n");
    }
    else
    {
        printf("E\n");
    }

    return 0;
}

//
#include <stdio.h>
#include <string.h>

int main()
{
    char arr[100] = { 0 };
    scanf("%s", &arr);
    int len = strlen(arr);
    int a = 0;
    int b = 0;
    int e = 0;
    int i = 0;
    for (i = 0; i < len; i++)
    {
        if (arr[i] == 'A')
        {
            a++;
        }
        if (arr[i] == 'B')
        {
            b++;
        }
    }
    if (a > b)
    {
        printf("A");
    }
    else if (a < b)
    {
        printf("B");
    }
    else if (a == b)
    {
        printf("E");
    }

    return 0;
}

BC41 你是天才吗?

描述
据说智商140以上者称为天才,KiKi想知道他自己是不是天才,请帮他编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。
输入描述:
多组输入,每行输入包括一个整数表示的智商。
输出描述:
针对每行输入,输出“Genius”。
示例1
输入:
160
输出:
Genius

题目链接

#include <stdio.h>

int main()
{
    int iq = 0;
    while (~scanf("%d", &iq))
    {
        if (iq >= 140)
        {
            printf("Genius\n");
        }
    }

    return 0;
}

//
#include <stdio.h>

int main()
{
    int iq = 0;
    while((scanf("%d", &iq) != EOF))
    {
        if(iq >= 140)
        {
            printf("Genius\n");
        }
    }
    
    return 0;
}

~按位取反
~EOF
~-1
-1补码全1 整数在内存中存的是补码
~-1是全0 为假


BC42 完美成绩

描述
KiKi想知道他的考试成绩是否完美,请帮他判断。从键盘输入一个整数表示的成绩,编程判断成绩是否在90~100之间,如果是则输出“Perfect”。

输入描述:
多组输入,每行输入包括一个整数表示的成绩(90~100)。
输出描述:
针对每行输入,输出“Perfect”。
示例1
输入:
98
输出:
Perfect

题目链接

#include <stdio.h>

int main()
{
    int score = 0;
    while((scanf("%d", &score) != EOF))
    {
        if(score >= 90 && score <= 100)
        {
            printf("Perfect\n");
        }
    }
    
    return 0;
}

BC43 及格分数

描述
KiKi想知道他的考试分数是否通过,请帮他判断。从键盘任意输入一个整数表示的分数,编程判断该分数是否在及格范围内,如果及格,即:分数大于等于60分,是输出“Pass”,否则,输出“Fail”。
输入描述:
多组输入,每行输入包括一个整数表示的分数(0~100)。
输出描述:
针对每行输入,输出“Pass”或“Fail”。
示例1
输入:
94
输出:
Pass
示例2
输入:
44
输出:
Fail

题目链接

#include <stdio.h>

int main()
{
    int socre = 0;
    while((scanf("%d", &socre) != EOF))
    {
        if(socre >= 60)
        {
            printf("Pass\n");
        }
        else
        {
            printf("Fail\n");
        }
    }
    
    return 0;
}

BC44 判断整数奇偶性

描述
KiKi想知道一个整数的奇偶性,请帮他判断。从键盘任意输入一个整数(范围-231~231-1),编程判断它的奇偶性。
输入描述:
多组输入,每行输入包括一个整数。
输出描述:
针对每行输入,输出该数是奇数(Odd)还是偶数(Even)。
示例1
输入:
4
7
输出:
Even
Odd

题目链接

#include <stdio.h>

int main()
{
    int num = 0;
    while((scanf("%d", &num) != EOF))
    {
        if(num &2 != 0)
        //num%2==1
        {
            printf("Odd\n");
        }
        else
        {
            printf("Even\n");
        }
    }
    
    return 0;
}

BC45 最高分数

描述
KiKi参加了语文、数学、外语的考试,请帮他判断三科中的最高分。从键盘任意输入三个整数表示的分数,编程判断其中的最高分。
输入描述:
多组输入,每行输入包括三个整数表示的分数(0~100),用空格分隔。
输出描述:
针对每行输入,输出为一行,即三个分数中的最高分。
示例1
输入:
94 98 99
100 88 60
输出:
99
100

题目链接

#include <stdio.h>

int main()
{
    int a,b,c;
    while((scanf("%d %d %d", &a, &b, &c) != EOF))
    {
        int max = 0;
        if(max < b)
        {
            max = b;
        }
        if(max < c)
        {
            max = c;
        }
        if(max < a)
        {
            max = a;
        }
        printf("%d\n", max);
    }
    
    return 0;
}

BC46 判断是元音还是辅音

描述
KiKi开始学习英文字母,BoBo老师告诉他,有五个字母A(a), E(e), I(i), O(o),U(u)称为元音,其他所有字母称为辅音,请帮他编写程序判断输入的字母是元音(Vowel)还是辅音(Consonant)。
输入描述:
多组输入,每行输入一个字母。
输出描述:
针对每组输入,输出为一行,如果输入字母是元音(包括大小写),输出“Vowel”,如果输入字母是非元音,输出“Consonant”。
示例1
输入:
A
b
输出:
Vowel
Consonant

题目链接

1、逐一判断

#include <stdio.h>

int main()
{
    int ch = 0;

    while ((ch = getchar()) != EOF)
    {
        if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U' || ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
        {
            printf("Vowel\n");
        }
        else
        {
            printf("Consonant\n");
        }
        getchar();
    }

    return 0;
}

2、用数组存储

#include <stdio.h>

int main()
{
    int ch = 0;
    char vowel[] = "aeiouAEIOU";

    while ((ch = getchar()) != EOF)
    {
        int i = 0;
        int flag = 0;
        for (i = 0; i < 10; i++)
        {
            if (ch == vowel[i])
            {
                flag = 1;
                break;
            }
        }
        if (flag == 1)
        {
            printf("Vowel\n");
        }
        else
        {
            printf("Consonant\n");
        }
        getchar(); //清理 \n
    }

    return 0;
}

3、库函数

#include <stdio.h>
#include <string.h>

int main()
{
    int ch = 0;
    char vowel[] = "aeiouAEIOU";

    while ((ch = getchar()) != EOF)
    {
        if(strchr(vowel, ch))
        {
            printf("Vowel\n");
        }
        else
        {
            printf("Consonant\n");
        }
        getchar(); //清理 \n
    }

    return 0;
}

消除\n

int main()
{
    int ch = 0;
    char vowel[] = "aeiouAEIOU";

    //在%c的前面加上空格,会消化掉前面所有的空白字符,然后读取下一个字符
    while (scanf(" %c", &ch) != EOF)
    {
        if (strchr(vowel, ch))
        {
            printf("Vowel\n");
        }
        else
        {
            printf("Consonant\n");
        }
    }

    return 0;
}

消除\n

int main()
{
    int ch = 0;
    char vowel[] = "aeiouAEIOU";

    //在%c的后面加上'\n',其实在输入时就会消化掉这个\n字符
    //不会为下次留下空白字符的隐患
    while (scanf("%c\n", &ch) != EOF)
    {
        if (strchr(vowel, ch))
        {
            printf("Vowel\n");
        }
        else
        {
            printf("Consonant\n");
        }
    }

    return 0;
}

BC47 判断是不是字母

描述
KiKi想判断输入的字符是不是字母,请帮他编程实现。

输入描述:
多组输入,每一行输入一个字符。
输出描述:
针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。
示例1
输入:
A
6
输出:
A is an alphabet.
6 is not an alphabet.

题目链接

#include <stdio.h>

int main()
{
    int ch = 0;
    while((scanf("%c\n", &ch)) != EOF)
    {
        if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z'))
        {
            printf("%c is an alphabet.\n", ch);
        }
        else
        {
            printf("%c is not an alphabet.\n", ch);
        }
    }
    
    return 0;
}

//
#include <stdio.h>
#include <ctype.h>

int main()
{
    int ch = 0;
    while((scanf("%c\n", &ch)) != EOF)
    {
        if(isalpha(ch)
        {
            printf("%c is an alphabet.\n", ch);
        }
        else
        {
            printf("%c is not an alphabet.\n", ch);
        }
    }
    
    return 0;
}

BC48 字母大小写转换

描述
KiKi想完成字母大小写转换,有一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;反之则转换为大写字母。
输入描述:
多组输入,每一行输入一个字母。
输出描述:
针对每组输入,输出单独占一行,输出字母的对应形式。
示例1
输入:
a
A
Z
输出:
A
a
z

题目链接

#include <stdio.h>

int main()
{
    int ch;
    while((scanf("%c", &ch)) != EOF)
    {
        getchar();
        if(ch>='A' && ch<='Z')
        {
            printf("%c\n", ch+32);
        }
        if(ch>='a' && ch<='z')
        {
            printf("%c\n", ch-32);
        }
    }
    
    return 0;
}

//
#include <stdio.h>
#include <ctype.h>

int main()
{
    int ch;
    while ((scanf("%c", &ch)) != EOF)
    {
        getchar();
        if (isupper(ch))
        {
            printf("%c\n", ch + 32);
        }
        if (islower(ch))
        {
            printf("%c\n", ch - 32);
        }
    }

    return 0;
}

//isupper - 判断一个字母是不是大写字母
//islower - 判断一个字母是不是小写字母
//topper - 转大写字母
//tolower - 转小写字母
#include <stdio.h>
#include <ctype.h>

int main()
{
    int ch;
    while ((scanf(" %c", &ch)) != EOF)
    {
        if (isupper(ch))
        {
            printf("%c\n", tolower(ch));
        }
        if (islower(ch))
        {
            printf("%c\n", toupper(ch));
        }
    }

    return 0;
}

BC49 判断两个数的大小关系

描述
KiKi想知道从键盘输入的两个数的大小关系,请编程实现。
输入描述:
题目有多组输入数据,每一行输入两个整数(范围(1 ~231-1),用空格分隔。
输出描述:
针对每行输入,输出两个整数及其大小关系,数字和关系运算符之间没有空格,详见输入输出样例。
示例1
输入:
1 1
输出:
1=1
示例2
输入:
1 0
输出:
1>0
示例3
输入:
0 1
输出:
0<1

题目链接

#include <stdio.h>

int main()
{
    int num1, num2;
    while ((scanf("%d %d", &num1, &num2)) != EOF)
    {
        if (num1 == num2)
        {
            printf("%d=%d\n", num1, num2);
        }
        if (num1 > num2)
        {
            printf("%d>%d\n", num1, num2);
        }
        if (num1 < num2)
        {
            printf("%d<%d\n", num1, num2);
        }
    }

    return 0;
}

BC50 计算单位阶跃函数

描述
KiKi最近学习了信号与系统课程,这门课里有一个非常有趣的函数,单位阶跃函数,其中一种定义方式为:
在这里插入图片描述
现在试求单位冲激函数在时域t上的值。

输入描述:
题目有多组输入数据,每一行输入一个t(-1000<t<1000)表示函数的时域t。
输出描述:
输出函数的值并换行。
示例1
输入:
11
0
-11
输出:
1
0.5
0

题目链接

#include <stdio.h>

int main()
{
    int t = 0;
    while((scanf("%d", &t)) != EOF)
    {
        if(t > 0)
        {
            printf("1\n");
        }
        if(t == 0)
        {
            printf("0.5\n");
        }
        if(t < 0)
        {
            printf("0\n");
        }
    }
    
    return 0;
}

BC51 三角形判断

描述
KiKi想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。
输入描述:
题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。
输出描述:
针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。
示例1
输入:
2 3 2
3 3 3
输出:
Isosceles triangle!
Equilateral triangle!

题目链接

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;

	while (scanf("%d %d %d", &a, &b, &c) != EOF)
	{
		if ((a + b > c) && (a + c > b) && (b + c > a))
		{
			// 判断边
			if (a == b && b == c)
			{
				printf("Equilateral triangle!\n");
			}
			else if ((a == b && a != c) || (a == c && a != b) || (b == c && b != a))
			{
				printf("Isosceles triangle!\n");
			}
			else
			{
				printf("Ordinary triangle!\n");
			}
		}
		else
		{
			printf("Not a triangle!\n");
		}
	}

	return 0;
}

BC52 衡量人体胖瘦程度

描述
在计算BMI(BodyMassIndex ,身体质量指数)的案例基础上,判断人体胖瘦程度。BMI中国标准如下表所示。
在这里插入图片描述
输入描述:
多组输入,每一行包括两个整数,用空格隔开,分别为体重(公斤)和身高(厘米)。
输出描述:
针对每行输入,输出为一行,人体胖瘦程度,即分类。
示例1
输入:
80 170
60 170
90 160
50 185
输出:
Overweight
Normal
Obese
Underweight

题目链接

#include <stdio.h>
//BMI = 体重的kg数/(身高米数的平方)
int main()
{
    int h = 0;
    int w = 0;
    while((scanf("%d %d", &w, &h)) != EOF)
    {
        double bmi = w / (h/100.00) / (h/100.00);
        if(bmi < 18.5)
        {
            printf("Underweight\n");
        }
        else if(bmi >= 18.5 && bmi <= 23.9)
        {
            printf("Normal\n");
        }
        else if(bmi > 23.9 && bmi <= 27.9)
        {
            printf("Overweight\n");
        }
        else
        {
            printf("Obese\n");
        }
    }
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三春去后诸芳尽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值