【C语言必知必会 | 子系列第二篇】深入剖析顺序结构(2)

引言

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。它在编程语言中具有举足轻重的地位。
此文为【C语言必知必会子系列】第二篇,基于进行C语言顺序结构的编程题专项练习,结合专题优质题目,带领读者从0开始,深度掌握知识点。

在这里插入图片描述

文章目录

    • 1️⃣ 前言
    • 2️⃣PTA专项练习
      • 7-1 顺序 - A-B
      • 7-2 顺序 - 彩色链子
      • 7-3 顺序 - 鸡兔同笼
      • 7-4 顺序 - 买房
      • 7-5 顺序 - 三角形
      • 7-6 顺序 - 飞机
      • 7-7 顺序 - wifi密码
      • 7-8 顺序 - 正六边形
      • 7-9 顺序 - 字符转换
      • 7-10 顺序 - 果汁的零花钱
      • 7-11 顺序 - 你迟到了
      • 7-12 顺序 - 买花
      • 7-13 顺序 - 剪绳子
      • 7-14 顺序 - 方和圆
      • 7-15 顺序 - 最短路
      • 7-16 顺序 - ASCII码值
      • 7-17 顺序 - 矩阵坐标
      • 7-18 顺序 - 摆火柴棒
      • 7-19 顺序 - 青春广场
      • 7-20 顺序 - 简化的A+B
      • 7-21 顺序 - 八进制
      • 7-22 顺序 - 台上一分钟台下十年功
      • 7-23 顺序 - 十位数是多少
      • 7-24 顺序 - 三角形面积
      • 7-25 顺序 - 距离
    • 3️⃣ 总结


1️⃣ 前言

在【C语言你还没卷起来?】系列中,我们学习了顺序结构、选择结构、循环结构等,同时也通过专项练习进行了知识点的巩固和手敲代码的锻炼。

在子系列中,我们将基于PTA教学平台,向C语言学习者提供更优质的题目与更巧妙、精髓的解题思想与方法。

PTA是一个程序设计类实验辅助教学平台,由千名老师共同建设,里面包含了上万道高质量题目,用户量达百万。

在本讲中,将深入讲解顺序结构的选择题,在思想上引领读者带领读者在理论结合实际的基础上更好地学习、吸收、掌握C语言。


2️⃣PTA专项练习

接下来,开始我们的顺序结构专篇练习。

7-1 顺序 - A-B

相信很多刚刚接触编程的人做的第一道题就是a+b,小明觉得很奇怪,为什么是a+b而不是a-b呢?所以小明这里要求大家做一次减法。当然单纯的a-b太简单了,所以小明提出了一个要求,那就是输出a-b结果的十位数,请大家编程满足这个奇怪的要求。

输入格式:输入为一行,包含两个整数a,b(0

输出格式:输出为一个数代表a-b的十位数

输入样例:

1323 1254

输出样例:

6

解题思路:
判断a-b的结果是否大于1000、小于1000大于100、小于100大于10,小于10
对于每种情况,求出十位数即可

代码如下:


#include 
int main()
{
	int a,b;
	scanf("%d %d",&a,&b);
	int x=a-b;
	if(x>1000)
	{
		printf("%d",x/10%10);
	}
	else if(x>100)
	{
		printf("%d",x/10%10);
	}
	else if(x>10)
	{
		printf("%d",x/10);
	}
	else{
		printf("0");
	}
	return 0;
}

7-2 顺序 - 彩色链子

某天盖茨不知道从哪里弄来n种颜色的珠子,你可以认为这些颜色的珠子足够使用。现在盖茨想把他们串起来,做成一条由4个珠子组成的长条形的链子,为了美观,要求相邻的珠子颜色不能一样,盖茨想知道能编成几种不同的链子。

输入格式:输入一行,仅包含一个整数n,代表盖茨拥有的珠子的颜色数量。

输出格式:输出一行,包含一个整数,代表能编成的不同链子的种类数。

输入样例:

5

输出样例:

320

解题思路:
我们拿颜色数量为2为例,设两个颜色为红、白。

一共有四个空,_,_,_,_,

第一个空有两个选择,由于相邻的珠子颜色不能重复,所以第二个空有一个选择,第三个空有一个选择,第四个空有一个选择,所以是2*(2-1)*(2-1)*(2-1)

我们再拿颜色数量为3为例,设三个颜色为红、白、黄。

一共有四个空,_,_,_,_,

第一个空有三个选择,由于相邻的珠子颜色不能重复,所以第二个空有两个选择,第三个空有两个选择,第四个空有两个选择,所以是3*(3-2)*(3-2)*(3-2)

代码如下:

#include 
int main()
{
	int n;
	scanf("%d",&n);
	printf("%d",n*(n-1)*(n-1)*(n-1));
	
}

7-3 顺序 - 鸡兔同笼

鸡兔同笼是我国古代著名趣题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。问笼中各有几只鸡和兔? 经过运算我们可以很快的得出兔子有12只,小鸡有23只。
现在请你编写一个程序,输入笼中头的个数H 和 脚的只数 F,输出笼中各有几只鸡和兔。

输入格式:输入为标准输入,输入共一行,包含两个正整数a和b,用空格隔开,分别表示笼子中头和脚的数量。且满足(0

输出格式:输出仅一行,包含两个整数,用空格分隔。分别代表鸡和兔子的数量。

输入样例:

2 4

输出样例:

2 0

解题思路:

该题存在一个数学关系:

兔的个数+鸡的个数=总头数

兔的个数*4+鸡的个数*2=总脚数

化简一下,兔的个数等于总脚数除以2再减总头数

鸡的个数等于总头数减兔的个数

代码如下:

#include 
int main()
{
	int a,b,tu,ji;
	scanf("%d %d",&a,&b);
	tu=b/2-a;
	ji=2*a-b/2;
	printf("%d %d",ji,tu);
	
}

7-4 顺序 - 买房

马斯克要买房子啦。大家都知道,房子是很贵的,所以他不能全款买房子,于是他决定贷款。
银行规定贷款的金额不能超过房子总价的70%,而且必须是整数万元。例如房子的总价是100万元,那么贷款的金额最多是70万元。
那么现在马斯克的钱不是那么的多,但是他的计算能力太差了,于是他需要你帮他计算出他能贷款的最大金额。
(友情提示:此题有坑点,大家小心)

输入格式:输入一个正整数N,表示房子的总价格(单位是万元,不超过int)

输出格式:输出一个整数,表示最大贷款金额(单位为万元)

输入样例:

100

输出样例:

70

解题思路:
举个例子,房价为101万元时,101*0.7=70.7,所以最大金额为70万元,我们可以发现将房价*7/10就能得到结果

代码如下:

#include
int main()
{
	int N;
	scanf("%d",&N);
	
	printf("%d",N*7/10);
	
}

7-5 顺序 - 三角形

毕达哥拉斯学了一年c语言,但是他现在不想做题。给你a,b,c三个整数作为三角形的三边,请你依次输出角A(b和c的夹角)、角B(a和c的夹角)、角C(a和b的夹角)的余弦值(之间用一个空格隔开,保留六位小数)。

输入格式:
输入只有一行三个整数:
a,b,c(0

输出格式:
输出角A(b和c的夹角)、角B(a和c的夹角)、角C(a和b的夹角)的余弦值(之间用一个空格隔开,保留六位小数)

输入样例:

1 1 1

输出样例:

在这里给出相应的输出。例如:

0.500000 0.500000 0.500000

这题较简单,考察公式的应用,关键点在于对2.0的处理。

代码如下:

#include 
int main()
{
	int a,b,c;
	double A,B,C;
	scanf("%d %d %d",&a,&b,&c);
	C=(a*a+b*b-c*c)/(2.0*a*b);
	B=(a*a-b*b+c*c)/(2.0*a*c);
	A=(-a*a+b*b+c*c)/(2.0*c*b);
	
	printf("%.6f %.6f %.6f",A,B,C);
}

7-6 顺序 - 飞机

陶喆的飞机又延误了,飞机本来是h1:m1:s1起飞,但现在已经h2:m2:s2了,请问陶喆已经等了多少秒(两个时间点在同一天,采用二十四小时计时法,且h2:m2:s2的时间会靠后)

输入格式:
输入两行分别为两个时间点(符合时间显示规则):
h1 m1 s1
h2 m2 s2
0<=h1,h2<=23
0<=m1,m2,s1,s2<=59

输出格式:
输出等待的秒数

输入样例:
在这里给出一组输入。例如:

18 30 00
19 00 00

输出样例:
在这里给出相应的输出。例如:

1800

解题思路:
分别对时、分、秒进行处理即可

代码如下:

#include 
int main()
{
	int h1,m1,s1,h2,m2,s2;
	scanf("%d %d %d",&h1,&m1,&s1);
		scanf("%d %d %d",&h2,&m2,&s2);
		
		printf("%d",(h2-h1)*3600+(m2-m1)*60+s2-s1);
	
}

7-7 顺序 - wifi密码

火星哥到学校的第一件事就是连上学校的WiFi,已知初始密码是学号的后六位。

输入格式:
输入长度为长度为8的学号(10000000~99999999)

输出格式:
输出对应的密码(注意前导0)

输入样例:

31702101

输出样例:
在这里给出相应的输出。例如:

702101

解题思路:

使用数组实现遍历即可

代码如下:

#include 
int main()
{
	int a[8],i;
	for(i=0;i<=7;i++)
	{
		scanf("%d",&a[i]);
	}
	
	for(i=2;i<=7;i++)
	{
		printf("%d",a[i]);
	}
}

然而这个程序有一个错误 当我们输入31702101的时候

我们以为数值3会储存到数组的第一个地址

然而实际上是31702101储存到数组的第一个地址

只有这样输入才能使每一个数储存到相应的地址:

3 1 2 7 0 2 1 0 1

然而这是违背题目要求的 怎么办呢?

这里介绍一下getchar

getchar是读入函数的一种。它从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。

所以我们可以这样利用:

#include 
int main()
{
	char a[8],i;
	for(i=0;i<=7;i++)
	{
		a[i]=getchar();
	}
	
	for(i=2;i<=7;i++)
	{
		printf("%c",a[i]);
	}
}

注意:getchar的读入类型为char类型,因此我们定义a[i]为char类型来获取getchar时,输出a[i]也要用%c


7-8 顺序 - 正六边形

现在要计算正六边形的面积,确保六条边均为整数。

输入格式:
输入一个整数:a(0< a <= 100)

输出格式:
输出正六边形的面积S(保留两位小数)

输入样例:

2

输出样例:

在这里给出相应的输出。例如:

10.39

解题思路:

考察数学关系,正六边形的面积为:(3√3/2)a^2

代码如下:

#include 
#include 
int main()
{
	int a;
	double s;
	scanf("%d",&a);
	s=1.5*sqrt(3.0)*a*a;
	printf("%.2f",s);
}

7-9 顺序 - 字符转换

现在有2个字母,第一个字母为小写字母,第二个字母为大写字母,请你将小写转化为大写,大写转化为小写。

输入格式:
输入只有一行,含有2个字母

输出格式:
输出转化后的字母(两字母中含有一个空格,行末换行)

输入样例:

a B

输出样例:

在这里给出相应的输出。例如:

A b

解题思路:

考察知识点:大写字母和小写字母的ASCII相差32

代码如下:

#include 
int main()
{
	char a,b;
	scanf("%c %c",&a,&b);
	printf("%c %c\n",a-32,b+32);
}

7-10 顺序 - 果汁的零花钱

果汁(PS:这是一个小朋友的名字)想让他的妈妈给他点零花钱,妈妈决定第一天给他一块钱,以后的每一天就再多给他一块钱,果汁打算忍痛攒钱。请问在第n天的时候他有多少钱呢?

输入格式:
输入只有一行一个整数:
n(0

输出格式:
输出得到的钱数

输入样例:

6

输出样例:

在这里给出相应的输出。例如:

21

解题思路:

公差为1的等差数列,使用for循环即可

代码如下:

#include 
int main()
{
	int n;
	int sum=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		sum+=i;
	}
	printf("%d",sum);

}

7-11 顺序 - 你迟到了

爱因斯坦和海森堡约好早上一起去学习的,但是爱因斯坦又赖床睡过了头,海森堡从m1分s1秒等到了m2分s2秒,他想要知道自己等了爱因斯坦多久,请你帮他算一下吧(m1、s1,m2、s2处于同一小时内,且保证m2、s2在m1、s1在之后)!

输入格式:
输入有两行:
第一行为等待的起始时刻:
m1 s1 (0<=m1,s1<=59)
第二行为等待的结束时刻:
m2 s2 (0<=m2,s2<=59)

输出格式:
输出等待的时间(格式为 xx:yy)

输入样例1:

3 8
9 15

输出样例1:

06:07

输入样例2:

3 8
3 15

输出样例2:

00:07

这题较简单,代码如下:

#include 
int main()
{
	int m1,m2,s1,s2,sum,fen,miao;
	scanf("%d %d %d %d",&m1,&s1,&m2,&s2);
	sum=(m2-m1)*60+(s2-s1);
	fen=sum/60;
	miao=sum%60;
	printf("%02d:%02d",fen,miao);
}

注意点:在C语言中,"%xyd"是一种格式化字符串,用于指定整数的输出格式。具体含义如下:

  • “%”:格式化字符串开始的标识符;
  • “x”:表示使用x来填充数字前面的空位;
  • “y”:表示最小字段宽度为y个字符;
  • “d”:表示待打印参数是一个带符号的十进制整数。

所以,"%xyd"的含义是将整数按照y个字符的宽度进行输出,并且不足y位的部分使用x进行填充。

例如,如果有一个整数变量 num = 5,使用"%02d"进行格式化输出时,将会输出 “05”。而如果 num = 15,输出结果则为 “15”。


7-12 顺序 - 买花

粉红猪惹呲溜喵生气了,于是粉红猪决定到花店给呲溜喵买她喜欢的花,粉红猪知道呲溜喵喜欢玫瑰,月季和茉莉花,已知花店有a朵玫瑰,b朵月季,c朵茉莉,花店的老板说这3种花只有以下的情况能够结成花束:

玫瑰和月季长相相似能够相互替代,只要有任意种类的3朵就能结成一束,而茉莉花比较特殊,不能自己单独成束,必须搭配一朵玫瑰或者月季才能成束(即茉莉花成束条件为:茉莉+月季或茉莉+玫瑰,此时花束仅需2朵花),请问现在花店中花的数目最多能够扎成几束呲溜喵喜欢的花束?

输入格式:

输入只有一行三个整数:
a,b,c(0

输出格式:

输出最多能够扎成的花束

输入样例:

20 30 2

输出样例:

在这里给出相应的输出。例如:

18
#include 
int main()
{
	int a,b,c,peitao1;
	scanf("%d %d %d",&a,&b,&c);
	//当c小于等于a+b的时候,最多有c束+(a+b)剩余的数目除以3
	if(c<=a+b){
	peitao1=(a+b-c)/3;
	printf("%d",peitao1+c);
	}
	
	//c>a+b时,最多只有a+b束
	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张图片
说明逗号被读入了 导致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张图片

所以我们需要一个东西,能把空格也赋值给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语言,读者可订阅专栏持续跟进。

你可能感兴趣的:(C语言零基础通关之路,c语言,算法,开发语言)