针对在校大学生的C语言入门学习——变量运算

针对在校大学生的C语言入门学习——变量运算

前言

  • 本人是一名国内知名嵌入式培训机构的讲师,常年给高校的大学生做嵌入式的实训。发现90%以上的大学生在校期间都不能很好的掌握C语言。难道是大部分同学都不喜欢自己千辛万苦报考的专业吗?显然并不是,而是高校的C语言教学方式存在问题。我这么说可能会得罪一些人,但是事实就是这样的!
  • 于是我有了一个想法,就是想换一种轻松的方式向大家介绍如何学习C语言,抛开书本上那些枯燥的文字描述。希望能够给广大的相关专业的同学们提供一些帮助。
  • 首先我们得先弄清楚什么是编程。简单的说就是跟计算机说话,把你想要计算机为你做的事情写清楚。就好象是给你的仆人下达命令,它会无条件的执行你的所有命令,但是前提条件是你得让它看懂你在说什么。
  • 显然你对它说汉语是完全无效的,于是我们需要学习一门编程语言,那么C语言就是我要说的其中一种编程语言。
  • 那么C语言的语法很难学吗?这……其实并不难,至少比英语简单多了。很多同学都能记住常用的C语言语法,就算记不住也不要紧,可以查书或者上网查资料。但是记住语法和会编程还有一段距离。
  • 我不想和同学们梳理语法,因为有大量的资料可查。我只想聊聊如何学习,以及对语法的一些理解。

变量

  • 现在我们来思考一个问题,假设你现在想要做俯卧撑,需要你的“仆人”给你计数。那么你会怎么对它说呢?说“我现在要做俯卧撑了,因为女孩子比较喜欢强壮一些的男生,那么你帮我计数啊”。显然这样表达是不可以的,我们需要事无巨细的向计算机表达逻辑。
  • 我们自己计数的时候往往会在心里记住一个数字,然后每次看到一个俯卧撑就在心里默默加1,有时候还会用嘴把这个数字念出来。同让我们也得让计算机用相同的方式来计数,首先就是得让它在“心里”保存一个数字。这个时候就需要定义一个“变量”。

类型

  • 接下来一个问题是要按照1、2、3、4……还是a、b、c、d……的方式来计数呢,或者是“one”、“two”、“three”、“four”……。有什么区别吗?当然有,因为这显然是不同类型的数据,计算机为了方便数据的处理,将数据分成了很多类型,我们需要跟据我们的实际需要来选择一种适合我们逻辑表达的类型。在这里我们先按照常理选择1、2、3、4……的方式来计数。有一点点C语言的基础的同学都应该知道这是整数类型,C语言使用关键字int来表示整数类型。

定义一个整型变量

  • ok,现在我们已经确定需要一个变量,变量的类型也确定是整数类型。接下来我们把变量定义出来。我见过的很多同学会这样写:int a;
  • 首先需要肯定的是这样定义变量没有语法问题,也能够清晰的向计算机表达你的意图。那还有什么可废话的呢,go go go下一步吧。先等等。这里的确还有一个非C语言的问题,并且是我们不能忽视的一个问题。我们开发一个项目通常会是数个月或者数年的时间。在这个过成功我们需要经常的翻看自己以前写过的代码,如果以前的代码写的足够优秀,那么我们阅读起来可以不费吹灰之力。但是如果代码写成满篇的a b c d……听说过猝死在工作岗位上的悲剧吗?
  • 我们写代码一定要注意代码的可读性,提升可读性的一个很重要的方面就是要给变量起一个能够清晰表达含义的名字。所以这里我们最好将整型变量定义成:int count。

变量初始化

  • 我们只是定义变量还不够,变量里面如果没有数据就什么意义都没有。所以对变量的第一步操作一定是初始化或者赋值
  • 变量的初始化:int count = 0;
  • 变量的赋值:int count; count = 0;
  • 从逻辑上来讲两种方式都能满足我们的逻辑表达的需求,那么区别在哪里呢?举个例子:初始化就是你天生就有双眼皮,而赋值呢,就是长大后来那么一刀。很多情况下没什么两种方式都每什么影响。
  • 俯卧撑计数的话我们希望从0开始,那么就初始化成0。如果你觉得自己比较猛,先来100个热热身,然后再计数,那么你可以初始化成-100(int count = -100;)。总之你觉得怎么舒服就怎么来。

运算符

  • 现在我们终于可以计数了,每当做一个俯卧撑后都给变量count加1,这是我们希望的。但是怎么向计算机表达加1的逻辑呢。这里就需要使用运算符。
  • count = count +1;
  • 或者写:count++;
  • count = count +1;的意思是用变量count中的数值加1,然后把计算的结果放进变量count中。如果没有赋值的话,变量count的值是不会改变的,count的值不变的话怎么证明我又做了一个俯卧撑呢。count++的含义和 count = count +1;是一样的。只不过使用了自加运算符++。相信这是个让很多同学很心烦的运算符,它还有一个小兄弟叫自减运算符–。之所以讨厌因为它们又两种写法,分别是前缀和后缀两种形式。

自加自减运算符的前缀和后缀区别

  • 我们先来看两段代码,分析一下输出结果。
  • 代码1:
int main()
{
    
    
	int i = 0;
	++i;
	printf("i is %d\n",i);
	return 0;
}
  • 代码2:
int main()
{
    
    
	int i = 0;
	i++;
	printf("i is %d\n",i);
	return 0;
}
  • 我在高校里提问所有的同学前缀和后缀的区别的时候得到的答案不约而同的是“前缀是先加后使用,后缀是先使用后加”。那么大家分析一下两段代码的结果都是什么吧。两段代码的结果都是1。这似乎有些矛盾,其实并不矛盾,只是“前缀是先加后使用,后缀是先使用后加”这句话容易让人误解。关键的问题就是这里的“使用”指的是什么?
  • 在这里我给大家一个我个人的经验总结,这个总结或许在理论上不是很严谨,但是按照这个总结写代码保证不会出错。“前缀和后缀的区别在于表达式的结果不一样,前缀形式的表达式结果是加1或者减1之后的值,后缀形式的表达式结果是加1或者减1之前的值;对于变量而言都是马上加1或者减1”。注意看我前面的代码1和代码2中++i和i++都是表达式,但是我并没有输出这两个表达式的结果,而是输出了i的值。所以没有区别,无论执行++i还是i++,i的值都被马上加1了。
  • 接下来对比下面两段代码:
  • 代码3:
int main()
{
    
    
	int i = 0;
	printf("i is %d\n",++i);
	return 0;
}
  • 代码4:
int main()
{
    
    
	int i = 0;
	printf("i is %d\n",i++);
	return 0;
}
  • 代码3输出1,而代码4输出0。因为代码3和代码4我输出的并不是变量i的值,而分别是表达式++i和i++的值。代码3输出的是++i,所以是i加1之后的值。代码4输出的是i++,所以是i加1之前的值。如果在代码中没有使用表达式的值,那么使用前缀和后缀形式没有区别。比如常见的for循环for(i = 0;i < 10;i++)和for(i = 0;i < 10;++i),两两种写法没有区别,因为在两个for循环的表达式3中都没有使用表达式i++和++i 的值。大家可以再拿一些代码按照我这个总结去分析,保证不会再迷茫。
  • 运算符还有好多,无非就是对变量进行各种各样的操作,以后有机会再慢慢聊。

俯卧撑计数代码

  • 目前我们还不能完成俯卧撑计数的代码,因为我们缺少俯卧撑的输入方式。但是假设我们能够获取俯卧撑的事件,我们可以写出如下代码:
int count = 0;//用来计数的变量,全局变量
/**
*每做一个俯卧撑会执行一次pressUpEvent函数
*/
void pressUpEvent()
{
    
    
/*
*这写count++和++count没有区别,因为没有用到表达式的结果
*/
	count++;
}
  • 为什么count要定义成全局变量?什么是全局变量?什么是事件?事件是怎么调用的?这次课就先到这里,这些我们以后慢慢解释。

猜你喜欢

转载自blog.csdn.net/seamancsdn/article/details/111470472
今日推荐