开启懒人模式

第二节 开启懒人模式

那么从今天开始,我们就要正式的学习C语言了。之前我说过,C语言是个天才。这人一聪明,就想着法儿的偷懒儿,这机器也是一样。C语言是个天才,自然很聪明,所以它也会想方设法的偷懒儿。
那么废话少说,我们先来做一组练习题。在屏幕上面输出3+5=和这个式子的结果。
那么这个式子好说,我们的程序可以写成:

例1-2
#include<stdio.h>
main(){
 printf("3+5=8");
 system("pause");
}

图1-3
运行结果如图1-3所示,那么这个题非常简单,那么大家请来求一下C语言自从被创造以来一至今有多少年,C语言是1972年被创造出来的,那么今年是2016年。这个程序应该写成2016-1972=,估计有很多读者急着去按计算器去了。那么我说并不用按计算器,我们要学会偷懒。毕竟C语言本身就是一门懒人语言。我们可以这样写:

例1-3
#include<stdio.h>
main(){
 printf("C语言被创造了%d年
",2016-1972);
 system("pause");
}

图1-4
首先我们来回忆一下,之前讲过 是个转义字符,它的意思是换行(回车)。这里复习一下,转义字符相当于我们人类自然语言中的书面语。
那么,这个程序里面的新内容就是%d和引号后面的 ,2016-1972 这一部分内容。对于2016-1972这一部分来说,反应快的读者肯定会发现,这是我们之前说过的2016-1972的这个式子。我们现在的疑问就只是在于%d和那个逗号是什么意思了。
这个%d叫做格式说明符,什么叫做格式说明符呢?实际是它就是类似于我们自然语言中的语法中说明词性的部分。比如下面这个例子:
是一名程序员。可以写成:某人是一名程序员。那么这个某人可以换成,你、我、他、张三、李四、王五,等等。
这个%d就是类似的作用,它用来指代一个东西,那么它具体是用来指代整数的。显然2016-1972这个式子的结果应该是个整数,那么我们就可以用%d来指代它。
看上机结果(图1-4),中%d被替换成了2016-1972这个式子的结果,也就是44。那么这个逗号就是用来分割应该输出的内容,和被指代的内容的。那么前面这部分类似于我们自然语言中语法结构的东西,我们起个名字叫做格式化字符串,那么逗号后面这部分我们叫做参数列表(也有输出项表参量表等说法)。
这样我们轻而易举的就可以计算非常复杂的式子了。我们现在学习了%d这样一个格式说明符,我们马上要学更多的格式说明符。
接下来我们要做一些简单的四则运算:8和5分别做加减乘除。我们自然可以想到下面的程序:

例1-4
#include<stdio.h>
main(){
 printf("8+5=%d
",8+5);
 printf("8-5=%d
",8-5);
 printf("8×5=%d
",8*5);
 printf("8÷5=%d
",8/5);
 system("pause");
}

这里需要注意的是,C语言中没有乘号和除号,乘号要写***** 除号要写/
我们显然可以吧这个程序写的更简单。

例1-4修改1
#include<stdio.h>
main(){
 printf("%d+%d=%d
%d-%d=%d
%d×%d=%d
%d÷%d=%d
",8,5,8+5,8,5,8-5,8,5,8*5,8,5,8/5);
 system("pause");
}              

这时候一个printf中有了多个格式说明符,它会自动按照从左往右但是运行的时候我们会发现:
图1-5
运行结果加减乘都没有问题,但是除法并没有得到我们预期的结果。这是为什么呢?为什么8÷5的结果是1呢?这是也是因为C语言偷懒的缘故,C语言中规定两个整数进行运算的时候,结果只计算到整数位。那么我们怎么让它计算到小数点以后呢?我们只需要把两个参与运算的数其中任意一个写成小数的样子就可以了,那么我们可以把8写成8.0,也可以把5写成5.0 不过要记得,8÷5的结果是一个小数,所以%d的位置应该改成%f,这是因为%d整数的格式说明符,%f是小数的格式说明符。如果想让精确度更高还可以使用%lf,关于%f和%lf的区别会在后文详细讲解。暂时我们可以不做区分。

例1-4修改2
#include<stdio.h>
main(){
 printf("%d+%d=%d
%d-%d=%d
%d×%d=%d
%d÷%d=%f
",8,5,8+5,8,5,8-5,8,5,8*5,8,5,8/5.0);
 system("pause");
}

图1-6
不过还要啰嗦一句的是无论使用%f还是%lf它们都会默认保留小数点后6位。我们暂时就让它保持默认的六位就好了,学习一段时间之后我们再学习如果让它保留刚刚好的位数。

原文地址:https://www.cnblogs.com/yevgeny/p/5136684.html