C语言学习笔记系列—第五章

1,运算符

学习参考书中是从“+”“-”“*”“/”开始写的,这类运算基本上是小学就接触到的算数方法,因此就着重介绍一些有意思的程序。

1.1,乘法运算符之平方数

简单介绍一下C语言中乘法使用“*”,基本上所有语言都一样的,下面语句就是将tim乘以114,并将结果赋值给cy:特别强调是赋值不是等于。

cy = 114 * tim

有意思的是C语言中没有平方函数,但是要求一个平方数可以使用一下办法,求1~10的平方。使用一下面的简单小程序就能做到了啦。

#include <stdio.h>
int main(void)
{
	int num = 1;

	while (num <= 10)      //引入循环的概念
	{
		printf("%4d %6d\n", num, num * num);   //使用两个变量相乘
		num = num + 1;
	}

	return 0;
}

详细讲解一下上面的程序:

(1)声明一个整型变量num(偷懒写a也可以),将这个变量赋值为1。

(2)浅尝辄止一下引入循环:while(),在括号中引入条件语句,也就是说如果当num变量满足括号中内容,执行while{}中的内容,当num不满足()中内容后则结束循环。

(3)在第八行中引入了计算平方的方式:num*num,同时补充之前笔记中没有详写到%4 %6(此处内容是省略了printf()中修饰符概念,死记硬背没意义,前期多试试调整就熟了)。

(4)在第九行对num这个值进行了赋值加一的操作,也就是说每次循环之后num是递增的。

输出结果:

   1      1      
   2      4
   3      9
   4     16
   5     25
   6     36    
   7     49
   8     64
   9     81
  10    100   

同时扩展一下另一种求平方的方法,提前了解一下<math.h>

#include <stdio.h>
#include <math.h>    //引入<math.h>
int main(void)
{
	int num;

	num = pow(10, 2);   //pow函数计算10的2次方
	printf("num = %d", num);

	return 0;
}

首先引入了<math.h>中的pow函数计算10的2次方,得出的结果为:num = 100

同理大家可以尝试自己改变参数试试运行:

1.2,除法运算符之截断

简单介绍一下C语言中除法使用“/”,还是和所有语言基本一致。和乘法类似举例:下面语句就是将tim除以114,并将结果赋值给cy:还是特别强调是赋值不是等于。

cy = tim / 114;

除法也是有意思的点是整数除法和浮点数除法不同。浮点数除法的结果是浮点数,而整数除法的结果是整数。整数是没有小数部分的数。这使得7除以3很让人头痛,因为实际结果有小数部分。

在C语言中,整数除法结果的小数部分被丢弃——这个丢弃的操作被称之为截断。

下面程序展示了除法的过程,浮点型和整型的区别:

#include <stdio.h>
int main(void)
{
	printf(" 5/4 = %d \n", 5/4);
	printf(" 6/3 = %d \n", 6/3);
	printf(" 7/3 = %d \n", 7/3);
	printf(" 7.0/3.0 = %.2f \n", 7.0/3.0);
	printf(" 7.0/3 = %.2f \n", 7.0/3);

	return 0;
}

下边是输出结果:

 5/4 = 1 
 6/3 = 2
 7/3 = 2
 7.0/3.0 = 2.33
 7.0/3 = 2.33 

程序结果中明显看出6/3和7/3得出来的值一致,但这和我们的认知明显不符的。

1.3,其他运算符:%(求模)++(递增)–(递减)

C语言一共有40多个运算符,上述介绍的可以说是最常见的了,而此段介绍的%(求模)++(递增)–(递减)也较为常见,详细用法也建议大家多多思考和使用。

1.3.1,%求模

例如,14 % 5(读作“14求模5”)得3,因为14比5的两倍多4,即14除以5的余数是4。

求模运算符只能用于整数,不能用于浮点数。

计算时间时,1分钟是60秒,但是如何结算80秒是多少分钟呢?这个问题如果交给计算机计算80/60?那么得出来的结果将是1.33333。难道真正的答案是1.3分钟?这个答案明显是错误的。那么引入求模运算后这么写:

#include <stdio.h>
#define SECOND_PER_MINUTE 60
int main(void)
{
	int sec, min;
	printf("Please enter an integer in seconds that will be converted to minutes and seconds.\n");
	scanf("%d", &sec);
	min = sec / SECOND_PER_MINUTE;  //计算整数分钟
	printf("%d sec = %d min, %d sec.\n", sec, min, sec % SECOND_PER_MINUTE);  //最后求模计算秒数

	return 0;
}

根据上边的程序输入80,计算出的结果为:

1.3.2,++(递增)–(递减)

递增和递减类似所以就放到一起来学习,递增运算是将运算对象进行递增1的操作(递减大家就举一反三)。

特别注意有两种写法,但是表示含义确不同。

第1种方式,++出现在其作用的变量前面,这是前缀模式; ++CY

第2种方式,++出现在其作用的变量后面,这是后缀模式。 CY++

下边的程序来简单介绍其不同所在:

#include <stdio.h>
int main(void)
{
	int cy = 1, cy1 = 1;
	int cy_post, pre_cy1;

	cy_post = cy++;    //后缀递增
	pre_cy1 = ++cy1;   //前缀递增
	printf("cy  cy_post   cy1   pre_cy1 \n");
	printf("%1d %5d %8d %7d\n", cy, cy_post, cy1, pre_cy1);

	return 0;
}

此处使用两个声明变量cy和cy1,分别使用了两种递增的方式,输出结果如下:

cy  cy_post   cy1   pre_cy1 
2     1        2       2

cy和cy1都递增了1,但是,cy_post是cy递增之前的值,而pre_cy1是cy1递增之后的值。

2,表达式语句

在前几章中,我们已经多次使用了术语表达式语句。特别注意以下几个案例:

int port /* 不是表达式,没有值 */

legs = 6; //这是一条语句

在这里也是详细学习复合语句——块的概念。

1.1,复合语句——块

复合语句是用花括号括起来的一条或多条语句,复合语句也称为块。上边的循环程序中使用过while就是一个程序块:

//程序段1
while (num <= 10)      //引入循环的概念
	printf("%4d %6d\n", num, num * num);   //使用两个变量相乘
num = num + 1;

//程序段2
while (num <= 10)      //引入循环的概念
{
	printf("%4d %6d\n", num, num * num);   //使用两个变量相乘
	num = num + 1;
}

将上一个小节中计算平方中使用的循环程序块来分析:

程序段1,while循环中只有一条赋值表达式语句。没有花括号,while语句从while这行运行至下一个分号。循环结束后,printf()函数只会被调用一次。

程序段2,花括号确保两条语句都是while循环的一部分,每执行一次循环就调用一次printf()函数。根据while语句的结构,整个复合语句被视为一条语句。

3,本章小结

本章主要学习了几种C语言的运算符以及浅尝辄止的介绍了一点点循环的概念(while)之后会专门有一章到两章去学习循环。时间精力有限(毕竟还有工作要做)但还是尽量想把C语言学习笔记做得细节更到位的同时又显得简单,让读者们尽量没有一打开就想关了的感觉。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部