顺序结构

Hello,World!

编写一个能够输出 Hello,World! 的程序。

1
2
3
4
5
#include <stdio.h>
int main()
{
printf("Hello,World!");
}

输出结果:

Hello,World!

输出字符菱形

* 构造一个对角线长 55 个字符,倾斜放置的菱形。

简单粗暴法:

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main()
{
printf(" *\n");
printf(" ***\n");
printf("*****\n");
printf(" ***\n");
printf(" *\n");
}

慵懒粗暴法:

1
2
3
4
5
#include <stdio.h>
int main()
{
printf(" *\n ***\n*****\n ***\n *\n");
}
超级玛丽游戏

超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                ********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############

有一种printf多行字符串的写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
int main() {
printf(
" ********\n"
" ************\n"
" ####....#.\n"
" #..###.....##....\n"
" ###.......###### ### ###\n"
" ........... #...# #...#\n"
" ##*####### #.#.# #.#.#\n"
" ####*******###### #.#.# #.#.#\n"
" ...#***.****.*###.... #...# #...#\n"
" ....**********##..... ### ###\n"
" ....**** *****....\n"
" #### ####\n"
" ###### ######\n"
"##############################################################\n"
"#...#......#.##...#......#.##...#......#.##------------------#\n"
"###########################################------------------#\n"
"#..#....#....##..#....#....##..#....#....#####################\n"
"########################################## #----------#\n"
"#.....#......##.....#......##.....#......# #----------#\n"
"########################################## #----------#\n"
"#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\n"
"########################################## ############\n"
);
}
A+B Problem

输入两个整数a,b,输出它们的和;

1
2
3
4
5
6
7
8
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
c=a+b;
printf("%d",c);
}
字符三角形

给定一个字符,用它构造一个底边长 55 个字符,高 33 个字符的等腰字符三角形。

输入格式: 输入只有一行,包含一个字符。

输出格式: 该字符构成的等腰三角形,底边长 55 个字符,高 33 个字符。

1
2
3
4
5
6
7
#include<stdio.h>
int main()
{
int a;
scanf("%c",&a);
printf(" %c\n %c%c%c\n%c%c%c%c%c",a,a,a,a,a,a,a,a,a);
}
苹果采购

现在需要采购一些苹果,每名同学都可以分到固定数量的苹果,并且已经知道了同学的数量,请问需要采购多少个苹果?

输入格式:

输入两个不超过 109109 正整数,分别表示每人分到的数量和同学的人数。

输出格式:

一个整数,表示答案。保证输入和答案都在 int 范围内的非负整数。

1
2
3
4
5
6
7
8
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
c=a*b;
printf("%d",c);
}
字母转换

输入一个小写字母,输出其对应的大写字母。例如输入 q[回车] 时,会输出 Q。

1
2
3
4
5
6
7
8
#include<stdio.h>
int main()
{
char a;
scanf("%c",&a);
a-=32;
printf("%c",a);
}

在ASCII码表中,小写字母比大写字母大32.

数字反转

输入一个不小于 100100 且小于 10001000,同时包括小数点后一位的一个浮点数,例如 123.4 ,要求把这个数字翻转过来,变成 4.321 并输出。

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main()
{
float a,b;
int c,d;
scanf("%f",&a);
c=a*10;
d=c%10*1000+c/10%10*100+c/100%10*10+c/1000;//反转
b=(float)d/10;
printf("%5.1f",b);
}

运行结果:

656.8↙
865.6

浮点数不能取余,所以干脆变成整形转换,转换完成后在变回来。可以使用强制类型转换,也可定义中间变量。最后输出时“%5.1f”,意思是至少占5个字符宽度(包括一位小数和一个小数点),且小数点后面有1位小数,小数点占一位,所以整数部分至少占3位。

懒人法(直接利用字符串)

1
2
3
4
5
6
7
#include <stdio.h>
char a, b, c, d;
int main(){
scanf("%c%c%c.%c", &a, &b, &c, &d);
printf("%c.%c%c%c", d, c, b, a);
return 0;
}
再分肥宅水

现在有 t 毫升肥宅快乐水,要均分给 n 名同学。每名同学需要 2 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后3 位),以及一共需要多少个杯子。

输入格式:

输入一个实数 t 和一个正整数 n,使用空格隔开。

输出格式:

输出两行。

第一行输出一个三位小数,表示可以获得多少毫升饮料。第二行输出一个正整数,表示一共需要多少个杯子。

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
float a,c;
int b,d;
int main(){
scanf("%f %d",&a,&b);
c=a/b;
d=2*b;
printf("%0.3f\n%d",c,d);;
return 0;
}
三角形面积

输入格式:

第一行输入三个实数a*,b,*c,以空格隔开。

输出格式:

输出一个实数,表示三角形面积。精确到小数点后 1位。

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <math.h>
double a,b,c,p,s;
int main(){
scanf("%f %f %f",&a,&b,&c);
p=0.5*(a+b+c);
s=p*(p-a)*(p-b)*(p-c);
s=sqrt(s);
printf("%.1f\n",s);;
return 0;
}

double精度比float高,sqrt()是开根号的函数,使用时需引入头文件<math.h>。

上学迟到

学校和 yyy 的家之间的距离为 s 米,而 yyy 以 v 米每分钟的速度匀速走向学校。

在上学的路上,yyy 还要额外花费 10 分钟的时间进行垃圾分类。

学校要求必须在上午 8:00 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。

由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int s,v,t,a,b,c,d,hour,min;
int main(){
scanf("%d %d",&s,&v);
t=s/v+10; //计算所需总时间(min)
if(s%v) {t=t+1;} //考虑时间计算,整形数据会忽略小数(秒),当有小数(秒)时,分钟+1;
hour=t/60; //划分数据为时和分;
min=t%60;
if(t>=1440) {printf("输入条件无效,提前时间大于24小时。");}
else{
if(hour>8) {hour=8+24-hour;a=hour/10;b=hour%10;}
if(8>hour>0){a=0;b=8-hour;}
if(hour==0){a=0;b=7;}
if(min!=0) {min=60-min;c=min/10;d=min%10;}
else {c=d=0;}
printf("%d%d:%d%d\n",a,b,c,d);
}
return 0;
}

稍有麻烦的就是补零和时间格式。根据chatgpt建议修改代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int s,v,t,hour,min;
int main(){
scanf("%d %d",&s,&v);
t=s/v+10; //计算所需总时间(min)
if(s%v) {t=t+1;} //考虑时间计算,整形数据会忽略小数(秒),当有小数(秒)时,分钟+1;
hour=t/60; //划分数据为时和分;
min=t%60;
if(t>=1440) {printf("输入条件无效,提前时间大于24小时。");}
else{
if(hour>8) {hour=8+24-hour;}
if(hour<8&&hour>0) {hour=8-hour;}
if(hour==0) {hour=7;}
if(min==0) {min=60;}
printf("%02d:%02d\n",hour,60-min);
}
return 0;
}

在条件判断语句 8 > hour > 0 中,C 语言不支持连续的比较操作符(但我的编译器Dve能通过)。四位数的拆分可以通过输出格式前导零简化。不过还是没有通过洛谷的条件检测。可能有瑕疵尚未发现。

大象喝水

一只大象口渴了,要喝 2020 升水才能解渴,但现在只有一个深 h 厘米,底面半径为 r 厘米的小圆桶 (h* 和 r 都是整数)。问大象至少要喝多少桶水才会解渴。这里我们近似地取圆周率 π=3.14。

输入格式:

输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深 h 和底面半径 r,单位都是厘米。

输出格式:

输出一行,包含一个整数,表示大象至少要喝水的桶数。

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int h,r,v,k;
int main(){
scanf("%d %d",&h,&r);
v=3.14*r*r*h*100; //多乘100,保存精度并且是整形方便计算
k=2000000/v; //相应的,20升也变为2000升。
if(2000000%v) {k=k+1;}
printf("%d",k);
}

毕竟没有2.5桶水,也不能四舍五入。所以引入条件判断。

小鱼的游泳时间

伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。

这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按 2424 小时制计算),它发现自己从 ab 分一直游泳到当天的 c 时 d* 分,请你帮小鱼计算一下,它这天一共游了多少时间呢?

输入格式:

一行内输入四个整数,以空格隔开,分别表示题目中的 �,�,�,�a,b,c,d

输出格式:

一行内输出两个整数 ef,用空格间隔,依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 f 应该小于 6060。

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int a,b,c,d,e,f;
int main(){
scanf("%d %d %d %d",&a,&b,&c,&d);
f=(c-a)*60+d-b;
e=f/60;
f=f%60;
printf("%d %d",e,f);
}
小玉买文具

班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 11 元 99 角,而班主任给小玉的钱是 ab 角,小玉想知道,她最多能买多少只签字笔呢。

输入格式:

输入只有一行两个整数,分别表示 ab

输出格式:

输出一行一个整数,表示小玉最多能买多少只签字笔。

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int a,b,c;
int main()
{
scanf("%d %d",&a,&b);
c=a*10+b; //计算现金为多少角
c=c/19; //1元9角为19角
printf("%d",c);
}
成绩

牛牛最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:

总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%

牛牛想知道,这门课程自己最终能得到多少分。

输入格式:

三个非负整数 A*,B,C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是100 分。

输出格式:

一个整数,即牛牛这门课程的总成绩,满分也是 100 分。

1
2
3
4
5
6
7
8
#include <stdio.h>
int a,b,c,x;
int main()
{
scanf("%d %d %d",&a,&b,&c);
x=a*0.2+b*0.3+c*0.5;
printf("%d",x);
}