关于小白的C语言第一课

 开学大二师范院校的软件专业,大一上学期C语言险些挂科,大一下学期看见要学的语言是Java后,励志学好学会,随后就开始了看网课,看书写代码的生活。令我以外的是,居然Java是个选修课,但并不影响我的热爱。一学期过去,写完最后的学生信息管理系统后,觉得Java真好用!好多都可以直接拿来用,不像c一样,比较繁琐。写这个大作业的时候还用到了JavaFX和MySQL,算是一个简单的了解。大一暑假接触了竞赛的源码,随后我觉得我水平。。。可能还没有入门,买了本c++却没怎么看,于是我决定从C开始学习,打好基础。

 

摘要:

什么是C语言

第一个C语言程序

数据类型

常量 变量


1:初识C语言

     C语言是一门计算机语言,如同英语一样,英语是人与人之间的语言,而C语言是人与计算机之间的语言。起初的语言只有二进制语言,硬件的正/负电 用1 、0表示。所以最开始的计算机语言就是我们熟知的0、1序列,因为计算机只能识别电信号,0、1就表示了负电和正电

比如想让计算机工作  做一个加减法101010101001010  类似这样的一个01序列   就以这样一个一个序列开始工作 。

后来为了方便,人们开始用助记符帮助记忆,比如10101010101010 =add  表示加法  计算机就记住了add,  add就表示01序列的加法。用助记符 表达的语言叫做汇编语言。

后来经过人们的使用又发明了更加方便的

B语言

C语言,又在C语言的基础上发明出来了C++、Java、Python等。这种语言被叫做高级语言了。

                                                         

2 第一个C语言程序:

#include <stdio.h>
int main()

//这是主函数,表示一个程序的入口,有且只有一个
{
printf("hello world\n");

return 0;

}

首先,第一句#include <stdio.h>
.h表示头文件 h是head的缩写

.c表示源文件

printf print打印  f function的缩写  printf 打印功能   即开始打印

""  记住 一定是英文书写状态下的双引号,否则会报错,在双引号里面打汉语和英语都可以

\n表示换行符    例如分别打印两句话,

printf("hello");     不加换行符表示打印完这句话就结束了,如果加上换行符\n 则表示打印完这句话会自动的跳转到下一行。

printf("world");

这两句的结果是helloworld

如果加上换行符printf("hello\n");

printf("world");

结果会变成

hello

world

感兴趣的小伙伴可以自己动手试一试。

接着到了return 0;

先知道这是返回0即可,后面会详细讲。

3:数据类型

数据类型就是专有的名词,好比我们日常生活中用到的数字   例如  100  和 101.5

100 在计算机语言里面就是一个整型,而101.5就是加了小数点的数据,叫做float 即浮点型,也可以叫做double型  两者的数据长度不一样。

首先了解到在计算机里面的存储形式,都是字节类型存储

bit   比特 或叫做 位

byte  字节

kb

mb

gb

tb

1byte =8bit

1kb=1024byte 

1mb=1024kb

1gb=1024mb

1tb=1024gb

这里面扩展一点进制的知识。前面提到了二进制0、1  学过的还有八进制,十进制(日常使用的)、十六进制。

进制的意思是 逢n进一位,这里n就表示几进制。

二进制:逢2进一,学过电路基础的小伙伴会知道,计算机就是以0、1电信号的形式来工作的。

以三位为例,

000 0

001 1

010 2

011 3

100 4

101 5

110 6

111 7

这里的计算规律是 以最右边的一位数开始,乘以2的零次方,从右数第二位乘以2的一次方,从右数第三位乘以2的二次方,以此类推,从右数第n位数乘以2的n-1次方,相加,即为十进制数。

验证一下,001为例      1乘以2的零次方  结果为 1    零乘以 2 的一次方  =0     零乘以2的二次方 =0

结果为1

101     最右边的1   1乘以2的零次方  得1    零乘以2得一次方  得0   最左边得一乘以2的2次方  得 5

所以二进制数 101 表示 十进制数得5

此外还有八进制和十六进制就不再赘述了,回到正题。

计算机最基础的储存单位为bit 即比特 或者叫做位

为什么1byte=8bit? 这是计算机语言规定好的一个规则。

例如10010001  八个比特位   就表示了一个字节(byte)      联想到著名的网络公司字节跳动

所以就有了上述的转换。

char   字符数据类型

short   短整形

int       整形

long     长整型

longlong  更长的整形

float   单精度浮点数

double 双精度浮点数 

为什么有这样的分类呢?大家可以思考一下,为什么会把数据都分类

这是因为在计算机编译时,也需要不同类型的数据来完成相应的任务。分类就是为了把内存空间更好的利用。

每个数据类型能表示长度不同,这里的长度表示的是bit。

大家可以在编译器里面运行这样一个程序。

#include <stdio.h>

int main()
{
printf("%d\n",sizeof(char));

printf("%d\n",sizeof(short));

printf("%d\n",sizeof(int));

printf("%d\n",sizeof(long));

printf("%d\n",sizeof(longlong));

printf("%d\n",sizeof(float));

printf("%d\n",sizeof(double));

return 0;

}

这时部分小伙伴可能会问 %d是什么? sizeof又是什么?我来一一解答,方便后续的学习。

%d表示的是把数据以十进制整数的形式输出   简单来说就是 打印整形

与他类似的还有

%c打印字符

%f打印浮点数

%x打印十六进制数字  

这都不是重要的,以后学习的时候用到了就会提到。

关键的是这样的格式要知道

int a=0;

printf("%d\n",a);    这里面 "%d\n"一定要写到逗号的前面,表示的是数据的输出格式

翻译过来就是   打印    数据的输出格式   换行(\n)(不打印\n也行 也就是不换行), 输出的数据(这里面是a);

上面说到英文状态下的分号里面 打印 中文和英文也可以 

那我能不能这样写呢

printf("最帅的字母a的值 = %d\n",a);

我上个图 大家看看

这时 按下F5运行程序 或者点击 本地Windows调试器(我用的时vs2019)

出现运行结果

 这时我们就能看到,果然 打的什么文字 编译器就会运行出来什么文字!

回到 数据类型的长度的问题,在如下面的代码示例

先给大家说一个我的新发现 就是 ctrl+d 会复印你打出来的代码  想起来了这个图

 

 

 

 我们会发现,对应上面的程序 给出来了 1 2 4 4 8 4 8这几个数

补充一下 sizeof关键字的意思就是 size of 什么什么的大小。

关键字是每个语言里面的,设定好的由字母组成存放在语言的库里面。也就是一个具有特定用法的单词。例如 int float 等都是关键字,书上都有相应的关键字表格大全,用到什么记住什么就OK了。在编译期里面关键字颜色不一样 我的编译器如图所示,关键字就是蓝色的。还有就是一个概念叫做标识符,这是用户自己编写的,由数字、字母、下划线组成,不能以数字开头。并且标识符最好都是通俗易懂的,否则其他程序员用你的代码看见命名时可能会看不懂。

这点可以解释一下 ,比如 我声明一个 test函数 

void test()

{

int a=0;

printf("%d\n",n);

return0;

}
这里面的test就是我自己写的一个标识符 还可以写成a_val 就是字母加下划线的形式,关于命名是一个大事,大家可以查阅相关资料,我的理解是 字母组成的单词最好是通俗易懂,大家都知道时什么意思的。比如要写一个加法 总不可能写成aaa或者bbb cdd函数吧,这太难理解了。并且当代码数据上升到一定层次时,自己也看不懂自己写的是什么了,所以,命名相当重要。

 回归正题,我们知道了这几个数字1 2 4 4 8 4 8 后就要知道他们的含义了,1就是一个字节,表示8个比特位,则char (字符型)的范围是 : 从-128到+127   简记为 从-2^7~2^7-1 这里的7就是8-1

再看int 是 4 对应的是4个字节(byte),即 4 x 8 =32 个比特  根据规律  32-1  =31 这就是2的次方

所以得到int的范围是(-2^31~2^31-1),总结起来就是   int占用4字节,32比特,数据范围为-2147483648~2147483647[-2^31~2^31-1]   

大家可以以此类推其他的数据类型的范围,比如8  就是 8x8 =64 个比特     64 -1 =63 就是 2的六十三次方。即-2^63~2^63-1   

总结规律就是把字节换算到比特后 得到的数据-1 就是2的次方    简记为n-1也可以。

4:常量变量

这里讲两个概念,局部变量全局变量  

什么意思呢? 上代码

 

第一条语句int a=0 即为全局变量

第二个大括号内的语句 int a=10 就是局部变量   我这样讲可能不太准确。

 

 再附加一张图

大家可以看到,两个变量位置没有变化,但是printf的位置发生了变化,我们可以看到

打印出来的结果是0 说明运行了的函数是int a=0;   即打印的是全局变量的值,而局部变量int a =10;没有打印出来。  我的理解是这样的,同学们也可以下载一个编译器自己运行一下看看结果,效果会更好。

第一次发博客,不足地方还请多谅解,我会继续努力的! 希望我的文章会给初学者带去一点用处。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张学恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值