C语言基础
CPU 运算和控制
内存 支持寻址,写出来的程序,在其中执行
硬盘
2GB如何执行比起更大的程序?
分段加载
片选信号 告诉单片机要使用哪一片
寻址空间:虚拟空间 从硬件上映射出虚拟信息
C是结构化语言,以函数为基本单位
语言简洁、紧凑、使用方便、灵活
下图为C语言仅有的32个关键字
VC6.0新建文件步骤:
file new projects
win32 console application
file files 在右侧file下填写file.c
C语言区分大小写
标识符必须是以字母下划线开头
数据类型、运算符与表达式
常量(不可改变):
1整型常量 有十进制 八进制(开头必须是零) 十六进制
2实型常量 就是代表小数点的数
3字符常量 以单引号引起来的,如‘A’,引号起定界作用,输出时不显示。
4字符串常量 用双引号引起来,后面默认有一个\0
5符号常量 #define定义的宏定义的
宏定义的宏头必须是大写,且其参数必须有括号括起来,使其优先级平等
变量
先定义后运算
定义与声明的区别?
定义有申请空间,声明没有
三种数据类型:
1字符型
2整型
3浮点型
整型int
短整型 short
长整型 long
无符号整型 unsigned(没有负号)
宏定义中后方加入L为长整型
数据类型的转换
1自动转换
2强制转换
运算中,只要有double,得出的结果就是double类型,其优先度最高
浮点型转换为整型,舍掉后面的小数点,不进行四舍五入
运算符和表达式
算术运算符
5/2为2,因为它们都是int型
(float)5/2,强制转换可为2.5
关系运算符
1为真 0为假
< >= <= != ==
逻辑运算符
! && ||
非0既为真
赋值运算符
位运算符
~(按位取反) &(按位与) | << >> ^(按位异或)
~(-1)的值为0 详细看下图
按位取反就最终结果就是32位补码全部取反,所以得到32个零,既为0
条件运算符
三目运算符: 表达式1?表2:表3
与if(表1)表二else表三相似
,的优先级是最低的
特殊运算符(优先级最高)
() [] . -> & *
算法概念
- 对数据的描述
- 对操作的描述
程序=算法+数据结构
1自然语言
2流程图(毕业论文要用)
3N-S图
4伪代码(自然语言和一种编程结合)
C语言概述
- 表达式语句
- 控制语句
if switch … - 函数调用语句
- 空语句
- 复合语句
getchar()字符输出函数,putchar()字符输入函数
printf("%5d\n",n)
5表示位宽为5
若该5改位#,则在输出二进制或十六进制输出时加上前缀(例:0x11,010)
scanf()中不能有转义字符,如\n
scanf("%d",&n),其中的&是为了获取到n的地址,但如果n为数组(n[10]),那么就不要加&,因为数组中的n就代表着地址
导入math.h头文件,sqrt为开根号,例:
sqrt(9)得到3
若变量为double类型,则在scanf()的括号里应该写 “%lf”,&a 添加l后才能使double类型输入正确
选择结构
1 if 语句
2 switch case 语句
switch case语句的每个case后面记得加break,因为不加的话它就回继续往下面的case执行
default就是所有case语句都不符合的情况下执行的内容
switch(i)中的i是表达式,它必须是整型或字符型
- 当运行代码时出现报错,可以在自己认为有可能错误的地方加一个printf(“随意\n”); 若编译时没有出现该输出,则表明错误在该局之前
循环结构
-
for
当型循环(先判断后循环)
for(表达式1;表达式2;表达式3)
{循环体}
只有表达式1只会被执行一次
for(;;)无限循环 -
while
当型循环
while(1)无限循环 -
do while
直到循环(先循环后判断)
do{}while(1)无限循环
break用于跳出当前层所在循环
goto用于跳转,一般不用,因为其会打乱进程的运行顺序
数组
星期四
int a[10] 说明有十个元素个数,因为这些元素都是int型,,所以空间为40位(int为四位)
printf(‘"%d,%d,%d\n",a,&a[1]) a可以代表数组的首地址
[ ]中必须是常量,最好用宏定义 例:#define N 10
int a[N] ={1,2,3~10}; (a[0]到a[9])
数组名 函数名 变量名 统称为标识符
二维数组
int a[3][2]
总共6个元素
没赋值的地方默认为0
字符数组
char c[2] ={‘a’,‘b’}
char c[3] ={“ab”}
两种办法都可以 之所以下面的元素个数是3是因为字符串后面默认有\0,所以要加一
在scanf()中,若是字符串数组%s,后面可以不要用&进行索引
strcpy函数
用于复制
strcpy(字符数组,字符串)
将字符串复制给字符数组,不考虑放不放得下,反正它就硬放
strcmp函数
strcmp(a,b)
若a比b大输出1,等于为0,小于为负一
strlen函数
strlen(字符串)
返回字符串的实际长度,不包含最后面的\0,字符串可以是字符数组或字符串常量
strcat函数
strcat(字符数组1,字符串2)
将字符串2连接到字符数组1的字符串后面,返回字符数组1的起始地址,字符串2可以是字符数组或字符串常量
函数
1函数名 2括号 3参数(非必要) 4{}
函数名是一个地址,所以指针可以指向
return代表函数结束
全局变量和局部变量同名时,优先使用局部变量
整型全局变量初级为零,局部变量不赋值
全局变量存储在全局数据区,局部存放在栈(自动申请,自动释放)
被static修饰的局部变量只会被修饰一次,且直到整个程序结束了它才会被释放,有点类似变成全局变量了,但区别在于其存放在静态数据区
extern waibu()
用于调用一个其它.c文件一个名为waibu()的函数,除了可以调用函数,还可以调用变量
#define “a.c” 双引号是在当前目录下搜索头文件,找不到才去以安装头文件里找
#define<stdio.h> 剪头符号是在已有的头文件进行索引
被static修饰的全局变量或函数只能被本源文件内使用
#ifndef AA_C
#endif
这两句写在一个头文件里,两句中间放extern语句,当有需要的时候,就调用这个头文件即可
指针
指针就是地址 地址就是指针
指针的类型要与指向的类型相同
#define BBB int *
typedef int * AAA
AAA p1,p2
BBB p3,p4
其中p123都是指针类型,但是p4不是,因为define只是简单的赋值,而typedef则是转换类型
int *p[10] 指针数组
int (*p)[10] 数组指针
void (*p) (void) 函数指针
typedef void (*ptr)(void)
ptr p;
该句与函数指针相同
数组作为形参不用指定大小,且该数组的本质是指针,所以用sizeof计算该数组大小时总是4个字节
结构体
struct ()
{}
结构体内所占空间越大的数据类型越放前面,这样最省空间