C之九剑其二——运剑

好了,经过C之九剑其一——识剑。我相信大家已经形成了对C语言的一个大概的了解,那接下来这一章,我们就要正式进入C语言的学习中了。

 

不知道,大家是否还记得我们在“识剑”最后提到的代码:

#include <stdio.h>
int main(void)
{
printf("Hello World!");
return 0;
}

相信大家在最后用编译器成功在屏幕上显示"Hello World!"的时候,一定获得了一点小小的成就感吧。

那在今天“运剑”篇开始之前,我们先来剖析一下这段代码吧。看看它是怎么来运行的。

首先是第一行的“#include <stdio.h>”。这个代码代表的是包含stdio.h这个头文件的意思。这里可能会有小伙伴提出疑问:什么是头文件呢?

不知道大家还记不记得我们在上一篇中有提到的创建一个项目的时候,最后一步是创建一个“源文件”,文件名的最后是以".c"结尾的。这里需要给大家简单讲解一下,咱们C语言中的两种文件类型,一种就是我们已经创建过的.c文件,也就是源文件。另外一种就是我们目前还没涉猎的.h文件,我们一般称之为头文件。其实这两种文件本质上是一样的,无论我们将代码写到哪一种文件中,代码都是可以进行运行的。但是之所以将其区分为头文件与源文件,主要是其后期的作用不太相同。我们可以理解为,一般而言,我们写的主要代码,也就是main函数里的代码都是写在源文件里的,这里面的代码集结了我们的智慧和劳动成果——代码的实现,在某些情况下,我们是不想给别人展示的——也就是“开源”。那我们写的东西终归是要用的吧,这时候,我们就可以用头文件来对我们源文件里的代码进行声明。这样我们在给别发送代码的时候,只需要将源码加密,然后让在他的代码中使用“包含我们的头文件”这样一个命令就可以进行使用我们所编写的代码或函数了。但那种代码的写法是:“#include "头文件.h"”。要将这里的<>改成英文的引号。

那对于头文件与源文件的知识,我们只需要了解到这里就可以了。

话题回到文章中来,这里我们我们引用了stdio.h这个头文件,他是我们C语言自带的,也就是之前我们提到过的C语言的标准语法自带的,我们称之为“库函数”。这是一个大家都可以进行使用的,而且是一些包含了我们常用函数的头文件集合。我们这里之所以要引用这个头文件,是因为后面我们使用了一个函数叫“printf("");”。这个函数是一个格式化输出的函数,它的作用是将你需要打印在屏幕上的数据、字符串、符号等按照一定的格式进行打印。当然,我们上一篇用的Hello World!,没有进行任何形式的格式指定,它就会默认是全部按照原样进行打印。

开篇的最后,我们再来聊一聊C语言中最最最重要的函数,主函数,也叫main函数。它的格式是:

int main(void)
{

return 0;
}

请大家一定要牢记这个函数,因为我们C语言程序的执行,其实全部依靠,main函数来进行编译。所有的代码都将是由main函数的第一行开始执行,一直到return返回0结束。如果说,你的源文件里面没有写这样的主函数,你所写的代码都只是一堆文字而已,没有任何意义。程序也不会执行。

好了,在进行完上一篇代码的讲解。我们正式来到了今天的“运剑”环节。所谓运剑,就是叫大家怎么去使用这个剑——C语言。

话不多说,先上代码:

#include <stdio.h>
int main(void)
{
printf("%d\n",5 + 3);
return 0;
}

这是一段,让计算机将5+3的结果按照十进制位的形式打印到屏幕上来,并进行换行操作的指令。

其中print函数里的%d表示的就是按“十进制位”的形式打印的指令,\n则是换行的意思。通过以上指令,我们将完成打印5+3的操作,最终结果会以8的形式显示在屏幕上。那为了让结果更容易解读,我们可以对代码进行一点点修改。

#include <stdio.h>
int main(void)
{
printf("5+3的结果=%d。\n",5 + 3);
return 0;
}

这样,打印的信息就变成了“5+3的结果=8。”这样的信息。需要注意的是%d所包含的就是双引号外的第一个逗号所计算的结果。

为啥说是第一个逗号呢?我们可以看看接下来这段代码。

#include <stdio.h>
int main(void)
{
printf("5+3的结果=%d\n。5-3的结果=%d\n。5/3的结果=%d\n", 5 + 3 , 5 - 3 , 5 / 3);
return 0;
}

这样代码运行我们得到的结果就是:

{

5+3的结果=8。

5-3的结果=2。

5/3的结果=2。

}

大家可以看到,每一个%d代表了后面一个逗号的运算内容,这个顺序是不能乱的,大家需要注意。还有就是每有一个\n,我们的显示结果都会换一行。这就是换行符的作用。

ps.注意,我们在C语言的代码编写中运用到的运算符(+ - * / %),其对应的是我们数学上的加、减、乘、除、取余数。大家不要搞错了哦~

当然,可能细心的小伙伴会发现5/3不应该等于2.5么?为啥你这里写的结果是2,而且我执行以后的结果居然也是2唉。那这就不得不提到我们%d这个格式的作用了,它除了是要将运算结果以十进制位显示以外,还有着其数据类型为整型的含义。

那什么是数据类型?什么又是整型呢?

C语言作为一种计算机语言,在与计算机进行交互的过程中,我们需要考虑到合理运用计算机的储存空间(因为储存空间总是有限的),会将不同大小的数据进行区分,用一个个类似于小盒子的东西将它们装起来,这就是我们创建数据的原理。而这其中的小盒子,便是数据类型。那就像我们生活中的数一样,有1;2;3;4;5这样不带任何小数点的整型也有像3.5;5.148;3.14159这样的实数。甚至还有‘A’;‘B’;‘C’;‘d’;‘e’这样的字符。而其中整型又分1;123456;486的1252次方;这样不同长度的数据。

那为了创建不同的数据类型,也为了更加合理的运用计算机有限的空间。我们就设立了不同的数据类型,大致可以分为以下几类:

int main(void)
{
short //短整型
int   //整型
long  //长整型
long long  //长长整型
float  //单精度浮点型(就是实数类型)
double  //双精度浮点型(也是实数类型,和float的区别就是小数点后面的位数不同,double更长一些)
char  //字符类型(A B C)
return 0;
}

不同的数据类型所占的空间又是多大呢?

这里我们可以通过一个操作符来进行求解:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
	printf("short类型的大小=%d。\n", sizeof(short));
	printf("int类型的大小=%d。\n", sizeof(int));
	printf("long类型的大小=%d。\n", sizeof(long));
	printf("long long类型的大小=%d。\n", sizeof(long long));
	printf("float类型的大小=%d。\n", sizeof(float));
	printf("double类型的大小=%d。\n", sizeof(double));
	printf("char类型的大小=%d。\n", sizeof(char));

	return 0;
}

 其结果为:

通过sizeof操作符,我们可以清晰的看到每个类型的数据所占空间的大小。那这里也给大家科普一下,咱们计算机的大小单位,有小到大分别是:

8 bit(比特) = 1byte(字节)——我们上面运算的结果单位是以字节结算的。

1024 byte = 1 kb

1024 kb = 1 mb

1024 mb =  1 gb

1024 gb = 1 tb

1024 tb = 1 pb

再往上的,咱们也很难用到,也就不讨论了。

那在了解各个数据类型以后,我们还得解决一个问题:数据该怎么创建呢?

其实数据的创建很简单,之前我们不是说了数据就是用来存放现实中会用到的数字或字符的小盒子么?那作为一种小盒子,我们除了要知道它是什么类型(长方形,正方形,圆形)以外,我们还得为其起个名字对吧,不然以后用的时候不就找不到了么?所以创建数据的方式就是:

数据类型+名字;

例如创建一个整型就是:int a;这样我们就创建好了一个叫a的数据类型小盒子,但是我们会发现哦,这个叫a的盒子里目前是什么都没有的(其实计算机会随机放一些数进去,但没有什么实际意义,我们默认没有)。这是因为我们所创建的这个数据类型小盒子叫做变量。没有错,就是咱们小学数学所学到的东西,变量。与之对应的叫常量。我相信大家对这个知识点并不陌生。

那常量这个东西,一般不需要我们进行创建,它与生俱来就是固定的,往生往世也不会改变,不然为啥叫常量呢。就像3.1415926就是一个典型的浮点型常量,一天有24个小时,这是一个整型的常量。我们生活在地球上(这个大概率变不了),这就是一个字符串常量,A;B;C这就是一个个的字符常量。

那我们在创建了整型变量a以后,该怎么给它放进去数据呢?首先我们知道,整型的数据类型就只能放整型的数据,所以我们可以这样操作:

int a = 0; 0是一个很常见的整型,那我们在创建之初就将0这个数据赋给了a,这就是变量的初始化。

那这时候,我们突然想改变想法了,想将5放入a里面怎么办呢?

int a = 5; ?错,这样相当于我们创建了两个名字为a的整型变量,这是语法不允许的,而且也是逻辑上说不通的,我们不可能在后期准确的找到哪一个a的里面是5。于是我们用另外一种方法:

a = 5;  这个操作相当于将a里面的0给换成了5,这个过程叫做变量的赋值。

那又有小伙伴会问了,有些时候我们并不是一开始就知道a里面要放什么,只有在使用的时候才知道。那到时候不可能把源码拿出来,再修改,那样太麻烦了。

于是,我们C语言给我们提供了一个可以在键盘上读取数据的函数“scanf()”函数,scanf的使用方法是这样的:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
	int a = 0;//这里我们创建并初始化一个整型变量a=0
	printf("a=%d\n", a);//先打印初始化的a
	scanf("%d", &a);//然后我们用scanf函数取得了a的地址,
                    //大家将代码拷到自己的编译器里运行的时候就会跳出 
                    //一个输入框。
	printf("a=%d\n", a);//然后我们通过printf函数,将我们输入进去的a的值,打印到屏幕上。
	return 0;
}

运行上面的代码,我们可以得到:

这里面单独的那个5就是我用键盘敲出来的。

大家在使用scanf函数的时候需要注意,特别是使用VS编译器的小伙伴。VS并不支持scanf函数,所以如果我们需要使用有两种方法解决:

1.是用VS自带的scanf_s来解决。

2.像我一样,在代码的第一行做一个声明 :#define  _CRT_SECURE_NO_WARNINGS。

int main(void)
{
short
int
long
long
//以上均为整型,整型所代表的scanf函数形式为
scanf("%d",&int);//int 表示我们创建的变量,例如int a;
float  //单精度代表的scanf函数为
scanf("%f",&flaot);
double  //双精度
scanf("%lf",&double);
char //字符类型
scanf("%c",char);
return 0;
}

不同类型的变量,需要对应不同类型的scanf函数。同样,这个规则在printf函数里面也是适用的。

那到这里,我相信大家对于如何创建一个变量,并对其进行运算,然后将结果打印到屏幕上来的操作已经难不倒大家了。这就是我们“运剑”所要掌握的知识点。大家下去可以多多练习哦。这里我再给大家放上一段创建变量进行四则运算的例子:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
	int a = 0;
	int b = 0;//一般我们创建变量都是初始化为0,当然变量的创建也可以放在一行。
	//像这样 int a = 0; int b = 0; 还可以同时创建 int a = 0, b = 0;
	//但为了方便代码后期的阅读和修改,最好分开创建。
	a = 5;
	b = 8;//这里,我们分别为a和b进行了赋值,将=号右边的值赋给了左边。
	printf("a+b=%d\n", a + b);//这我们用printf函数打印了a+b的结果
	int c = a * b;//这里我们新创建一个变量c来装a*c的结果。
	printf("a*b=%d\n", c);//于是我们只需要打印c即可。
	scanf("%d\n %d\n", &a, &b);//这里我们同时从键盘上输入a的值和b的值进行赋值,中间空格。
	printf("a-b=%d\n", a - b);//我们将从键盘上赋予的值通过减法以后打印。
	printf("%lf", (double)a /b );//这里强制类型转换整型的a变为双精度浮点型的a
	                             //然后通过与整型的b求除,最终结果以浮点型呈现。
	return 0;
}

文章的最后,我们再来总结一下。同时,也对一些没有讲到的知识点,进行一个查缺补漏。

我们再这一章主要学习了几个函数:printf 格式化输出函数;scanf 从键盘上读取数据存储在变量中的函数; 最最最重要的 main 函数;当然还要一个测算空间大小的字符操作符sizeof。

还有咱们计算机的空间大小,以及基础的加减乘除取模(取余数)的操作符。

当然还有我们的常量与变量,以及变量的创建、初始化、赋值与读取键盘上的数。

那我们还有以下几点知识给大家消化:

1.变量还分为局部变量与全局变量,简答理解一下,凡是被{}所包含的均为局部变量,其余的为全局变量。两者的区别在于,局部变量的作用域只限于{}以内,出了{}它就被销毁了。而全局变量则跟随程序的始终。

2.在数据类型里面整型类型的数据在与浮点型类型的数据进行运算的时候,最终结果一般会像浮点型数据转化。例如5/2.0会等于浮点型的2.5而不是整型的2。整型就是舍掉小数点以后的数。

3.数据类型中还有一个函数是“强制类型转换”,形式是:(double)某个数据,这样就会将数据转化成double类型。

4.给大家留一个printf函数的终极类型,希望大家下去自我摸索,我们将会在下一章开通进行讲解。

printf("%-08.5f",5.998875);这个函数打印的结果是什么?

ps.下一章我们将会讲解C之九剑其三——剑招一、分剑式与环剑式

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值