开学大二师范院校的软件专业,大一上学期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;没有打印出来。 我的理解是这样的,同学们也可以下载一个编译器自己运行一下看看结果,效果会更好。
第一次发博客,不足地方还请多谅解,我会继续努力的! 希望我的文章会给初学者带去一点用处。