浅谈C语言——正式步入C语言学习(1)

浅谈C语言——正式步入C语言学习(1)

嗨喽!已经迫不及待了,上新喽!
本次阅读大约七分钟,快来浏览阅读吧!!!

本文章参考《C语言程序设计现代方法(第二版)》以及根据自己所学的总结,不正确或者不适当的地方欢迎批评指正,主要以学习总结以及应用为主,在深入学习的同时也会及时更正不适合的地方。

一、基础了解:

1、 if语句和switch语句
2、 布尔类型和逻辑类型
3、 0(假)1(真)
4、 关系运算符的优先级低于算数运算符,且为左结合。如:i+j<k-1意思是(i+j)<( k-1)
5、 对于逻辑运算产生的结果是0和1,操作数的值经常是0和1,但这不是必须的。
在这里插入图片描述
我们在记忆逻辑时,不妨按照高中数学所学的且或非来记忆
高中数学我的理解:
在这里插入图片描述
注意:在C语言逻辑中:非零则为1,“=”在C语言中意味着赋值,“==”在C语言中意味着判等。
例:
表达式1和表达式2非零值,表达式0为0值时

  • 表达式1&&表达式2,结果为1;
  • 表达式0(0值)&&表达式1,结果为0;
  • 表达式1||表达式2,结果为1;
  • 表达式0(0值)||表达式1,结果为1;

好了,以上是对于正式步入C语言学习的基础知识,接下来继续进阶!

二、选择结构

1、if……else…语句

(1)if语句
一般形式:if (表达式)语句,“()”不可省略

接下来看一段程序来慢慢理解:

/*一个简单的单分支结构*/

#include <stdio.h>
int main()
{
	int a;
	scanf("%d",&a);

if(a>10&&a<=20)
	{
printf("棒\n");
}

if(a>20&&a<=50)
	{
printf("这么棒\n");
}

if(a>50&&a<=100)
	{
	   printf("突破一下\n");
}

	return 0;

}

一段小测试
嗯,就是这样,哈哈哈哈哈,突破一下!
非常简单的小程序
在这里插入图片描述
在if模板中,语句是一条语句而不是多条语句,如果想用if语句处理两条或者更多条语句,则需要引入复合语句格式,即在执行部分加 “{.….}”。
(2)else子句
一般形式:if (表达式) 语句 else语句,其内部表达式均已分号结尾

/*一个简单的if...else*/

#include <stdio.h>
int main()
{
	int a;
	scanf("%d",&a);

if(a<=20)
{	
printf("棒\n");
    }
else
	{
	  printf("这么棒\n");
}
	return 0;
}

也是很简单基础的小程序,比较棒
写起来很有自信,哈哈哈哈
在这里插入图片描述
接下来一个就有点意思,各位看官继续往下看!
(3)级联式if语句
关于级联式if语句一般形式为:
if (表达式) else if(表达式)else
这种级联式if语句方法避免了判定数量过多过度缩进的问题,这种形式表明这组语句只是一连串的判定,这仅仅是普通if语句的延伸。
看一下比较常规简单的程序:

/*一个简单的级联式if语句*/
#include <stdio.h>
int main()
{
	int n;
	printf("请输入一个数:\n");
	scanf("%d",&n);
	if(n<12)
		printf("n is less than 12\n");
	else
		if(n==0)
			printf("n is equal to 12\n");
	else
		printf("n is greater than 12\n");

	return 0;

}

在这里插入图片描述

就这样,其实是个if函数差不多。
写程序嘛,难免有出现错误,这不,错误接着就来了,在这一次就出现了一个经常犯而且比较致命而且改的时候很头疼的一个小问题。

(4)在写程序时,不免有许多错误,关于else有一种著名的“悬空else”问题。
如:

扫描二维码关注公众号,回复: 11564086 查看本文章
/*一个简单的悬空else问题*/

#include <stdio.h>
int main()
{
	float x,y,result;
	scanf("%d%d",&x,&y);
	if(y !=0)
		if(x !=0)
		
			result = x/y;
		    printf("result is: %f\n",result);
		
		else
		printf("Error:y is equal to 0\n");
		
	return 0;

}

这就出现了错误:illegal else without matching if,小编英文不好,说是if后面的程序包没有用{ }包围起来。
错误不可怕,改了错还是好孩子,那就来吧!
修正如下:

/*一个简单的悬空else问题*/

#include <stdio.h>
int main()
{
	float x,y,result;
	scanf("%d%d",&x,&y);
	if(y !=0)
		if(x !=0)
		
		{	result = x/y;
		    printf("result is: %f\n",result);
		}
		else
		{
			printf("Error:As a result, there are some problems\n");
		}
	return 0;

}

在这里插入图片描述

哎呀,犯贱了,给他来个不正常的看看情况。
果不其然运行结果出现illegal else without matching if错误,那我们现在修改一下,在各个语句加花括号强制执行,则运行正确!

这种问题就是悬空问题,编译软件已经分不清楚该执行哪一个,处于“懵逼”状态,就好像在想“执行哪一个都可以,但是我只执行一条我应该执行哪一个呢?”
其实if语句中else子句执行的是离他近的并且没有和其他if….else语句搭配的,上面出现错误的很明显printf(“result is: %f\n”,result);和printf(“Error:y is equal to 0\n”);都符合他的执行范围,所以要加上花括号给他一个更明确地执行命令,所以运行正确。

:在if语句中可以嵌套多个if…else语句,但是为了明确分层,即明确各个if语句else子句的嵌套情况,建议各个分层等级的不同则缩进字符不同并且适当增减花括号,这样的目的主要是为了大量的程序出现问题或者寻找不合适的地方时,进行方便查找和改正,也可以适当避免一些错误,并且非常清楚的阅读。

二、switch语句

说完上边的if…else,还有一种选择语句为switch语句,这个语句是很普遍使用的,看一下具体形式:
witch(表达式)
{
case 1:语句1;
break;
case 2:语句2;
break;
……….
default:语句n;
break;
}

是不是比较长,不过没关系,上手率很高的。

这个语句和前一个语句到底是什么关系呢?不如我们通过具体程序了解对比一下吧,为了让更多看官比对更清楚,不如直接上图比对!
在这里插入图片描述

在这里插入图片描述
哈哈哈哈,是不是very good 啊。

对比可以发现if函数中写法是较为麻烦,但是一目了然。对于switch函数简单快捷,写法简短不必写多余的表达式即可完成,只需在switch开头定义一次表达式声明一下,说明case函数的语句均是属于此表达式的,不必再如此繁琐的一次一次的说明一遍。
对于break语句是由于switch语句实际上是一种“基于计算的跳转”,对于表达式计算时直接跳转到switch想匹配的地方进行计算输出即可。

接下来最后是一个小知识点,而且比较重要,很好掌握的,耐心看完好吗!

二、 条件表达式

一般形式为 [条件表达式] 表达式1?表达式2:表达式3
条件表达式是C语言运算符中唯一一个要求3个操作数的运算符。故称三元运算符。
一般此种的表达式就相当于返回一个结果。“真”的话返回表达式1;“假”则返回表达式3。
废话不多说,直接上图!
(1)

/*一个简单的条件表达式*/
#include<stdio.h>

int main()
{
	int a,b,c;
	printf("请输入a和b的值:");
	scanf("%d%d",&a,&b);
	c=a>b?a:b;
	printf("值为:%d\n",c);
	return 0;
}

在这里插入图片描述

(2)`


/*一个简单的条件表达式*/
#include<stdio.h>

int main()
{
	int a,b,c;
	printf("请输入a和b的值:");
	scanf("%d%d",&a,&b);
	printf("值为:%d\n",a>b?a:b);
	return 0;
}

在这里插入图片描述
很显然,两套程序就是简单示范一下用法,对于比较来说还是比较好用的。

好了,过的真快,本期阅读结束了,是不是非常适合初学者和想重新掌握C语言的朋友呢,有问题可以评论留言也可以私信的哦。
阅读的同时不要忘记点赞、关注、评论,各位朋友,下期见!!!

猜你喜欢

转载自blog.csdn.net/weixin_43540527/article/details/107839134