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
同理大家可以尝试自己改变参数试试运行:
num = pow(10, 3);
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,计算出的结果为:
80 sec = 1 min, 20 sec.
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语言学习笔记做得细节更到位的同时又显得简单,让读者们尽量没有一打开就想关了的感觉。