牛客网C语言入门刷题(BC1 ~ BC50)
文章目录
- BC1 实践出真知
- BC2 我是大V
- BC3 有容乃大
- BC6 小飞机
- BC7 缩短二进制
- BC8 十六进制转十进制
- BC9 printf的返回值描述
- BC10 成绩输入输出
- BC11 学生基本信息输入输出
- BC12 字符金字塔
- BC13 ASCII码
- BC14 出生日期输入输出
- BC15 按照格式输入并交换输出
- BC16 字符转ASCII码
- BC17 计算表达式的值
- BC18 计算带余除法
- BC19 反向输出一个四位数
- BC20 kiki算数
- BC21 浮点数的个位数字
- BC22 你能活多少秒
- BC23 时间转换
- BC24 总成绩和平均分计算
- BC25 计算体
- BC26 计算三角形的周长和面积
- BC27 计算球体的体积
- BC28 大小写转换
- BC29 2的n次方计算
- BC30 KiKi和酸奶
- BC31 发布信息
- BC33 计算平均成绩
- BC34 进制A+B
- BC35 判断字母
- BC36 健康评估
- BC37 网购
- BC38 变种水仙花
- BC39 争夺前五名
- BC40 竞选社长
- BC41 你是天才吗?
- BC42 完美成绩
- BC43 及格分数
- BC44 判断整数奇偶性
- BC45 最高分数
- BC46 判断是元音还是辅音
- BC47 判断是不是字母
- BC48 字母大小写转换
- BC49 判断两个数的大小关系
- BC50 计算单位阶跃函数
BC1 实践出真知
于老师经常告诉我们“学习编程最好的办法就是上机实践,因为你要对计算机下指令,想让计算机帮你干活,就得多和计算机‘交流’,实践才能出真知。”
输入描述:
无
输出描述:
Practice makes perfect!
代码如下:
#include <stdio.h>
int main()
{printf("Practice makes perfect!\n");return 0;
}
BC2 我是大V
描述
每个人都想成为大V (VIP:Very Important Person),但要一点一点积累才行,先从小v做起。要求输出由小写字母v组成的大V。
输入描述:
无
输出描述:
v v
v v
v
备注:
换行使用转义字符‘\n’
代码如下:
#include <stdio.h>
int main()
{printf("v v\n");printf(" v v\n");printf(" v\n");return 0;
}
BC3 有容乃大
描述
确定不同整型数据类型在内存中占多大(字节),输出不同整型数据类型在内存中占多大(字节)。
输入描述:
无
输出描述:
不同整型数据类型在内存中占多大(字节),具体格式详见输出样例,输出样例中的?为不同整型数据类型在内存中占的字节数。输出样例如下:
The size of short is ? bytes.
The size of int is ? bytes.
The size of long is ? bytes.
The size of long long is ? bytes.
代码如下:
#include <stdio.h>
int main()
{printf("The size of short is %d bytes.\n",sizeof(short));printf("The size of int is %d bytes.\n",sizeof(int));printf("The size of long is %d bytes.\n",sizeof(long));printf("The size of long long is %d bytes.\n",sizeof(long long));return 0;
}
sizeof是C语言操作符,不是函数,计算变量或者类型创建的变量的大小,单位是字节,C语言标准规定:sizeof(long) >= sizeof(int).
BC6 小飞机
描述
KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。
输入描述:
无
#include <stdio.h>
int main()
{printf(" **\n");printf(" **\n");printf("************\n");printf("************\n");printf(" * *\n");printf(" * *\n");return 0;
}
BC7 缩短二进制
描述
我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数的表达特点。请输出十进制整数1234对应的八进制和十六进制。
输入描述:
无
输出描述:
十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。
备注:
printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示
#include <stdio.h>
int main()
{printf("%#o %#X",1234,1234);//printf("0%o 0X%X",1234,1234);return 0;
}
格式控制:
%c - 字符
%hd -短整形
%d -整型
%s -字符串
%f -浮点型
%lf -双精度浮点型
%p -地址
%X -16进制(大写)
%x -16进制(小写)
%o -8进制
BC8 十六进制转十进制
描述
BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。
输入描述:
无
输出描述:
十六进制整数ABCDEF对应的十进制整数,所占域宽为15。
备注:
printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数。
#include <stdio.h>
int main()
{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()
{//int n = printf("Hello world!");//printf("\n%d",n);printf("\n%d\n",printf("Hello world!"));return 0;
}
printf函数,返回值是打印到屏幕上的字符的个数:
printf("%d",printf("%d",printf("%d",43)));//4321
BC10 成绩输入输出
描述
输入3科成绩,然后把三科成绩输出,成绩为整数形式。
输入描述:
一行,3科成绩,用空格分隔,范围(0~100)。
输出描述:
一行,把3科成绩显示出来,输出格式详见输出样例。
示例1
输入:
60 80 90
输出:
score1=60,score2=80,score3=90
#include <stdio.h>
int main()
{int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("score1=%d,score2=%d,score3=%d",a,b,c);return 0;
}
#include <stdio.h>
int main()
{//方法1int i = 0;int score[3] = {0};for(i=0; i<3; i++){scanf("%d", &score[i]);}printf("score1=%d,score2=%d,score3=%d\n", score[0],score[1],score[2]);/*//方法2//这样写就复杂了for(i=0; i<3; i++){printf("score%d=%d", i+1, score[i]);if(i<2)printf(",");}*/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.
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 = 0;scanf("%c",&ch);int i = 0;for(i = 0;i < 5;i++){//打印每一行//1.打印空格int j = 0;for(j = 0;j < 4-i;j++){printf(" ");}//2.打印字符for(j = 0;j <= i;j++){printf("%c ",ch);}//3.换行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;for(i = 0;i < sizeof(arr) / sizeof(arr[0]);i++){printf("%c",arr[i]);}return 0;
}
这里得了解清楚ASCII编码,如果采用ASCII编码,每个字符都有一个对应的数字,这个数字被称为这个字符的ASCII码,如果把这个数字按照%c打印,打印的就是字符。
BC14 出生日期输入输出
描述
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。
输入描述:
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。
输出描述:
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。
示例1
输入:
20130225
输出:
year=2013
month=02
date=25
备注:
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
#include <stdio.h>
int main()
{ int year = 0;int month = 0;int day = 0;scanf("%4d%2d%2d",&year,&month,&day); printf("year=%d\nmonth=%02d\ndate=%02d",year,month,day);return 0;
}
BC15 按照格式输入并交换输出
描述
输入两个整数,范围-231~231-1,交换两个数并输出。
输入描述:
输入只有一行,按照格式输入两个整数,范围,中间用“,”分隔。
输出描述:
把两个整数按格式输出,中间用“,”分隔。
示例1
输入:
a=1,b=2
输出:
a=2,b=1
备注:
如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
#include <stdio.h>
int main()
{int a,b;scanf("a=%d,b=%d",&a,&b);int tmp = a;a = b;b = tmp;printf("a=%d,b=%d",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);printf("%d",ch);return 0;
}
直接按照%d打印,就是字符对应的ascii码值.
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,c = 212;printf("%d",(-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,b = 0;scanf("%d%d",&a,&b);printf("%d %d",a/b,a%b);return 0;
}
BC19 反向输出一个四位数
描述
将一个四位数,反向输出。
输入描述:
一行,输入一个整数n(1000 <= n <= 9999)。
输出描述:
针对每组输入,反向输出对应四位数。
示例1
输入:
1234
复制
输出:
4321
#include <stdio.h>
int main()
{int a = 0;scanf("%d",&a);int n1 = 0;while(a){n1 = a % 10;printf("%d",n1);a /= 10;}return 0;
}
BC20 kiki算数
描述
问题:KiKi今年5岁了,已经能够认识100以内的非负整数,并且并且能够进行 100 以内的非负整数的加法计算。不过,BoBo老师发现KiKi在进行大于等于100的正整数的计算时,规则如下:
只保留该数的最后两位,例如:对KiKi来说1234等价于34;
如果计算结果大于等于 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()
{unsigned int a = 0;unsigned int b = 0;scanf("%u %u",&a,&b);printf("%u",(a + b) % 100);return 0;
}
#include <stdio.h>
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int c = (a%100+b%100)%100;printf("%d\n", c);return 0;
}
BC21 浮点数的个位数字
描述
给定一个浮点数,要求得到该浮点数的个位数。
输入描述:
一行,包括一个浮点数。
输出描述:
一行,包含一个整数,为输入浮点数对应的个位数。
示例1
输入:
13.141
输出:
3
#include <stdio.h>
int main()
{float a = 0;scanf("%f",&a);printf("%d",(int)a%10);return 0;
}
int main()
{int a = 0;scanf("%d", &a);printf("%d", a % 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 sec = age*3.156e7;printf("%lld",sec);return 0;
}
C语言标准规定:sizeof(long) >= sizeof(int)
BC23 时间转换
描述
给定秒数seconds (0< seconds < 100,000,000),把秒转化成小时、分钟和秒。
输入描述:
一行,包括一个整数,即给定的秒数。
输出描述:
一行,包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开。
示例1
输入:
3661
输出:
1 1 1
#include <stdio.h>
int main()
{int seconds = 0;scanf("%d",&seconds);int hour = 0;int minute = 0;int second = 0;second = seconds % 60;minute = seconds / 60 % 60;hour = seconds / 60 /60;printf("%d %d %d",hour,minute,second);return 0;
}
BC24 总成绩和平均分计算
描述
依次输入一个学生的3科成绩,在屏幕上输出该学生的总成绩以及平均成绩。
输入描述:
一行,3科成绩,成绩之间用一个空格隔开。
输出描述:
一行,总成绩和平均成绩(小数点后保留两位),用一个空格隔开。
示例1
输入:
79.5 80.0 98.0
#include <stdio.h>
int main()
{float s1,s2,s3;scanf("%f %f %f",&s1,&s2,&s3);float avg = (s1+s2+s3)/3.0;float sum = s1+s2+s3;printf("%.2f %.2f",sum,avg);return 0;
}
scanf输入,%d读取时,会跳过空格进行读取,%c读取会读取空格。
输出:
257.50 85.83
BC25 计算体
重指数
描述
问题:计算BMI指数(身体质量指数)。BMI指数(即身体质量指数,简称体质指数又称体重,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。主要用于统计用途,当我们需要比较及分析一个人的体重对于不同高度的人所带来的健康影响时,BMI值是一个中立而可靠的指标。
输入描述:
一行,两个整数,分别表示体重(公斤),身高(厘米),中间用一个空格分隔。
输出描述:
一行,BMI指数(保留两位小数)。
示例1
输入:
70 170
输出:
24.22
#include <stdio.h>
int main()
{int weight = 0, height = 0;scanf("%d %d", &weight, &height);double bmi = weight * 1.0 /(height / 100.0)/(height / 100.0);printf("%.2f", bmi);return 0;
}
要得到浮点数,要进行浮点数除法,这里就得保证 / 两端的操作数至少有一个数是浮点数。
float单精度: 4字节
double双精度:8字节
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()
{int a,b,c;float circle = 0.0;float area = 0;scanf("%d %d %d",&a,&b,&c);circle = a + b + c;double p = (a + b + c)/ 2.0;area = sqrt(p*(p-a)*(p-b)*(p-c));printf("circumference=%.2f area=%.2f",circle,area);return 0;
}
如果仅仅有3个边要计算周长简单,计算面积,这时得借助:海伦公式
如果不知道海伦公式也没关系,查一下就知道了。
BC27 计算球体的体积
描述
给定一个球体的半径,计算其体积。其中球体体积公式为 V = 4/3*πr3,其中 π= 3.1415926。
输入描述:
一行,用浮点数表示的球体的半径。
输出描述:
一行,球体的体积,小数点后保留3位。
示例1
输入:
3.0
输出:
113.097
#include <stdio.h>
int main()
{double r = 0.0;scanf("%lf",&r);double v = 0.0;double pi = 3.1415926;v = 4.0/3*r*r*r*pi;printf("%.3lf",v);return 0;
}
这个题目,如果使用 float 来求解,答案的精度是不够的,所以试错后,使用double类型合适。这里要知道float和double为啥精度有区别。
BC28 大小写转换
描述
实现字母的大小写转换。多组输入输出。
输入描述:
多组输入,每一行输入大写字母。
输出描述:
针对每组输入输出对应的小写字母。
示例1
输入:
A
B
输出:
a
b
备注:
多组输入过程中要注意“回车”也是字母,所以要“吸收”(getchar())掉该字母。
#include <stdio.h>
int main()
{int ch; //while ((scanf("%c",&ch)) != EOF)while( (ch = getchar()) != EOF){//putchar(ch +32);//取走A//printf("\n");printf("%c",ch+32);getchar();//取走缓冲区中的\n}return 0;
}
输入A按下回车之后,A和\n才会被放进输入输入缓冲区,但是getchar只会拿走A,\n还在输入缓冲区中。 多组数据输入的问题。getchar 清理缓冲区的问题,这里得理解输入缓冲区的问题。
BC29 2的n次方计算
描述
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。
输入描述:
多组输入,每一行输入整数n(0 <= n < 31)。
输出描述:
针对每组输入输出对应的2的n次方的结果。
示例1
输入:
2
10
输出:
4
1024
scanf函数的返回值是:读取的元素的个数。
#include <stdio.h>
int main()
{int n = 0;while (scanf("%d",&n)!=EOF){int sum = 0;int m = 1;int i = 0;for (i = 0; i < n; i++){m = m << 1;}printf("%d\n", m);}return 0;
}
使用库函数pow
#include <stdio.h>
#include <math.h>
int main()
{int n = 0;while (scanf("%d", &n) != EOF){ double ret = 0.0;ret = pow((double)2, (double)n);printf("%d\n", (int)ret);}
}
本题为多组输入,要使用循环输入
注意<<(左移操作符的使用,左移一位有乘2的效果).
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;int count = 0;while(scanf("%d%d%d",&n,&h,&m)!=EOF){if(m % h){printf("%d",n-m/h-1);}else{printf("%d",n-m/h); }} return 0;
}
- 注意多组输入
- 如果h分钟喝一瓶酸奶,那么m分钟喝酸奶的瓶数就是h/m瓶,但是如果m%h有余数,就说明又打开了一瓶,只是没来得及喝完,那么未打开的就少一瓶。
BC31 发布信息
描述
你的手机丢了,在屏幕上输出信息告诉大家。
输入描述:
无
输出描述:
I lost my cellphone!
#include <stdio.h>
int main()
{printf("I lost my cellphone!\n");return 0;
}
BC33 计算平均成绩
描述
从键盘输入5个学生的成绩(整数),求他们的平均成绩(浮点数,保留一位小数)。
输入描述:
一行,连续输入5个整数(范围0~100),用空格分隔。
输出描述:
一行,输出5个数的平均数(保留一位小数)。
示例1
输入:
75 80 43 67 96
输出:
72.2
#include <stdio.h>
int main()
{int score = 0;int sum = 0;int i = 0;for(i = 0;i<5;i++){scanf("%d",&score);sum += score;}printf("%.1f",sum/5.0);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",a+b);return 0;
}
- 首先要理解十进制、十六进制、八进制只是一种数据的表示形式,不是数据的存储形式。
数据在计算机中都是以二进制补码的形式存储的。 - 不同格式的数据的输出在C语言中有不同的格式指定,比如:%x是十六进制格式,%o就是八进制格式。
- 不同进制的数据存放到整形变量中都是整形值,直接计算就行,计算交给计算机。
BC35 判断字母
描述
从键盘任意输入一个字符,编程判断是否是字母(包括大小写)。
输入描述:
多组输入,每行输入包括一个字符。
输出描述:
针对每行输入,输出该字符是字母(YES)或不是(NO)。
示例1
输入:
H
9
输出:
YES
NO
//代码1
int main()
{int ch = 0;while( (ch = getchar()) != EOF){if((ch >= 'a'&& ch <= 'z') || (ch >= 'A'&& ch <= 'Z') ){printf("YES\n");}else{printf("NO\n");}//清理掉剩下的'\n'getchar();}return 0;
}
使用C语言的库函数:isalpha
//代码2
int main()
{int ch = 0;while((ch=getchar()) != EOF){//使用库函数if(isalpha(ch))printf("YES\n");elseprintf("NO\n");getchar();}return 0;
}
BC36 健康评估
描述
BMI指数(即身体质量指数)是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。例如:一个人的身高为1.75米,体重为68千克,他的BMI=68/(1.75^2)=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()
{int weight = 0;float height = 0.0;scanf("%d %f",&weight,&height);float bim = 0.0;bim = weight / height / height /1.0; if(bim >= 18.5 && bim <= 23.9){printf("Normal\n");}else{printf("Abnormal\n");}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()
{float price = 0.0;int month = 0;int day = 0;int v = 0;scanf("%f%d%d%d",&price,&month,&day,&v);if(month == 11 && day == 11){if(v == 1){price = price*0.7-50;}else{price = price*0.7;}}else if(month == 12 && day == 12) {if(v == 1){price = price*0.8-50;}else{price = price*0.8;}}else{price = price;}if(price < 0){printf("%.2f",0.0);}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>
#include <math.h>
int main()
{int i = 10000;for (i = 10000; i <= 99999; i++){//12345int sum = 0;int a = 0;int j = 1;for (j = 1; j < 5; j++){sum += (i % (int)pow(10, j)) * (i / (int)pow(10, j));}if (sum == i){printf("%d ", i);}}return 0;
}
#include <stdio.h>
int main()
{int i = 0;for(i=10000; i<=99999; i++){//判断i是否为lily numberint j = 10;int sum = 0;int tmp = i;for(j=10; j<=10000; j*=10){sum += (tmp%j)*(tmp/j);}if(sum == i)printf("%d ", i);}return 0;
}
分析题目后发现,lily数求和的每一项都是对同一个数(10/100/1000…)的取模或者整除取商。这样的话,产生10,100,1000,10000 这些数字,分别对被判断的数字取模或者取商,然后乘起来,再计算和,再判断就行。
BC39 争夺前五名
描述
期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入n个学生成绩(不超过40个),输出每组排在前五高的成绩。
输入描述:
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
输出描述:
一行,输出成绩最高的前五个,用空格分隔。
示例1
输入:
6
99 45 78 67 72 88
输出:
99 88 78 72 67
#include <stdio.h>
int main()
{int n = 0;scanf("%d",&n);int arr[40] = {0};int i = 0;for(i = 0;i < n;i++){scanf("%d",&arr[i]);}int j = 0;for(i = 0; i < 5; i++){int tmp = 0;for(j = i+1;j < n;j++){if(arr[i] < arr[j]){tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}printf("%d ",arr[i]);}return 0;
}
//代码2
#include <stdio.h>
int main()
{int n = 0;int score[40] = {0};scanf("%d", &n);int i = 0;for(i=0; i<n; i++){scanf("%d", &score[i]);}//对所有数字排序-冒泡排序int j = 0;for(i=0; i<n; i++){for(j=0; j<n-i-1; j++){if(score[j] < score[j+1]){int tmp = score[j];score[j] = score[j+1];score[j+1] = tmp;}}}for(i=0; i<5; i++){printf("%d ", score[i]);}return 0;
}
使用库函数qsort:快速排序
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );排的是升序
//使用库函数qsort
int compare(const void* arg1, const void* arg2)
{return *(int*)arg1 - *(int*)arg2;
}int main()
{int n = 0;int score[40] = { 0 };scanf("%d", &n);int i = 0;for (i = 0; i < n; i++){scanf("%d", &score[i]);}//使用qsort进行排序qsort(score,n,4,compare);int j = 0;for (j = n-1; j >= n-5; j--){printf("%d ",score[j]);}return 0;
}
BC40 竞选社长
描述
假设你们社团要竞选社长,有两名候选人分别是A和B,社团每名同学必须并且只能投一票,最终得票多的人为社长.
输入描述:
一行,字符序列,包含A或B,输入以字符0结束。
输出描述:
一行,一个字符,A或B或E,输出A表示A得票数多,输出B表示B得票数多,输出E表示二人得票数相等。
示例1
输入:
ABBABBAAB0
输出:
B
#include <stdio.h>
//一个字符一个字符读取
int main()
{int ch = 0;int count1 = 0;int count2 = 0;while ((ch = getchar()) != '0' && (ch != EOF)){if (ch == 'A'){count1++;}else if (ch == 'B'){count2++;}}if (count1 > count2){printf("A");}else if (count1 < count2){printf("B");}else{printf("E");}return 0;
}
//一次读取一行
int main()
{char arr[100] = { 0 };gets(arr);//从标准输入流中读取一行放到arr中int i = 0;int flag = 0;while (arr[i] != '0'){if (arr[i] == 'A'){flag++;}else if (arr[i] == 'B'){flag--;}i++;}if (flag > 0)printf("A");else if (flag < 0)printf("B");elseprintf("E");return 0;
}
- 本题有很多解法。
- 主要就是读取输入数据的问题要解决好,输入有2个结束条件(遇到读取结束EOF,或者’0’)。
- 剩余的工作就是统计个数后,然后根据情况按照格式输出。
BC41 你是天才吗?
int main()
{int n = 0;//这种写法是因为scanf读取失败返回EOF,EOF是-1,所以按位取反后的结果是0,0为假,可以让循环停止。while(~scanf("%d", &n)){if(n>=140)printf("Genius");}return 0;
}
按位取反是数据在内存中的二进制补码按位取反。
scanf函数返回的是读取数据的个数 读取失败返回EOF(-1)
-1 10000000 00000000 00000000 0000000111111111 11111111 11111111 1111111011111111 11111111 11111111 11111111按位取反 00000000 00000000 00000000 000000000
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");}return 0;
}
- 多组输入。
- 数学中的 90<=score<=100 的写法,在C语言中直接写是有bug的。
BC43 及格分数
描述
KiKi想知道他的考试分数是否通过,请帮他判断。从键盘任意输入一个整数表示的分数,编程判断该分数是否在及格范围内,如果及格,即:分数大于等于60分,是输出“Pass”,否则,输出“Fail”。
输入描述:
多组输入,每行输入包括一个整数表示的分数(0~100)。
输出描述:
针对每行输入,输出“Pass”或“Fail”。
示例1
输入:
94
输出:
Pass
示例2
输入:
44
输出:
Fail
#include <stdio.h>
int main()
{int score = 0;while(~scanf("%d",&score)){if(score >= 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 n = 0;while(scanf("%d",&n)!=EOF){if(n % 2){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 i = 0;int score[3] = {0};while(scanf("%d %d %d", &score[0], &score[1], &score[2]) != EOF){int max = 0;//每一组测试,max都恢复到0int i = 0;for(i=0; i<3; i++){if(score[i] > max)max = score[i];}printf("%d\n", max);}return 0;
}
#include <stdio.h>
int main()
{int a,b,c;while(scanf("%d%d%d",&a,&b,&c)!=EOF){int max = a;if(max < b){max = b;}if(max < c){max = c;}printf("%d\n",max);}return 0;
}
- 多组输入
- 每组输入接受3个数字,求出最大值,因为成绩不能是负数,所以假设max初值是0.
BC46 判断是元音还是辅音
描述
KiKi开始学习英文字母,BoBo老师告诉他,有五个字母A(a), E(e), I(i), O(o),U(u)称为元音,其他所有字母称为辅音,请帮他编写程序判断输入的字母是元音(Vowel)还是辅音(Consonant)。
输入描述:
多组输入,每行输入一个字母。
输出描述:
针对每组输入,输出为一行,如果输入字母是元音(包括大小写),输出“Vowel”,如果输入字母是非元音,输出“Consonant”。
示例1
输入:
A
b
输出:
Vowel
Consonant
#include <stdio.h>
int main()
{int ch = 0;while(scanf("%c",&ch)!=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");}//清理\ngetchar();}return 0;
}
#include <stdio.h>
int main()
{char ch = 0;char arr[] = "AEIOUaeiou";while((ch=getchar()) != EOF){int i = 0;for(i=0; i<10; i++){if(ch == arr[i]){printf("Vowel\n");break;}}if(i == 10)printf("Consonant\n");getchar();//去除每个字符后的\n}return 0;
}
#include <stdio.h>
int main()
{char ch = 0;char arr[] = "AEIOUaeiou";//在%c的前面写一个空格会消化掉前面所有的空白字符,然后读取一个字符while(scanf(" %c", &ch) != EOF){int i = 0;for(i=0; i<10; i++){if(ch == arr[i]){printf("Vowel\n");break;}}if(i == 10)printf("Consonant\n");}return 0;
}
#include <stdio.h>
int main()
{char ch = 0;char arr[] = "AEIOUaeiou";//在%c的后边发给一个'\n',其实在输入时候就会消化掉这个\n字符//不会为下次留下空白字符的隐患while(scanf("%c\n", &ch) != EOF){int i = 0;for(i=0; i<10; i++){if(ch == arr[i]){printf("Vowel\n");break;}}if(i == 10)printf("Consonant\n");}return 0;
}
BC47 判断是不是字母
描述
KiKi想判断输入的字符是不是字母,请帮他编程实现。
输入描述:
多组输入,每一行输入一个字符。
输出描述:
针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。
示例1
输入:
A
6
输出:
A is an alphabet.
6 is not an alphabet.
#include <stdio.h>
int main()
{char ch = 0;while (scanf("%c", &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);}getchar();}return 0;
}
使用库函数
#include <stdio.h>
int main()
{char ch = 0;while(scanf("%c",&ch)!=EOF){if(isalpha(ch)){printf("%c is an alphabet.\n",ch);}else{printf("%c is not an alphabet.\n",ch);}getchar();}return 0;
}
BC48 字母大小写转换
描述
KiKi想完成字母大小写转换,有一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;反之则转换为大写字母。
输入描述:
多组输入,每一行输入一个字母。
输出描述:
针对每组输入,输出单独占一行,输出字母的对应形式。
示例1
输入:
a
A
Z
输出:
A
a
z
#include <stdio.h>
int main()
{char ch = 0;while(scanf("%c",&ch)!=EOF){if(ch >= 65 && ch <= 91){printf("%c\n",ch + 32);}else if(ch >= 97 && ch <= 123){printf("%c\n",ch - 32);}//清理\ngetchar();}return 0;
}
使用库函数
#include <stdio.h>
int main()
{char ch = 0;while (scanf("%c", &ch) != EOF){if (islower(ch)){//printf("%c\n", ch - 32);printf("%c\n",toupper(ch));}else if (isupper(ch)){//printf("%c\n", ch - 32);printf("%c\n",tolower(ch));}//清理\ngetchar();}return 0;
}
BC49 判断两个数的大小关系
描述
KiKi想知道从键盘输入的两个数的大小关系,请编程实现。
输入描述:
题目有多组输入数据,每一行输入两个整数(范围(1 ~2^31-1),用空格分隔。
输出描述:
针对每行输入,输出两个整数及其大小关系,数字和关系运算符之间没有空格,详见输入输出样例。
示例1
输入:
1 1
输出:
1=1
示例2
输入:
1 0
输出:
1>0
示例3
输入:
0 1
输出:
0<1
#include <stdio.h>
int main()
{int a,b;while(scanf("%d%d",&a,&b)!=EOF){if(a > b){printf("%d>%d\n",a,b);}else if(a < b){printf("%d<%d\n",a,b);}else{printf("%d=%d\n",a,b);}}return 0;
}
BC50 计算单位阶跃函数
描述
KiKi最近学习了信号与系统课程,这门课里有一个非常有趣的函数,单位阶跃函数,其中一种定义方式为:
现在试求单位冲激函数在时域t上的值。
输入描述:
题目有多组输入数据,每一行输入一个t(-1000<t<1000)表示函数的时域t。
输出描述:
输出函数的值并换行。
示例1
输入:
11
0
-11
输出:
1
0.5
0
#include <stdio.h>
int main()
{int n = 0;while(scanf("%d",&n)!=EOF){if(n > 0){printf("%d\n",1);}else if(n == 0){printf("%.1f\n",0.5);}else{printf("%d\n",0); }}return 0;
}
牛客网C语言入门刷题(BC1 ~ BC50)相关推荐
- 牛客网SQL 进阶篇刷题
牛客网SQL 进阶篇刷题(1-19) 用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001,并在50分钟后提交,得了90分: 用户1002在2021年9月4日上午7点1分2秒开始 ...
- 【自我救赎--牛客网Top101 4天刷题计划】 第一天 热身运动
第一天 声明:本系列文章仅适合二刷有经验的算法er学习,以后会出详细的每一题的讲解,这里只是简单的说明思路来帮助大家快速刷完Top101,另外博主的算法全程跟着 labuladong 大佬学习,这里特 ...
- 为了OFFER系列 | 牛客网美团点评数据分析刷题
@Author:Runsen 对于大学的每一个阶段,都有着不同的意义,在大学期间一定要有明确的战略.打法,以及人生布局,才能最大程度的提升自己,才能在未来走的更远. 现如今大四,为了OFFER,冲啊 ...
- 【自我救赎--牛客网Top101 4天刷题计划】 第四天 登峰造极
第四天 声明:本系列文章仅适合二刷有经验的算法er学习,以后会出详细的每一题的讲解,这里只是简单的说明思路来帮助大家快速刷完Top101,另外博主的算法全程跟着 labuladong 大佬学习,这里特 ...
- 【自我救赎--牛客网Top101 4天刷题计划】 第三天 渐入佳境
第三天 声明:本系列文章仅适合二刷有经验的算法er学习,以后会出详细的每一题的讲解,这里只是简单的说明思路来帮助大家快速刷完Top101,另外博主的算法全程跟着 labuladong 大佬学习,这里特 ...
- 原创 牛客网产品笔试题刷题打卡——用户研究
QQ和微信的区别. 1.产品定位 QQ:"每一天,乐在沟通",是一款基于互联网的社交通讯软件.QQ是PC互联网的产物,侧重社交,更娱乐化. 微信:"一个生活方式" ...
- 原创 牛客网产品笔试题刷题打卡——需求分析/数据分析/文档攥写
ARPU(ARPU-AverageRevenuePerUser)即每用户平均收入.用于衡量电信运营商和互联网公司业务收入的指标.ARPU注重的是一个时间段内运营商从每个用户所得到的收入.很明显,高端的 ...
- string类函数和牛客网剑指offer刷题记录
1.strcat char* strcat(char *strDest,const char *strSrc){assert(strDest && strSrc);char *p = ...
- 牛客网产品笔试题刷题打卡——产品规划
最新文章
- JS-匀速运动-运动停止
- Oracle创建 表空间 用户 给用户授权命令
- java opencsv_用opencsv文件读写CSV文件
- 获江苏国资阿里小米等入股 苏宁易购复牌涨停
- 如何正确看待LeCun工作调整?听听FAIR研究员们现身说法
- wamp环境下php命令运行时出现错误:无法启动此程序,因为计算机中丢失OCI.dll。尝试重新安装该程序以解决此问题...
- apache实现手机访问www网站自动跳转到WAP站点
- 阿里云服务器无法远程连接mysql数据库_关于远程连接MySQL数据库的问题解决
- css样式基础库,WeUI基础样式库
- 2019年上半年软件设计师上午真题及答案解析
- 利用Python破解WiFi密码
- java物流实时跟踪
- 微信支付分 - 取消支付分API
- 智能家居之ESP8266接继电器接线方式
- python连接不上数据库_python连接各种数据库
- display:none和visibility:hidden的区别
- 计算机主板检测卡50,主板诊断卡怎么使用 主板诊断卡代码含义及处理方法
- c语言led左右循环程序,c语言编写程序,将led从左往右,再从右往左依次往返点亮...
- 2022年制冷与空调设备运行操作考试模拟100题及答案
- js文本框设置必填项_Jquery文本框小例(必填框)
热门文章
- 带音乐的计算机拿来当玩具,5款音乐玩具对决,带给孩子不一样的音乐世界
- Lumerical官方案例、FDTD时域有限差分法仿真学习(十八)——Y分支粒子群算法优化
- Wazuh开源主机安全解决方案的简介与使用体验
- Word学习笔记-项目实战
- 村田滤波器 双工器 SAFEA2G45RA0F00R15
- 2022 自动化测试岗位需求必备的 7 项技能 (最新版)
- js中取一个对象的部分属性
- 交易已无秘密 一个期货高手的终极感悟
- Java发邮件配置-hutool+腾讯企业邮箱
- 预产期计算器在线计算生男生女计算机,【测算生男生女】预产期计算器生男生女 帮你早知道宝宝的性别...