输出格式:
输出最多能够扎成的花束
输入样例:
20 30 2
输出样例:
在这里给出相应的输出。例如:
18
#include
int main()
{
int a,b,c,peitao1;
scanf("%d %d %d",&a,&b,&c);
if(c<=a+b){
peitao1=(a+b-c)/3;
printf("%d",peitao1+c);
}
else{
printf("%d",a+b);
}
}
7-13 顺序 - 剪绳子
在挑选完花后,高斯需要礼品绳将花朵绑起来,老板有一条长L米的礼品绳,需要将礼品绳截成长为x米的小段,请问老板能截成几小段呢,如果截完后礼品绳有剩,剩了多少米呢?(结果保留一位小数)
输入格式:
输入只有一行两个数:
L x ( 0<=L<=x<=1000)
输出格式:
输出能截的段数和剩余的长度(中间用空格隔开,行末换行):
输入样例:
在这里给出一组输入。例如:
15.0 5.0
输出样例:
在这里给出相应的输出。例如:
3 0.0
本题较简单,代码如下:
#include
int main()
{
double l,x;
scanf("%lf %lf",&l,&x);
printf("%.0f %.1f",l/x,l-(l/x)*x);
}
"%.0f"
表示输出一个浮点数,并且不保留小数部分;
7-14 顺序 - 方和圆
已知一个圆的半径r,请问你能求出它的外接正方形和内接正方形的面积,和正方形内接时占圆的百分比,正方形外接时,圆占其的百分比嘛?(π取3.14 ,结果保留2位小数)
输入格式:
输入只有一行一个整数:
r ( 0<=r<=100)
输出格式:
第一行输出内接正方形的面积和正方形内接时的占比中间用一个空格隔开。
第二行输出外接正方形的面积和外接时的占比同样用空格隔开。
输入样例:
3
输出样例:
18 63.69%
36 78.50%
解题思路:
圆的外接正方形面积为2*r*2*r
圆的内接正方形面积为2*r*r
代码如下:
#include
int main() {
int r;
scanf("%d", &r);
int swai, snei;
double zhan1, zhan2;
swai = 2*r*2*r;
r;
snei = 2*r*r;
zhan1 = snei /(3.14 * r * r) * 100;
zhan2 = (3.14 * r * r)/swai * 100;
printf("%d %.2f%%\n", snei, zhan1);
printf("%d %.2f%%", swai, zhan2);
}
注意:如果你想要打印输出一个百分号(%),需要使用两个连续的百分号(%%)来表示。这是因为百分号(%)在printf函数中有特殊的含义,用于格式化输出。
7-15 顺序 - 最短路
在一个8*8的棋盘上,国王的家在A1的位置,现在国王站在棋盘的某一个位置,他感到十分的疲惫,于是他想尽快回到自己的家,请告诉他最少可以走几步回到自己的家
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hpXGC6kk-1689318291160)(D:/%E5%8A%9E%E5%85%AC/Typora/%E5%9B%BE/e948d7f9-282d-4ece-b350-035a8d6a3bb5.png)]
(国王只能向上下左右四个格子走,走一格算一步。)
输入格式:
输入一行,为国王现在的坐标。
棋盘的坐标由两个字符组成,第一个是一个大写字母(从A到H),第二个是一个数字(从1到8)。
输出格式:
输出国王回家所需的最短距离。
输入样例:
H1
输出样例:
7
解题思路:
单独算水平方向和竖直方向即可
代码如下:
#include
int main()
{
int a;
char b;
scanf("%c %d",&b,&a);
printf("%d",b-'A'+a-1);
}
7-16 顺序 - ASCII码值
给定一个字符,请输出他的ASCII码值。
输入格式:
输入仅有一个可见字符。
输出格式:
输出给定字符的ASCII码值。
输入样例:
a
输出样例:
97
简单的类型转换,代码如下:
#include
int main()
{
char a;
scanf("%c",&a);
printf("%d",a);
}
7-17 顺序 - 矩阵坐标
在9*9的矩阵中,每个点都可以表示成一个坐标,坐标由两个字符组成,第一个是一个大写字母(从A到I),第二个是一个数字(从1到9)。
小明写坐标时总是不规范,比如A1位置,小明有时写成“A 1”,有时写成“A,1”,有时写成“A.1”。现在小明想把从前写的坐标都规范化成“(x,y)”形式,即A1位置写成“(A,1)”形式。
输入格式:
输入仅有一行,包含一个坐标,坐标的两个字符会用一个空格或者一个逗号或者一个点隔开。
输出格式:
输出规范化的坐标形式,即“(x,y)”形式(输出不包括引号)。
输入样例:
A 1
输出样例:
在这里给出相应的输出。例如:
(A,1)
本题较为简单,代码如下:
#include
int main()
{
char a;int b;
scanf("%c %d",&a,&b);
printf("(%c,%d)",a,b);
}
程序存在一个问题,当输入的格式为 a,b时
结果如下:
![【C语言必知必会 | 子系列第二篇】深入剖析顺序结构(2)_第1张图片](http://img.e-com-net.com/image/info8/62f1a7af5e074d9a825814c98ed7d8ca.jpg)
说明逗号被读入了 导致1没被读入 如何避免呢?
取三个参数,使用中间的参数来替代逗号就行
#include
int main()
{
char a,b;int c;
scanf("%c %c %d",&a,&b,&c);
printf("(%c,%d)",a,c);
}
但是这样的话,空格并不会赋值给b
![【C语言必知必会 | 子系列第二篇】深入剖析顺序结构(2)_第2张图片](http://img.e-com-net.com/image/info8/667d093429ba409c80ec3fa96b6688c6.jpg)
所以我们需要一个东西,能把空格也赋值给b
因此使用getchar即可
代码如下:
#include
int main()
{
char a,b;int c;
a=getchar();
b=getchar();
scanf("%d",&c);
printf("(%c,%d)",a,c);
}
7-18 顺序 - 摆火柴棒
Alice很喜欢摆火柴棒玩,她经常用火柴棒摆成各种奇奇怪怪的图案。
现在她有N(N为偶数)根火柴棒,她可以将这些火柴棒摆成一个长方形,但是她惊奇的发现不是每次摆成的长方形面积都相同。
假设每根火柴棒的长度相同,横截面半径长度不记,现在她想知道可以摆成的长方形最大面积是多少。
由于Alice很爱惜这些火柴棒,她不允许将任意一个火柴棒折断。
输入格式:
输入仅有一行,包含一个偶数N(4<=N<=10000),即火柴棒的个数。
输出格式:
输出仅有一行,包含一个整数,为长方形的最大面积。
输入样例1:
8
输出样例1:
4
输入样例2:
10
输出样例2:
6
解题思路:
找数学关系:
有4个的时候
长为1 宽为4/2-1时面积最大
有6个的时候
长为2 宽为6/2-2时面积最大
有8个的时候
长为2 宽为8/2-2时面积最大
所以长的通项为N/4 宽为N/2-N/4(不可写成N/4)
代码如下:
#include
int main()
{
int N;
scanf("%d",&N);
printf("%d",N/4*(N/2-N/4));
}
7-19 顺序 - 青春广场
位于福大生活一区的青春广场是一个大小为n*m的长方形。为了更好地让同学们在青春广场上开展活动,现准备将青春广场用正方形花岗岩石板重新铺一遍。每一个正方形花岗岩石板边长为a。
请问最少需要多少石板才能覆盖整个青春广场?覆盖范围可以大于青春广场,但是切割石板是不允许的。
输入格式:
输入包含3个正整数:n,m,a(1<=n,m,a<=10000)
分别代表青春广场的长度,宽度和石板的边长。
输出格式:
输出最少需要的石板的数量。
输入样例:
6 6 4
输出样例:
4
解题思路:
考虑长、考虑宽、将两者当为整体再考虑
代码如下:
#include
int main()
{
int n,m,a;
scanf("%d %d %d",&n,&m,&a);
if(n%a==0&&m%a==0)
{
printf("%d",n/a*m/a);
}
if(n%a!=0&&m%a==0)
{
printf("%d",(n/a+1)*m/a);
}
if(n%a==0&&m%a!=0)
{
printf("%d",n/a*(m/a+1));
}
if(n%a!=0&&m%a!=0)
{
printf("%d",(n/a+1)*(m/a+1));
}
}
7-20 顺序 - 简化的A+B
小明今年3岁了, 现在他已经能够认识100以内的非负整数, 并且能够进行100以内的非负整数的加法计算。
对于大于等于100的整数, 小明仅保留该数的最后两位进行计算, 如果计算结果大于等于100,那么小明也仅保留计算结果的最后两位。
例如, 对于小明来说:
1) 1234和34是相等的
2) 35+80=15
给定非负整数A和B, 你的任务是代表小明计算出A+B的值。
输入格式:
输入包含两个非负整数A和B (A和B均在int型可表示的范围内)。
输出格式:
对于所给数据,输出小明A+B的结果。
输入样例:
35 80
输出样例:
在这里给出相应的输出。例如:
15
解题思路:
先判断A,B是否大于100,如果大于100,则取后两位
再计算A+B的值是否大于100,如果大于100,则取后两位
代码如下:
#include
int main()
{
int a,b,sum=a+b;
scanf("%d %d",&a,&b);
if(a>=100)
{
a=a%100;
}
if(b>=100)
{
b=b%100;
}
if(a+b>=100)
{
sum=(a+b)%100;
}
printf("%d",sum);
}
7-21 顺序 - 八进制
给定一个十进制数,把它转化为八进制数。
HINT: 可以查查输出格式符
输入格式:
输入仅有一行,包含一个十进制数。
输出格式:
输出转化为八进制后的数。
输入样例:
9
输出样例:
11
解题思路:
C语言格式字符输出格式有d,o,x,u,c,s,f,e,g等。%d整型输出,%ld长整型输出,%o以八进制数形式输出整数,%x以十六进制数形式输出整数
代码如下:
#include
int main()
{
int a;
scanf("%d",&a);
printf("%o",a);
}
7-22 顺序 - 台上一分钟台下十年功
俗话说“台上一分钟台下十年功”,我们观看了一个演员的表演,不知道他到底训练多久,根据给出表演的时间,现在你的任务是要帮忙计算出演员的训练时间,训练时间以年为单位。
输入格式:
输入包含3个整数 a,b,c。表示表演了a天b小时c分钟。(0<=a,b,c<=10^6)
输出格式:
输出一个数表示训练时间多少年。
输入样例:
1 2 3
输出样例:
15630
找出数学关系即可,代码如下:
#include
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d",(a*24*60+b*60+c)*10);
}
7-23 顺序 - 十位数是多少
小明刚学习了C 语言刚学习到取模运算。他知道如果要知道一个数个位上的数值只需对10取模即可。现在他遇到一个问题。求一个大于等于10的正整数的十位上的数字是多少。
现在请你替他想办法求出这个数。
输入格式:
输出 a (10<=a<=10^9);
输出格式:
输出一整数表示a十位上的数字
输入样例:
110
输出样例:
1
解题思路:
a可能是几十,也就能是几百
如果仅使用a/10只适合a为几十的情况
所以我们可以先除以10,再取余10
代码如下:
#include
int main()
{
int a;
scanf("%d",&a);
printf("%d",a/10%10);
}
7-24 顺序 - 三角形面积
给定三条边,输出三角形的面积。
海伦公式:
假设三边长为a,b,c;
p=(a+b+c)/2
则三角形面积的平方s^2=p*(p-a)(p-b)(p-c)
输入格式:
输入数据包含三个正数a, b, c。其中a, b, c <1000。
输出格式:
输出三角形的面积,结果保留两位小数。
输入样例:
3 4 5
输出样例:
6.00
本题较为简单,代码如下:
#include
#include
int main()
{
double a,b,c,p,s;
scanf("%lf %lf %lf",&a,&b,&c);
p=(a+b+c)/2.0;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.2f",s);
}
7-25 顺序 - 距离
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
HINT:需要用到中的sqrt函数。
输入格式:
输入数据由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
输出格式:
输出一行,表示两点间距离,结果保留两位小数。
输入样例:
1 1 0 0
输出样例:
1.41
考察两点间距离公式,代码如下:
#include
#include
int main()
{
double a,b,c,d;
scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
double s;
s=sqrt((a-c)*(a-c)+(b-d)*(b-d));
printf("%.2f",s);
}
3️⃣ 总结
此文为 【C语言必知必会】子系列第二篇 ,通过以题代练的形式带领读者掌握C语言的顺序结构,带领读者从0开始,深度掌握知识点。
以题代练对于C语言的学习是十分重要的,专栏将持续提供优质C语言编程题与理论课的学习,带领读者全方位掌握C语言,读者可订阅专栏持续跟进。