c语言习题---(if语句)

前言

亲爱的小伙伴们大家好啊,这篇文章我们将和c语言入门----详解分支语句(if语句)这篇文章结合到一起帮助大家更好的理解分支语句,这里我们将会根大家详细的讲解六道编程题,带着大家更好的入门,废话不多说我们开始吧。

编程题

第一题:
请添加图片描述
第二题:
请添加图片描述

第三题:
请添加图片描述
第四题:请添加图片描述
第五题:
请添加图片描述

第六题:
请添加图片描述

第一题详解

第一题:
请添加图片描述
我们首先可以看到这题目这里要求我们先输入三条边的长度,使其构成一个3角形,那么这里我们是不是就要考虑两个问题,第一个就是创建几个变量?第二个变量的类型是什?那么我们这里题目告诉了我们有三条边,那么我们这里就得创建3个变量,因为3条边的边长不一定为整数,所以我们这里变量的类型使用double类型。我们创建好了变量就得让使用者输入3条边的长度,那么这里我们就要使用到scanf函数来接收使用者输入的值,并且我们还要使用printf函数告诉使用者一些基本的信息,那我们的代码实现如下:

#include <stdio.h>//注明输入输出使用的头文件
int main()
{
	double a = 1.0;//创建变量
	double b = 1.0;
	double c = 1.0;
	printf("请输入三角形三条边的长度:\n");//告诉使用者基本信息
	scanf("%d %d %d", &a, &b, &c);//储存使用者输入的值
	return 0;
}

使用者在输入了三角形的三条边之后我们还得有一个判断的过程,其判断这个三角形能否成立?因为这里有两种情况分别是这个三角形成立和这个三角形不成立,那么我们这里是不是就得使用了if…else语句,那我们这里的判断的条件是什么呢?我们初中学到一个三角形要存在,那么他的三条边必须满足两边之和大于第三边,那么我们这里是不是就可以把这个运用上去,因为我们不知道使用者输入的那条边是最大的,那么我们这里也就得写3个表达式并且使用&&操作符将其并列起来,那么我们的代码实现如下:

#include <stdio.h>//注明输入输出使用的头文件
int main()
{
	double a = 1.0;//创建变量
	double b = 1.0;
	double c = 1.0;
	printf("请输入三角形三条边的长度:\n");//告诉使用者基本信息
	scanf("%d %d %d", &a, &b, &c);//储存使用者输入的值
	if (a+b>c&&a+c>b&&b+c>a)//三角形成立
	{
		语句块1 
	}
	else//三角形不成立
	{
		语句块2
	}
	return 0;
}

因为我们题目中指出当三角形不成立的时候得给出错误提示,那么我们这里的语句块2中就可以直接用printf函数打印输入的三角形错误,那我们这里的语句块1呢?它的功能是实现打印出该三角形的面积,那么这里我们就得用到我们高中学到的海伦公式:已知三角形的三边,三角形的面积S=√p(p-a)(p-b)(p-c),其中p=(a+b+c)/2,a,b,c是三角形的三条边。那么这里我们还得创建两个变量一个用于储存面积,一个就是p,但是想到这里我们还有一个问题没有解决就是我们如何来表示根号?那么这里我们就得介绍以下sqrt函数请添加图片描述
我们可以看一下这个函数的功能就是计算一个数字的平凡根,这个数字的类型是double类型,并且返回值也是double类型,使用这个函数得申明其头文件为<math.h>,那么这里我们就可以实现我们三角形面积的计算。其代码如下

#include <stdio.h>//注明输入输出使用的头文件
#include<math.h>//注明平方根函数使用的头文件
int main()
{
	double a = 1.0;//创建变量
	double b = 1.0;
	double c = 1.0;
	double p = 1.0;
	double s = 1.0;
	printf("请输入三角形三条边的长度:\n");//告诉使用者基本信息
	scanf("%d %d %d", &a, &b, &c);//储存使用者输入的值
	if (a+b>c&&a+c>b&&b+c>a)//三角形成立
	{
		p = (a + b + c) / 2;
		s = sqrt(p * (p - a) * (p - b) * (p - c));//计算三角形的面积
		printf("三角形的面积为%.2f", s);
	}
	else//三角形不成立
	{
		printf("a,b,c无法构成三角形\n");
	}
	return 0;
}

这样我们的第一题就写完了。

第二题详解

第二题:
请添加图片描述
我们可以看到这是一个分段函数,并且有四种不同的表达式同样也对应着不同的定义域,那么这里我们就可以用else if语句来实现这不同的情况,并且表达式可以根据其分段函数的不同的定义域来填写,首先我们得输入一个x,那么我们先创建变量x,然后将else if语句的大致框架写出来

#include<stdio.h>
int main()
	{
	int x = 0;
	scanf("%d", &x);
	if (表达式1)
	{
		语句块1 
	}
	else if (表达式2)
	{
		语句块2
	}
	else if (表达式3)
	{
		语句块3
	}
	else
	{
		语句块4
	}
	
		return 0;
	}

因为这是个分段函数,那么我们的表达式可以根据这个不同的定义域来填写,然后大家要注意的一点就是我们这里的分段函数的第四个函数,他的定义域是其他,那么我们就应该把这种情况放到else语句里面,因为这个其他所代表的定义域太多了,我们就直接将这个最复杂的放到最后一个,那么其他比较好写的情况我们就可以将其一一列举出来,语句块里面我们就可以直接用printf函数打印y的值无需再创建变量其代码如下:

#include<stdio.h>
int main()
	{
	int x = 0;
	scanf("%d", &x);
	if (-5<x&&x<0)//情况1 
	{
		printf("y的值为%d",(x-1));
	}
	else if (x==0)//情况2 
	{
		printf("y的值为%d",x);
	}
	else if (0<x&&x<8)//情况3
	{
		printf("y的值为%d",(x+1));
	}
	else//情况4 
	{
		printf("y的值为%d",(10));
	}
	
		return 0;
	}

第三题详解

第三题:

请添加图片描述
这道题就有那么点意思了,首先他们要我们输入一个字符,那么这里我们是不是得创建一个变量来接收这个字符,而且这个变量的类型为字符型,那么我们这里就要用到scanf函数,并且我们得告诉使用者一些基本的操作,比如要他输入一个字符,那么这里就得用到printf函数,然后我们看到这里有判断的地方,并且判断的情况有3种,那么这里我们就要使用else if语句,代码实现如下

#include<stdio.h>
int main()
{
	char x = 'a';
	printf("请输入一个字符\n");
	scanf("%c", &x);
	if ()//情况1 
	{
		语句块1 
	}
	else if ()//情况2 
	{
		语句块2
	}
	else//情况3
	{
		语句块3
	}
	return 0;
}


那我们来看这里的表达式如何实现,首先我们来看看ascall表
在这里插入图片描述
不知道大家能不能看清,如果看不清楚的话,大家可以在网上搜索一下,大家通过观察这个ascall表应该可以发现里面的规律,大写的英语字母之间的序号是连续的是从65到90,小写的字母之间的序号也是连续的是97到122,而且我们知道,其实字符在计算机存储的形式就是按照这个序号来存储的,就比如我们输入了一个字符‘a’,我们看到的是a其实电脑就会将这个a转换成所对应的ascall值97,然后把这个97储存到电脑里面,那我们先来看第一个表达式,假设第一个语句块的功能是让输入的小写字母变大写,那我们这里进入语句块1的条件就是:输入的是字符并且还得是小写的,那么我们如何来判断输入的是字符并且是小写呢?我们先来看如何判断是字符?因为我们前面的scanf函数他本来就得输入一个字符才能成功的接收,那么我们这里一定是字符,然后我们知道字符储存的形式也是整形,是整形的话,我们这里就可以使用关系操作符来进行比大小,小写的字母是‘a’到‘z’那我们就可以直接拿来比大小,大写的也一样大家可以看代码

#include<stdio.h>
int main()
{
	char x = 'a';
	printf("请输入一个字符\n");
	scanf("%c", &x);
	if ('a'<=x&&x<='z')//情况1 
	{
		语句块1 
	}
	else if ('A'<=x&&x<='Z')//情况2 
	{
		语句块2
	}
	else//情况3
	{
		语句块3
	}
	return 0;
}

我们的判断的过程实现了之后我们就想如何实现将大写变成小写,如何将小写变成大写,这里大家再看一下那个表,你们会发现同一个字母的大小写之间的ascall值相差的值为32,那么我们是不是就可以通过这个32来实现大写变小写,小写变大写,如果输入的字符不是字母的话,我们是不是就可以原封不动的再打印一遍,那么对应的代码如下:

#include<stdio.h>
int main()
{
	char x = 'a';
	printf("请输入一个字符\n");
	scanf("%c", &x);
	if ('a'<=x&&x<='z')//情况1 
	{
		printf("%c\n", (x - 32));//将小写变成大写
	}
	else if ('A'<=x&&x<='Z')//情况2 
	{
		printf("%c\n", (x + 32));//将大写变成小写
	}
	else//情况3
	{
		printf("%c\n", x);//原样返回
	}
	return 0;
}

那么这里我们这道题就结束了。

第四题详解

第四题:请添加图片描述
大家看到这个题,首先我们得告诉使用者他应该干嘛所以这里得使用printf函数,然后我们得创建3个变量,使用scanf函数存储输入的数字那我们的代码如下:

#include<stdio.h>
int main()
{
	printf("请输入三个整数\n")
	int a = 0;//创建变量
	int b = 0;
	int c = 0;
	scanf("%d", &a);//存储数据
	scanf("%d", &b);
	scanf("%d", &c);
	return 0;
}

然后题目说最大的放到变量c里面,最小的放到变量a里面,那么我们这里是不是就有个判断的过程,那我们这里用什么语句来进行判断呢?这里我们就用一个最简单的方法,因为数据的数量较少那我们每个之间都比较一次不就够了吗,所以这里我们使用3次if语句,那我们先a和b进行比较:如果a大于b,那我们就把a和b的值进行一次互换。比较完之后再a和c进行比较:如果a大于c,那么我们就把a和c的值进行一次互换,我们再把b和c进行一次比较:如果b的值大于c那么就把b和c的值进行一次互换这样我们就可以把最大值放到c里面,最小的值放到a里面代码实现如下:

#include<stdio.h>
int main()
{
	int a = 0;//创建变量
	int b = 0;
	int c = 0;
	scanf("%d %d %d", &a,&b,&c);//存储数据
	if (a > b)
	{
		int t = a;
		a = b;
		b = t;
	}
	if (a > c)//此时a已经是最小的值
	{
		int t = a;
		a = c;
		c = t;
	}
	if (b > c)//让c成为最大值
	{
		int t = b;
		b = c;
		c = t;

	}
	printf("%d<=%d<=%d",a,b,c);
	
	return 0;

第五题详解

第五题:
请添加图片描述
这里我们首先我们得使用printf函数告诉使用者我们应该干嘛,然后我们得创建一个整型变量用于存储玩家输入的值,既然玩家要输入值那么我们这里也就得使用scanf函数,又因为这里输入的数是有规定的是一个三位数,所以我们这里就得有限制,如果输入的数据不在我们的范围我们就会结束程序,并且告诉使用者输入的数据错误,如果正确的话就会继续进行判断,那么我们这里有两种情况,分别是是三位数和不是三位数,那么我们就可以使用if…else语句其代码如下:

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (100 <= a && a < 1000)//判断为三位数
	{
		语句块
	}
	else//判断不是三位数
	{
		printf("输入的数据有误\n");
	}
	return 0;
}

那么我们输入了一个3位数之后就要进入了判断是否为水仙数的阶段,我们通过题目给的提示就可以知道,要想判断一个数是否为水仙数的话得先得到每一位的数字因为为三位数,所以这里我们这里可以创建3个变量,然后用%和/操作符。要想得到个位数的数字很简单,我们直接用a%10就可以得到,同样的道理,要想得到百位上的数字我们也就可以直接让a/100就可以得到,那我要是想得到十位数上的数字呢?那这里我们就先得到a/10这个结果这样就变成了一个两位数,然后这个两位数上的个位数,是不是就是之前三位数的十位数,那我要想得到这个个位数可以直接再%10,那总的来说就是十位数是a/10%10,那么我们这里就差不多就完成了这道题,最后再进行判断部分,那么这里是不是两种情况一种是是水仙数,另一种就是不是水仙数,那么我们这里就可以使用if…else语句就可以完成判断,再根据判断的条件写出表达式,其判断条件就是我们题目上面的给的其代码实现如下:

#include<stdio.h>
int main()
{
	int a = 0;
	int ge = 0;//
	int bai = 0;//
	int shi = 0;//
	scanf("%d", &a);
	if (100 <= a && a <= 1000)//判断为三位数
	{
		bai = a / 100;//计算百位数上的值
		shi = a/ 10 % 10;//计算十位数上的值
		ge = a % 10;//计算个位数上的值
		if (a == ge * ge * ge + bai * bai * bai + shi * shi * shi)
		{//判断是水仙数
			printf("%d是水仙数\n",a);
		}
		else
		{//判断不是水仙数
			printf("%d不是水仙数\n",a);
		}
	}
	else//判断不是三位数
	{
		printf("输入的数据有误\n");
	}
	return 0;
}

第六题详解

第六题:
请添加图片描述
看到这个题是不是有种梦回初中的感觉,我们首先得用printf函数来告诉使用者一些基本的信息,然后我们得创建三个变量来接收输入的值,那么这里也就得用到scanf函数,我们在求一个一元二次方程的根的时候,是不是会用到一个公式其中一个就叫德尔塔,根据德尔塔大于0,小于0,等于0又将其分成三种情况,所以我们这里就得用到else if语句,如果德尔塔大于0就会有两个根,那么我们这里也就得再创建3个变量,又因为我们解出来的根可能为小数,我们这里有两个变量的类型得为double类型其代码如下:

#include<stdio.h>
int main()
{
	int a = 0;//输入的三个值
	int b = 0;
	int c = 0;
	int delta = 0;//创建变量delta
	double x1 = 1.0;//创建变量用于储存解出来的值
	double x2 = 1.0;
	printf("请输入方程的3个系数\n");
	scantf("%d %d %d", &a, &b, &c);
	delta = b * b - 4 * a * c;
	if (delta > 0)
	{
		语句块
	}
	else if (delta == 0)
	{
		语句块
	}
	else
	{
		printf("该方程没有实根\n");
	}
	return 0;
}

那么这里的语句块我们就可以结合解方程的公式来得出根的值,这里我们又要用到sqrt函数,这个函数我们上面讲过这里就不多进行讲解,那么其代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int delta = 0;
	double x1 = 1.0;
	double x2 = 1.0;
	printf("请输入方程的3个系数\n");
	scantf("%d %d %d", &a, &b, &c);
	delta = b * b - 4 * a * c;
	if (delta > 0)//如果delta大于0有两个实根
	{
		x1 = (-b + sqrt(delta) / 2 * a);//计算根的值
		x2 = (-b - sqrt(delta) / 2 * a);
		printf("方程的解为:x1=%.2lf,x2=%.2if\n", x1, x2);

	}
	else if (delta == 0)//如果delta等于0有两个相等的实根
	{
		x1 = x2 = -b / (2.0 * a);
		printf("方程的解为:x1==x2=%.2if\n", x1);
	}
	else//如果delta小于0没有实根
	{
		printf("该方程没有实根\n");
	}
	return 0;
}

那么这里我们这道题就写完了

小结

这里我们试着做了6道编程题,带着大家一步一步的写了下去,分享一些自己平时写代码的一些思路,那么这里希望大家能自己下去尝试一下,谢谢大家阅读。我们一起进步。这里为了方便大家学习,这六道题的代码我创建了一个链接大家可以直接拿去使用:

六道题的代码链接点击直接跳转查看
大家在里面找到一个源.c文件就可以路径为分支语句(if语句)的习题—分支语句(if语句)的习题—源.c

  • 42
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叶超凡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值