C语言学习笔记7月29日
注:本笔记基于Visual Studio-2022环境
C语言概述
1.1、C语言的特点
C语言是一种通用的程序设计语言,主要用于进行系统设计,具有如下的特点
1. 高效性
从C语言的发展历程可以看到,它继承了低级语言的优点,代码运行效率高,并且具有良好的可读性和编写性。一般情况下,C语言生成的目的代码的执行效率只比汇编程序低10%-20%。
2. 灵活性
C语言中的语法不拘一格,可在原有的基础上进行创造、复合,从而给程序员更多的想象空间和发挥空间。
3. 功能丰富
除C语言中所具有的类型外,还可以使用丰富的运算符和自定义结构类型来表达复杂的数据类型,完成所需要的功能。
4. 表达能力强
- 作为高级语言,C语言具有良好的可移植性。在其他操作系统下,只需要简单的修改甚至不用修改,即可以进行跨平台的程序开发操作。
6. 移植性好
1.2、C语言的开发环境
C语言有很多开发工具,如:VScode、Visual C++ 6.0、Visual Studio 2022、CLion等(工具不是最重要的)
这里选择用Visual Studio 2022
安装Visual Studio 2022社区版
Visual Studio 2022 Community下载链接
下载完成后根据自己需要安装对应的开发环境(这里为个人工作学习需要,大部分打勾了,大约需要30G的空间)
1.3、第一个简单的C语言程序
学习第一步:打印Hello Word!
1、打开Visual Studio 2022
2、选择创建新项目-空项目-下一步
3、配置好项目名称和项目目录
4、选择“解决方案资源管理器”中的Demo,右键“源文件”选项,在弹出的快捷菜单中选择“添加”-“新建项”命令,
5、创建C++头文件-命名-添加
注:(因为要创建C源文件,所以需要在命名的时候将默认的拓展名.ccp改为.c)
6、将代码写到“一个C语言程序中”
#include<stdio.h> /*包含头文件stdio.h*/
int main() /*主函数main,程序入口*/
{
printf("Hello World!"); /*输出要显示的字符串*/
return 0; /*程序返回0*/
}
7、输出结果
1.#include指令
实例代码的第一行是一个编译预处理命令,声明了在程序编译之前要预先处理的内容。
#include<stdio.h>
其中,include称为文件包含命令,后面的尖括号中的内容称为头文件或首文件。本行代码的作用是声明本段代码已包含标准输入/输出库函数stdio,后续可直接调用,不需要用户再进行自定义。
2.空行
实例代码的第二行是一个空行。
C语言是一个相对灵活的语言,格式并不是固定不变的。也就是说,空格、空行、跳格并不会影响程序的运行。
3.mian函数声明
实例代码的第三行如下
int main()
本行代码的作用是声明main函数有一个整型返回值。其中的int称为关键字,该关键字代表的类型是整型。
函数中,这一部分称为函数头部分。每个C语言程序都必须有一个main函数,表示程序入口部分。也就是说,程序都是从main函数头开始执行的,然后进入main函数体中,执行其中的代码块。
ps:整数类型
(下表列出了关于标准整数类型的存储大小和值范围的细节)
类型 | 存储大小 | 值范围 |
---|---|---|
char | 1字节 | -128 到127 或 0 到 255 |
unsigned char | 1字节 | 0 到 255 |
signed char | 1字节 | -128 到 127 |
int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2字节 | -32,768 到 32,767 |
unsigned short | 2 字节 | 0 到 65,535 |
long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字节 | 0 到 4,294,967,295 |
4.函数体
实例代码中的第4~7行如下:
{
printf("Hello World");
return 0;
}
上面介绍main函数的时候,提到了一个名词"函数头"。既然有函数头,也需要有函数体。
在C语言中一个函数通常被分为两个部分:一是函数头,二是函数体。
程序代码的第4行和第7行是两个大括号,这对大括号以及其中的语句块就构成了函数体。第5行和第6行语句就是函数体中要执行的内容。其中,printf函数就包括在标准输入/输出库文件stdio中,因为前面做了包含声明,所以这里开发者可以直接调用,进行字符串的输出操作。
5.执行语句
函数体中第5行代码如下所示:
printf("Hello World!");
执行语句就是函数体中要执行的动作内容。本行代码是这个简单的例子中最复杂的语句,但其实不难理解,printf是格式化输出函数,用于向控制台输出文字和符号。括号中的内容称为函数参数,这里可以看到要输出的文字是"Hello World!“。其中还可以看到”\n"这样的符号,称之为转义符,其作用是换行。
注意不要忘记添加";"
6.return语句
函数体中的第6行代码:
return 0;
本行语句使main函数终止运行,并向操作系统返回一个整型常量0.前面介绍main函数时,说过它需要返回一个整型值,这里0就是要返回的整型值。可以将return语句理解成mian函数的结束标志。
7.代码注释
在多句程序代码后,均可以看到一段由/**/组成的注释代码
#include<stdio.h> /*包含头文件stdio.h*/
int main() /*主函数main,程序入口*/
{
printf("Hello World!"); /*输出要显示的字符串*/
return 0; /*程序返回0*/
}
这段对代码的解释表述性文字称为代码注释,作用是为了他人能快速理解程序代码的含义和设计思想。
1.4一个完整的C程序
计算长方形体积
#include<stdio.h>
#define Height 10
int calculate(int Long, int Width);
int main()
{
int m_Long;
int m_Width;
int result;
printf("长方形的高度为:%d\n",Height);
printf("请输入长度\n");
scanf("%d",&m_Long);
printf("请输入高度\n");
scanf("%d",&m_Width);
result = calculate(m_Long, m_Width);
printf("长方形体积是:");
printf("%d\n", result);
return 0;
}
int calculate(int Long, int Width)
{
int result = Long * Width * Height;
return result;
}
注:这里直接运行这段程序会报错
原因是scanf函数存在点问题,不安全
1、可以选择在开头加入
#define _CRT_SECURE_NO_WARNINGS
来防止报错
2、可以使用scanf_s来防止报错(但该方法不适用于大规模开发,容易搞混淆)。