前言:
本章只是基本了解C语言的基础知识,对C语言有个大概的认识,能够基本读懂代码,适合零基础学习C语言的同学,每个知识点就是简单的认识,不做详细的讲解,后期还会出详细的知识讲解。
一、如何学好C语言
1.1鼓励你,为你叫好。
C生万物
编程之本
长远IT职业发展的首选
C语言是母体语言,是人机交互接近底层的桥梁
学会C/C++,相当于掌握技术核心
知识点一竿子打通
IT行业,一般每10年就有一次变革
近50年间,在IIOBE 排行榜中,C/C++位置长期霸占前三名,没有丝毫撼动
可谓经典永不过时!
1.2挤时间学习
·戴王冠,必承其重
·如果你总是和别人走一样的路怎么才能保证超越别人,那就得付出不一样的努力
·真正成为一个领域的专家,至少需要付出10000小时的训练
1.3学好编程,不仅仅是学好C语言
必须要学好:
计算机语言(C/C++,Java等等),算法与数据结构,操作系统,计算机网络,项目实战,数据库
二、初始C语言(上)
重点:
1.什么是C语言
2.第一个C语言程序
3.数据类型
4.变量、常量
5.字符串+转义字符+注释
6.选择语句
7.循环语言
8.函数
1.什么是C语言
自然语言:汉语、日语、英语......等等,这些都是人与人之间交流的语言
计算机语言:人与计算机交流的语言,eg:C/C++/Java/python/go/php等等,计算机语言有上千种,C语言就是一种计算机语言,广泛应用于底层开发
C语言是面向过程的编程语言,而C++/Java等是面向对象的编程语言
美国国家标准局为C语言定制了一套完整的标准语法,称为ANSI C,计算机处理的是二进制的信息(100010101),但这样太麻烦,便产生了汇编语言(如00010000表示Add,这种就叫做助记符),然后又产生了B语言,接着是C语言(高级语言),但是由于不统一,便产生了一套标准
其编译器主要有:Clang,GCC,MSVC(VS集成开发环境的编译器)
集成开发环境:就是辅助程序员开发的应用软件,如VS2019,VS2022,Devc++,CodeBlocks,集成了很多的子功能:编辑,编译,链接,运行,调试
2.第一个C语言程序
在屏幕上打印:Hello World
#include<stdio.h> int main() { printf("Hello World\n"); // \n是换行符(类似于Enter回车键) return 0; }
解释:
#include<stdio.h>是头文件的包含,stdio中的std是标准,i是输入,o是输出
main函数是程序的入口,并且一个程序中有且只有一个main函数
printf是库函数,是用来打印输出的,库函数的使用得包含头文件,它的头文件就是stdio.h
return 0是在main函数结束的返回值为0
除了第四行,其他的部分都是C语言程序固定部分,是敲代码不可缺少的部分
当然,学习C语言肯定需要好的工具,vs2019,vs2022都可以,具体安装教程可以看这个,强力推荐鹏哥的C语言视频,讲解的很细致,个人觉得是最好的C语言学习课程
3.数据类型(用来创建变量的)
char //字符串数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点型(浮点数就是小数)
double //双精度浮点型
Answer:没有,字符串通常是放在字符数组中的
Question 2:为什么出现这么多类型?
Answer:其实是为了更加丰富的表达描述生活中的各种值
Question 3:每种类型的大小是多少?
Answer:每个类型后面对应的就是其大小(此处的%d是以十进制的形式打印整数)
#include<stdio.h> int main() { //sizeof是用来计算操作数的类型长度(以字节为单位) printf("%d\n", sizeof(char)); //1字节 printf("%d\n", sizeof(short)); //2 printf("%d\n", sizeof(int)); //4 printf("%d\n", sizeof(long)); //4 printf("%d\n", sizeof(long long)); //8 printf("%d\n", sizeof(float)); //4 printf("%d\n", sizeof(double)); //8 return 0; }
C语言标准:sizeof(long long) >sizeof (long) >=sizeof (int) >sizeof (short) >sizeof (char)
补充:计算机中常见单位及换算:
bit -比特位
byte -字节
KB 1byte=8bit
MB 1KB=1024byte
GB 1MB=1024KB
TB 1GB=1024MB
PB 1TB=1024GB
4.变量、常量
4.1定义变量的方法
变量数据类型+变量名(type+name)
char ch='w'; int weight=120; int salary=20000;
4.2变量的分类
·局部变量:在{ }内部定义的定义的变量
·全局变量:在{ }外边定义的变量
#include<stdio.h> int a=100; //全局变量 int main() { int a=1000; //局部变量 printf("a=%d",a); return 0; }
注意:当局部变量和全局变量同名的时候,局部变量优先,所以上面代码的结果是1000
4.3变量的使用
#include<stdio.h> int main() { int a=0; int b=0; int sum=0; scanf("%d %d",&a,&b); sum=a+b; printf("sum=%d\n",sum); return 0; }
此处出现了输入函数scanf,注意scanf格式后面不要加\n,同样这里的%d是以十进制的形式输入,&是取地址符,scanf("%d",&a)意思就是输入一个值并放入a的地址去,让a等于输入的值
4.4变量的命名
·只能由字母(包括大写和小写),数字和下划线(_)组成
·不能以数字开头
·长度不能超过63个字符
·变量名大小写不同,算两个不同的变量
·变量名不能使用关键字(关键字在下一节会讲)
·变量名取得尽量有意义
4.5变量的作用域和生命周期
作用域:变量作用的范围
局部变量的作用域是变量所在局部范围
全局变量的作用域是整个工程
生命周期:变量从创建到销毁之间的一段时间
局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束
全局变量的生命周期:就是整个程序的生命周期
4.6常量
C语言中的常量分为以下几种:
· 字面常量
· const修饰的常变量(修饰以后变量还是变量,只是具有了常属性)
· #define定义的标识符常量
· 枚举常量
#include<stdio.h> //枚举常量(枚举:就是一一列举) //三原色:红,绿,蓝 //性别:男,女,未知 //星期:1,2,3,4,5,6,天 //自定义类型 enum Color //enum是枚举关键字 { //枚举常量 RED, //这里用,而不是; GREEN, //默认这几个常量为0,1,2;如果自己定义为7,那这三个就是7,8,9 BLUE, }; //注意这里有逗号 int main() { enum Color c=RED; printf("%d\n",RED); //打印的结果为0 return 0; } int main()//这里只是做个示范,记住一个程序只能有一个main函数 { //字面常量演示 3.14; //字面常量 1000; //字面常量 //const(中文意思:常属性的),用来修饰变量 const int a=10; //a就是const修饰的常变量,但是本质上a还是变量 printf("a=%d\n",a); //a=10 a=100; printf("a=%d\n",a); //a=10;因为const修饰的变量具有常属性,值不会改变 int arr[10]={0}; const int n=10; int arr2[n]={0}; //这是错误的,const并没有使变量变成常量(数字的个数[ ]里不能用变量表示,只能用常量) //#define定义的标识符常量 #define M 100 //(没有逗号,而且这条语句要写在主函数之前) int arr[M]={0}; //这里的M是常量而不是变量 int a=M; printf("%d\n",a); return 0; }
5.字符串+转义字符+注释
5.1字符串
"hello world.\n"
这种由双引号引起来的一串字符就是字符串
注意:字符串的结束标志是\0(虽然看不到,但是一直存在),但是计算字符串长度时,\0不算字符串长度
#include<stdio.h> int main() { char arr1[]="bit"; //这个字符串的结尾自动带有'\0'作为字符串的结束标志 char arr2[]={'b','i','t'}; //这个结尾没有\0,打印出来就不知道什么时候结束,就会乱码 char arr3[]={'b','i','t','\0'}; //这个才是正确的写法,结果和第一个一样 printf("%s\n",arr1); printf("%s\n",arr2); printf("%s\n",arr3); return 0; }
5.2转义字符
问题:如果想在平面上打印一个目录:c:\code\test.c
#include<stdio.h> int main() { printf("c:\code\test.c\n"); return 0; }
这样代码运行结果是这样的:
c:code est.c
这是因为转义字符的原因,要想打印就得\\(反斜杠)取消转义,下面来介绍转义字符:
\t:水平制表符:就相当于Tab键(每8个字符可以看作一个水平制表符,如果遇到 \t 之前未满8个字符 则 \t 就补空格直到满8个)
\ddd:可以接一个到三个,不一定是三个
\xdd:x是固定的,十六进制有:0 1 2 3 4 5 6 7 8 9 A B C D E F
问题1:怎么打印一个单引号 ' ?
printf("%c\n",'\''); //%c是用来打印字符的
问题2:怎么打印一个双引号 " ?
printf("%s\n","\""); //%s是用来打印字符串的
单引号和双引号的区别:
- 'A' 表示单个字符大写字母A,占用1个字节
- "A" 表示字符串,该字符串只有1个大写字母A组成,占用2个字节空间,每个字符串末尾自动会加上一个空字符 '\0'
问题3:计算下面字符串的长度
这里用到了strlen函数,这个函数是计算‘\0’之前的字符串个数,如果没有\0,那就不会结束,随机给一个值,用这个库函数之前还要引头文件
#include <string.h>
第三个为啥\181不算一个,因为8进制没有8,所以不算是一个转义字符
#include<stdio.h> int main() { printf("%d\n", strlen("abc")); printf("%d\n", strlen("c:\test\111\test.c"));//13 \t \111 各算一个字符 printf("%d\n", strlen("c:\test\181\test.c"));//15 \1 \t 各算一个字符 return 0; }
5.3注释
(1)代码有一些不需要的可以直接删除,也可以注释掉
(2)代码中有些代码比较难懂,可以加一下注释文字
注释的两种风格:
【1】/*xxxxxxx*/ 缺陷:不能嵌套注释,只能从头注释到尾
【2】//xxxxxxxxxx 推荐这种,可以注释多行也可以注释一行
6.选择语句(本处只简单介绍if else语句)
C语言——结构化的程序化设计语言,包括了顺序结构,选择结构(有两种:if 和switch语句),循环结构(有三种:while,for和do while语句)
选择:
如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
代码如下:
#include<stdio.h> int main() { int input=0; printf("你打算好好学习吗(1\0)\n"); scanf("%d",input); if(input==1) { printf("好offer\n"); } else { printf("回家卖红薯\n"); } return 0; }
注意:C语言中的==相当于是数学中的等于号,而=是赋值的意思
7.循环语言
C语言中的循环语句有三种
·while语句
`for语句(以后讲)
·do......while语句(以后讲)
代码实现上面菜鸟不断敲代码成为大牛循环的流程图:
#include<stdio.h> int main() { int line=0; while(line<30000) { line++; printf("我要继续努力敲代码\n"); } if(line==30000) printf("代码敲到30000行,成为大牛拿到好offer,迎娶白富美\n"); return 0; }
8.函数
类比 原料 ——>工厂——>产品
函数:输入参数——>函数——>返回值(函数都包括这些部分)
eg: y=f(x)=2*x+5 给x一个值(输入参数),进入函数,就会返回一个y值(返回值)
下面通过自定义函数来实现两个数的相加:
#include<stdio.h> //自定义函数也可以写在后面但是要在主函数之前进行函数声明 //int Add(int x,int y);(自定义函数主体在后面这样写) int Add(int x,int y) { int z=x+y; return z; //自定义函数的返回值 } int main() { int a=0; int b=0; int sum=0; scanf("%d %d",&a,&b); // 求和:sum=a+b sum=Add(a,b); printf("%d\n",sum); //自定义函数的调用 return 0; }
三、易错练习题
想想这个代码打印的结果是多少?
#include <stdio.h> #include <string.h> int main() { char arr[] = {'b', 'i', 't'}; printf("%d\n", strlen(arr)); return 0; }
answer:结果是个随机值,因为strlen并没有找到'\0'
四、结语:彼方尚有荣光在,少年不惧岁月长
初始C语言部分暂时先介绍到这里,后面还有部分内内容正在整理...
感觉笔者写的还可以,或者自己有些许收获的时候,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢