第一章 概述
一、C语言编程工具
1、Dev c++,大部分比赛指定软件,安装卸载方便,学习成本低,缺点是调试功能弱。
2、Visual Studio,具有代码补全,调试功能等优点。
二、开发C程序的步骤
C语言代码由固定的词汇按照固定的格式组织起来,通过编译器(Compiler)将C语言代码转换成电脑CPU能够识别的二进制代码指令,最后加工成后缀名为.exe的可执行程序。
1、编辑
编写源代码,将文件保存为.c文件或者.h文件(注意:.cpp文件是c++语言的源程序)
2、编译(Compiler)
①编译介绍
编译器能够识别源代码中的词汇、语句以及各种特定的格式,并将他们转换成计算机能够识别的二进制,这个过程就叫编译(Compiler)。但是这是一个复杂的过程,期间还涉及算法和硬件架构,有兴趣的可以阅读《编译原理》,不了解也不影响C语言编程学习。
比如:我们用的Dev c++集成开发环境(IDE)使用的是MingW64/TDM-GCC编译器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFghZF7L-1668952989551)(C:\Users\zz\AppData\Roaming\Typora\typora-user-images\image-20221118114820397.png)]
注意:我们也可以直接使用gcc编译器,打开windows的命令行,WIN+R,输入CMD
使用gcc -c 源代码名.c 将生成.o的目标文件
使用gcc -o 程序名.exe 源代码名.c 将生成.c的可执行程序
但是为了方便我们一般都使用IDE集成开发环境。
②编译软件使用技巧
一段C语言代码,在编译、链接和运行的各个阶段都有可能会出现问题,而编译器只能检查编译和链接阶段出现的问题,可执行程序已经脱离了编译器,运行时出现的问题只能通过自己分析或者用vs的调试功能来判断。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rFkfMMva-1668952989552)(C:\Users\zz\AppData\Roaming\Typora\typora-user-images\image-20221118163131648.png)]
如果代码编写正确,运行时会提示没有错误(Error)和警告(Warning)。
错误(Error)表示程序不正确,不能正常编译、链接或运行,必须要纠正。
警告(Warning)表示可能会发生错误(实际上未发生)或者代码不规范,但是程序能够正常运行,有的警告可以忽略,有的要引起注意。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zGefPB1Q-1668952989553)(C:\Users\zz\AppData\Roaming\Typora\typora-user-images\image-20221118163619092.png)]
我们可以通过双击红色字体去定位有问题的地方,结合信息栏的内容去解决问题。
3、链接(Link)
通过编译,我们将自己写的源代码转换成了目标文件(Object File)和中间文件,目标文件是进二进制形式的,对于GCC编译器,目标文件的后缀名是.o
。它还需要和系统组件(比如标准库、动态链接库等)结合起来。
这就是一个“打包”的过程,通过链接器将所有二进制形式的目标文件和系统文件组合成一个可执行文件。
4、运行
我们可以使用DEV界面内的运行按钮,也可以双击.exe或者右键打开电脑上的文件,这样可以执行程序得到运行结果,但是有的时候程序一闪而过,这时可以使用system(“pause”)或者getchar()函数来让程序暂停一下,避免程序运行完直接结束而看不到结果。
三、C语言的基本结构
一个C语言程序可以由多个函数组成,但是主函数只能有一个,程序执行开始于主函数,也结束于主函数。结构:
1、预处理指令
2、函数
3、变量
4、语句和表达式
5、注释
四、C语言的基本语法
C程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串或者一个符号。比如下面的C语句有5个令牌
printf("helloworld");
1、分号";"
每个语句必须以分号结束。
2、注释
C语言有两种注释方式
// 单行注释,快捷键 CTRL+/
/*
语句; 多行注释,快捷键 CTRL+;
*/
3、标识符
是用来标识变量、函数等的名称,只能由数字、字母和下划线组成,同时数字不能在第一位,同时也区分大小写。
int dis;//dis就是标识符,该语句的意思是定义了一个整型变量dis
int Dis;//Dis和dis在内存中的地址不一样
4、关键字
C语言的关键字可以和标识符搭配使用,用来实现某些功能,比如上面的int、if、while等都是关键字。C语言中32个基本的关键字。但是在C99和C11中还新增了关键字,这个有兴趣的自己了解。
5、空格
比如在int和dis之间有一个空格,这样编译器才能区分它们,这是语法规定的。
五、输入输出函数
关于函数的使用,我们只需要掌握如何去用,而其中的原理需要更加深入的学习。
1、格式占位符(%)
是在C/C++语言中格式输入输出函数,其意义就是起到格式占位的意思,表示在该位置有输入或者输出
格式 | 意义 |
---|---|
%d | 输入/输出整型数据 |
%ld | 输入/输出长整型数据 |
%f | 输入/输出单精度浮点型数据 |
%lf | 输入/输出双精度浮点型数据 |
%c | 输出/输出单个字符 |
同时还可以指定宽度和数据对齐方向
例子 | 输出结果 | 说明 |
---|---|---|
printf(“%5d”,123) | _ _123 | 占5位,右对齐,左边补空格 |
printf(“%-5d”,123) | 123_ _ | 占5位,左对齐,右边补空格 |
printf(“%3d”,1234) | 1234 | 超出指定宽度时不受宽度限制 |
printf(“%5.1f”,123.45) | _123.5 | 占5位,右对齐,左边补空格 |
printf(“%.1f”,123.5) | 123.5 | 保留1位小数 |
2、scanf和printf函数
①scanf(“格式化字符串”,参数1的地址,参数2的地址,……);
②printf(“格式化字符串”,参数1,参数2……);
#include<stdio.h>//使用这两个函数,需要引入头文件
main(){
int a;
scanf("%d",&a);//&为地址运算符,将输入的值通过a的地址,放到变量a的内存空间里面。
printf("%d",a);//%d为格式符,即输出十进制的整数,那么这里就输出a的值
}
3、getchar和putchar函数
①getchar函数,从终端设备输入一个字符
字符变量/字符常量=getchar();
②putchar函数,在显示设备上输出一个字符变量
putchar(字符变量/字符常量);
#include<stdio.h>//使用这两个函数,需要引入头文件
main(){
char ch;
ch=getchar();
putchar(ch);
}
4、gets和puts函数
①字符串输入函数gets,从标准输入设备键盘上输入一个字符串
gets(字符串数组名);
②字符串输出函数puts,把字符数组中的字符串输出到显示器上
puts(字符串数组名);
#include<string.h>//使用字符串相关函数,需要引入头文件
main(){
char a[15];
gets(a);//接收一个字符串
puts(a);//输出一个字符串
}
六、结构化程序设计的原则
1、顺序结构
程序的流程是自
2、选择结构
分支结构,可以根据判断条件来决定程序怎么走。
3、循环结构