C语言概述
计算机基础
计算机组成
-
计算机:能进行计算以及逻辑处理的设备
-
硬件:组成计算机的物理部件。(内存条、CPU、硬盘..)
开发中对于硬件的认知:
硬件包括电子设备、单片机、集成电路和嵌入式系统
-
软件:计算机中运行的程序和数据
开发中对于软件的认知:
软件分为系统软件(OS)、应用软件和编程工具(编译器)
计算机的六大部件
-
中央处理器(CPU):控制 + 计算
-
内存:临时存储运行时的数据。
-
输入设备:向计算机输入数据(键盘、鼠标、扫码枪)
-
输出设备:将计算机数据进行输出(显示器、打印机)
-
外存储器:永久存储数据(硬盘)
-
网络:数据传输与通信
计算机的工作原理
-
存储程序:程序和数据存储在内存中
-
程序控制:CPU按指令顺序执行
计算机的语法
-
机器语言:二进制代码,直接控制硬件
-
汇编语言:助记符形式,需要汇编器翻译
-
高级语言:C/C++,Java,Python,PHP,C#,GO
C语言特点
-
简洁高效,支持底层硬件操作
-
可移植性强,适合结构化编程
-
生成代码质量高,执行速度快
C语言程序开发过程(掌握)
开发的三个步骤
1.编辑:编写源代码(.c文件,程序员完成)
2.编译:将源代码文件转换为可执行的文件(编译器完成)
3.运行:执行程序(操作系统加载)

c语言程序的编译过程
编译分为四个步骤:
1.预处理:处理宏和头文件以及注释
2.编译:生成汇编代码
3.汇编:转换为机器码/二进制代码
4.链接:合并库文件和目标文件(二进制代码)

编译的命令

C语言基本结构
一个简单的c语言程序
代码:
#include <stdio.h>
int main (int argc,har *argv[])
{
printf("hello world!\n");
return 0;
}
程序结构分析:
-
注释:解释代码逻辑,写给程序员看,预处理阶段会删除。
-
预处理指令:程序中包含的某一文件内容(
#include <stdio.h>) -
主函数:
main函数是程序唯一的入口,一i个文件中最多一个主函数,不能被其他函数调用 -
关于函数:
-
函数头:(函数首部或者函数说明)
说明函数类型,函数头由函数头和参数列表构成。
-

-
函数体:
包括变量说明和语句的执行部分
-

-
函数调用语句:类如:
printf() -

-
c语言编程规范要求
C语言在编程的时候,需要遵循如下规范:
-
常用缩进格式(一次缩进四个字符,一个
tab键就是四个字符) -
要有足够的注释(是代码更好理解)
-
要是合适的空行(一般预处理指令和函数之间,函数和函数之间,全局变量和函数之间,加空行提高代码可读性,使代码结构清晰)
-

-
{}对齐 (c和c++{}都需要独占一行) -

-
函数体内采用分层缩进和模块化的书写方式
-

-
不把多条语句写在程序的同一行上(最好区分是,不要再同一行连续出现多个
:,for循环;;除外) -

-
标识符命名要见明知意。
-

c语言程序的设计特点
C语言程序在设计的时候,要注意以下细节:
-
C语言有一个或者多个函数组成,但是只有一个主函数
main,这个函数是程序的入口函数,建议放在所有函数的最下面 -
程序中可以有预处理指令(
#include、#define),预处理指令通常放在程序的最前面。 -
每个语句以分号结尾:(
预处理,函数头,函数,分支语句,while语句,for语句后面不加分号) -
函数体由一对
{}括起来,函数的{}不能省略。 -
包含在
/*. .*/内,或者//..后面的文本为注释内容 -
一行可以写多个语句,一个语句可以写在多行上。
-

c语言注释
在C语言中,注释一般分为两类:单行注释和多行注释
注释的作用:给代码添加解释说明性文字,提升代码的可读性,注释本身不参与编
译,在预处理阶段会被删除。我们同时也可以使用注释屏蔽掉暂时不需要的代码。
单行注解
说明:单行注释使用双斜杠 //.. 表示。我们一般用于变量、常量、函数调用语句
等。

多行注解
说明:多行注释使用双斜杠星花 /../ 表示。它可以占用一行,也可以占用多行,
但不能嵌套。我们一般用于函数,文件头说明等。
语法:
/* 要注释的内容 */
/*
要注释的内容
*/
注意:由多行注释衍生出一种更为细致的注释,我们称之为文档注释
范例:
/**
* 主函数
* @author 开发者
* @param 参数1 说明
* @param 参数2 说明
* @return 返回值
*/
int main()
{
...
}
数据类型
定义
数据类型就是固定大小内存的别名,并且描述了一个变量存放什么类型的数据。就是组织和操作数据。
数据:计算机要处理的数据(数字,字符串,文字,符号,图片,音频等)
-
数据类型不仅帮助我们组织和操作数据。还决定了程序如何有效的利用内存。
-
了解数据类型的内存需求是理解计算机管理和操作数据的关键。
注意:程序运行需要在内存中
数据类型分类和计算方法
数据类型分类(重点)
-
基本类型(C语言内置)
-
数值类型
-
整型(整数)
-
短整型:
short int -
基本型:
int -
长整型:
long int -
长长整型:
long long int
-
-
浮点型(小数,实数,实型)
-
单精度型:
float -
双精度型:
double -
长双精度型:
long double
-
-
-
字符型:
char
-
-
构造类型(C语言提供语法,用户自定义)
-
结构体:
struct -
联合体/共用体:
union -
枚举类型:
enum
-
-
指针类型
-
空类型:
void(C语言内置)
-
数据类型在内存中的大小
| 序号 | 数据类型 | 中文说明 | 大小(字节) |
|---|---|---|---|
| 1 | short(short int) | 短整型 | 2 |
| 2 | long (long int) | 长整型 | 4(32位)/8(64位) |
| 3 | long long(long long int) | 长长整型 | 8 |
| 4 | float | 单精度型 | 4 |
| 5 | double | 双精度浮点型 | 8 |
| 6 | char | 字符型 | 1 |
| 7 | int | 基本整型 | 4 |
| 8 | bool | 布尔型,true-真;false-假 | bool:1 ture-1;false-4 |
小贴士:
获取某个数据类型或者变量所占的字节数,使用sizeof运算符:sizeof(某个数据类
型或者变量名)
printf("true size:%d\n", sizeof(true)); // trus size:4 解释:true本身就是int类型的1,所以占4个字节 printf("bool size:%d\n", sizeof(bool)); // bool size:1 解释:占1个字
案例:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 计算数据类型或者变量的字节大小,通过sizeof运算符
printf("long long 的大小是%d个字节\n", sizeof(long long)); // %d 表示10进制整数
printf("long 的大小是%d个字节\n",sizeof(long));
printf("long double的大小是%d个字节\n",sizeof(long double));
return 0;
}
运行结果:

总结:
① 数据类型在内存中所占的字节数跟C语言的编译系统有关。
② 计算某个数据类型所占字节数可以用sizeof运算符。
③ 布尔类型要添加#include <stdbool.h> ,大家也可以直接使用int类型的0和1来表示布尔类型。
常量
在c语言中,数据的基本表现形式是常量和变量。都需要在内存中申请一块空间,用于存放数据。
定义:在程序执行过程中其值不可改变的量,称之为常量。
分类:int 、float、double、char、符号常量(宏定义)
整型常量
-
整型常量可以用十进制,八进制,十六进制三种形式表示。
-
十进制常量:由数字
0~9构成,无前缀,不能以0开头 -
八进制常量:由数字0~7构成,以0为前缀,不能表示小数。
-
十六进制常量:由数字
0~9,字母a ~ f/A ~ F构成,以0x /0X为前缀,不能表示小数。
-
-
-
注意:整型常量中的长整型可用
l或者L作为后缀,例如:long num =123L;
-
-
整型常量的分类:
-
有符号与无符号基本整型变量(int)
-
有符号表示范围:负数+0+正数
-
无符号表示范围:0+正数,内存中所有负数的位置都用来表示正数,此时它的正数范围超过有符号整数范围。
-
-
有符号与无符号长整型常量(long)
-
有符号与无符号短整型常量(short)
-
-
整型常量的表示:
-
十进制常量:由数字
0~9构成,无前缀,不能以0开头 -
八进制常量:由数字0~7构成,以0为前缀,不能表示小数。
-
十六进制常量:由数字
0~9,字母a ~ f/A ~ F构成,以0x /0X为前缀,不能表示小数。
-
浮点类型常量
C语言中浮点数就是小数
-
十进制小数;如:0.123,-12.6,0.123F(float类型的常量,要跟上
F/f) -
指数形式:
-
正数表示:如十进制小数1234.5的指数表示法就是1.2345*10^3,也可以表示为1.2345e3
-
负数表示:如十进制小数0.012的指数形式表示法就是1.2*10^{-2},也可以表示1.2e-2
-
注意:
① 在符号e的前面必须要有数字
② 在符号e的后面必须为整数,不能是带有小数点的实数型。
③ 实型常量的后缀用F/f表示单精度型。
字符型常量
用单引号 '' 括起来的一个字符,如 'a','A', '4', '_' 等,比如:'刘'就不是字
符,一个汉字所占的字节数超过1个字符。中文符号当成汉字理解。英文输入法下输入的
字母、数字、符号都是单字符。
转义字符常量:以反斜杠 \ 开头的字符序列,表示控制以及不可见字符。如:
| 字符形式 | 中文含义 | ASCⅡ码 |
|---|---|---|
| \n | 换行 | 10 |
| \r | 回车 | 13 |
| \0 | 空字符 | 0 |
| \t | 水平制表符 | 9 |
注意:
使用
man ascii可以查看所有的ASCⅡ字符
字符串常量
在C语言中,支持字符串常量,不支持字符串变量。字符串变量需要使用字符数组或者字符指针实现。
-
用一对双引号
""括起来的一个字符序列"hao a you?" "hello world" -
可以使用printf输出一个字符序列
printf("hello world");

符号常量
说明:一般通过宏定义,在预处理的时候替换成具体的常量
定义一个标识符来代表一个常量,如:用pi表示圆周率Π(3.1415926)
好处:
-
增加代码的可读性
-
增强了代码的可维护性
定义符号常量:
-
需要借助预处理指令:
#define -
格式:
#define 宏名称 宏值
注意:
宏名称和宏值之间用空格隔开
句末不能添加任何符号
宏名称的命名采用大写。如果有多个单词,使用下划线分隔:
#define MAX_VAL 9999
#define MIN_VAL 9999
举例:
#include <stdio.h>
// 定义符号常量
#define PI 3.14
#define R 20
int main(int argc,char *argv[])
{
// 计算圆的周长 2 × PI × R
printf("计算圆的周长:%f\n",2 * PI * R);// %f:以小数显示
// 计算圆的面积 PI × R × R
printf("计算圆的面积:%f\n",PI * R * R);
return 0;
}

2212

被折叠的 条评论
为什么被折叠?



