目录
2.1 编写一个简单的C程序
2.1.1 编译和链接
2.1.2 集成开发环境
2.2 简单程序的一般形式
2.2.1 指令
2.2.2 函数
2.2.3 语句
2.3 注释
2.4 变量和赋值
2.4.1 类型
2.4.2 声明
2.4.3 赋值
2.4.4 显示变量的值
2.4.5 初始化
2.4.6 显示表达式的值
2.5 读入输入
2.6 定义常量的名字
2.7 标识符
2.7.1 关键字
2.8 C程序的书写规范
2.1 编写一个简单的C程序
#include <stdio.h>
int main()
{
printf("To C,or not to C:that is the question.\n");
return 0;
}
2.1.1 编译和链接
尽管上述程序十分简短,但是为运行这个程序而包含的内容可能比想象的要多
1、将上述程序代码的放在名为 pun.c 的文件(文件的名字无关紧要,但是编译器通常要求程序在.c后缀的文件中)
- 预处理:以.c为后缀的文件会被交给预处理器,预处理器会处理文件中以#开头的内容
- 编译:预处理后的文件会进入编译器,编译器会将文件翻译成电脑可读懂的内容(机器码)
- 链接:链接器将编译器产生的目标代码和所需的其他附加代码整合在一起,这样才最终产生了完全可执行的程序(附加代码包括程序中用到C语言提供的标准库函数,如printf函数)
2.1.2 集成开发环境
- VS2022:安装报包较⼤,安装简单,⽆需多余配置,使⽤⽅便
- XCode:苹果电脑上的开发⼯具
- CodeBlocks:⼯具⽐较⼩众,需要配置环境,不太推荐
- DevC++:⼩巧,但是⼯具过于简单,对于代码⻛格的养成不好,⼀些竞赛使⽤
- Clion:⼯具是收费,故不推荐⼤家使⽤
vs2022安装视频教学:https://www.bilibili.com/video/BV11R4y1s7jz/
2.2 简单程序的一般形式
指令
int main(void)
{
语句 //注释
}
2.2.1 指令
指令#include <stdio.h> 表明,在编译器编译前把会头文件“stdio.h”中的信息“包含”到程序中(<stdio.h>包含 C 标准输入/输出库的信息,C 语言拥有大量类似于 <stdio.h>的头文件,每个头都包含一些标准库的内容) 我们所编写的每一段C程序都需要该指令
2.2.2 函数
基本概念:是构建程序的构建块(事实上,C 程序就是众多函数的集合)
分类:自定义函数(程序员自己编写的函数)、库函数(编译器提供的一系列函数)
注意事项:
1、函数的功能取决于它内部的语句,若语句是return x + 1,则该函数的作用就是返回x+1的结果
int Add(int x) //Add函数的返回类型为整型int,函数的形参为整型的x
{
return x + 1; //函数的作用是返回x + 1的结果,类似于数学中的f(x) = x + 1;
}
2、虽然一个 C 程序可以包含多个函数,但主函数 main 有且只能有一个,它是整个C程序的入口,并且main的名字不能被更改,即使是MAIN
2.2.3 语句
基本概念:语句是程序运行时执行一条条的命令
注意事项:每条语句都要以分号结尾(复合语句除外)
语句可以连续占用多行,有时很难确定结束位置,故用分号来向编译器显示语句的结束位置
2.3 注释
作用:1、用于解释编写代码的目标、原因和实现方法(解释你的代码是用来干什么的)2、将一些
你不需要的内容隐藏起来
分类:单行注释//、多行注释/* */
特点:可以出现在程序的任何位置,既可以独占一行,也可以与其它语句出现在同一行
2.4 变量和赋值
基本概念:大多数程序在产生输出之前往往需要执行一系列的计算(比如x + 1),因此需要在程序执行过程中存放临时的数据(想要计算x + 1,起码x得代表一个数吧,假如x = 1,那么x存放的就是一个临时的数据1,x就是变量),C 语言存放临时数据的存储单元被称为变量(x就是变量,叫它变量是因为如果x = x + 1 呢?1 + 1 后x中存储的临时数据就变为2了)
2.4.1 类型
基本概念:每一个变量都必须有一个类型(type)
作用:类型用来说明变量所存储的数据的种类
两种常见的类型:
int类型的变量可以存储整数,如 0、1、392 。但是,整数的取值范围是受限制的。最大的整数通常是 2 147 483 647,但在某些计算机上也可能是 32 767。float类型变量可以存储比 int 型变量大得多的数值。而且,float 型变量可以存储带小数位的数,如 379.125。但 float 型变量也有一些缺陷。进行算术运算时 float 型变量通常比 int 型变量慢;更重要的是,float 型变量所存储的数值往往只是实际数值的一个近似值。如果在一个 float 型变量中存储 0.1,以后可能会发现变量的值为0.099 999 999 999 999 87,这是舍入造成的误差。
2.4.2 声明
基本概念:在使用变量之前必须对其进行声明(告诉编译器变量是什么类型的)
int height; //int类型的变量 height
float profit; //float类型的变量 profit
如果几个变量具有相同的类型,就可以把它们的声明合并:
int height, length, width, volume;
float profit, loss;
注意事项:程序中用到的变量、函数等都需要先声明后使用
#include <stdio.h>
int main()
{
int x;
x = x + 1;
int y;
y = y + 1;
return 0;
}
2.4.3 赋值
基本概念:变量通过赋值的方式获得值
int height = 8;
int length = 12;
float profit = 2150.48f;
注意事项:
1、当把一个包含小数点的常量赋值给 float 型变量时,最好在该常量后面加一个字母 f,不加 f 可能会触发编译器的警告;
2、混合类型赋值(例如把 int 型的值赋给 float 型变量,或者把 float 型的值赋给 int 型变量) 是可以的,但不一定安全
2.4.4 显示变量的值
#include <stdio.h>
int main()
{
int height = 8;
printf("Height: %d\n", height);
return 0;
}
#include <stdio.h>
int main()
{
float profit = 2150.48f;
printf("Profit: $%.2f\n", profit);
return 0;
}
C 语言没有限制调用一次 printf 可以显示的变量数量。为了同时显示变量 height 和变量 length 的值,可以使用下面的 printf 调用语句:
#include <stdio.h>
int main()
{
int height = 8,length = 12;
printf("Height: %d Length: %d\n", height, length);
return 0;
}
2.4.5 初始化
基本概念:当程序开始执行时,某些变量会被自动设置为零,而大多数变量则不会。没有默认值并且尚未在程序中被赋值的变量是未初始化的
如果试图访问未初始化的变量(例如,用 printf 显示未初始化变量的值,或者在表达式中使用该未初始化的变量),可能会得到不可预知的结果,如 2568、30891 或者其他同样没有意义的随机数值。在某些编译器中,可能会发生更坏的情况(甚至是程序崩溃)
在同一个声明中可以对任意数量的变量进行初始化:
int height = 8, length = 12, width = 10;
int height, length, width = 10; //height和length未初始化
2.4.6 显示表达式的值
volume = height * length * width;
printf("%d\n", volume);
printf("%d\n", height * length * width);
2.5 读入输入
基本概念:有时程序需要允许用户自行输入一些数值,比如计算x + 1,我们希望x的值是可以由用户自己决定的而不是在程序中固定死的,为了获取输入,就要用到 scanf 函数。
#include <stdio.h>
int main()
{
int height,length;
scanf("%d %d", &height,&length);
printf("Height: %d Length: %d\n", height, length);
return 0;
}
#include <stdio.h>
int main()
{
float profit;
scanf("%f", &profit);
return 0;
}
%f 只用于 float 型变量,profit是一个 float 型变量。字符串"%f"告诉 scanf 函数去寻找一个 float 格式的输入值(此数可以含有小数点,但不是必须含有)
2.6 定义常量的名字
基本概念:当程序含有常量时,建议给这些常量命名(采用宏定义的方式)
方式:#define 常量名 常量值
#define 也是预处理指令。当对程序进行编译时,预处理器会把每一个宏替换为其表示的值:
#include <stdio.h>
#define NUM 166
int main()
{
weight = (volume + NUM - 1) / NUM;
//weight = (volume + 166 - 1) / 166;
return 0;
}
#include <stdio.h>
#define EXPRESSIONS (1.0f / 3.14159f)
int main()
{
printf("%f",EXPRESSIONS);
return 0;
}
注意事项:1、当宏包含运算符时,建议用括号把表达式括起来;2、 宏的名字一般均为大写
2.7 标识符
基本概念:在编写程序时,需要对变量、函数、宏和其他实体进行命名。这些名字称为标识符
注意事项:
1、标识符可以含有字母、数字和下划线,但是必须以字母或者下划线开头
合法标识符:times10、get_next_char _done
非法标识符:10times get-next-char
2、C 语言区分大小写,即在标识符中 C 语言区分大写字母和小写字母
8个不同的标识符:job joB jOb jOB Job JoB JOb JOB
3、为了避免使用下划线,可以把标识符中的每个单词用大写字母开头(大/小驼峰命名法)
symbolTable、currentPage、nameAndAddress
4、C 对标识符的最大长度没有限制,因此不用担心使用较长的描述性名字
2.7.1 关键字
2.8 C程序的书写规范
printf("Dimensional weight (pounds): %d\n",
(volume + INCHES_PER_POUND - 1) / INCHES_PER_POUND);
volume = height * length * width;
3、缩进有助于轻松识别程序嵌套:
#include <stdio.h>
int main()
{
int x;
return 0;
}
4、空行可以把程序划分成逻辑单元,增强代码可读性:
#include<stdio.h>
int main(void)
{
float fahrenheit, celsius;
printf("Enter Fahrenheit temperature: ");
scanf("%f", &fahrenheit);
celsius = (fahrenheit - FREEZING_PT) * SCALE_FACTOR;
printf("Celsius equivalent: %.1f\n", celsius);
return 0;
}
注意事项:将字符串分成两行是错误的
printf("To C, or not to C:
that is the question.\n"); /*** WRONG ***/
~over~