C语言讲义.docx
- 文档编号:3547630
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:27
- 大小:25.94KB
C语言讲义.docx
《C语言讲义.docx》由会员分享,可在线阅读,更多相关《C语言讲义.docx(27页珍藏版)》请在冰豆网上搜索。
C语言讲义
第一章新手上路
第一课HelloWorld
简单的小程序
输出Hello World:
//头文件
#include
//主函数
main()
{
printf("hello world\n");//函数体
}
注意:
1.C语言属于编译型语言
2.一个程序必须有主函数,而且只能有一个
3.C语言源文件的扩展名是.c
4.C语言中语句结束的标志是分号
第二课格式化输出函数
格式化输出函数:
printf()
1.不属于C语言基本语法
2.C语言并非必须包含头文件
3.printf()函数是在头文件
4.用什么库函数,包含什么头文件
程序执行
1.编译:
.c->.obj(二进制文件)
2.组建:
.obj->.exe(可执行文件)
3.运行:
在程序结束后不会关闭窗口
调用dos系统命令:
system()
使用system()函数要引入头文件
转义符
1.\n:
换行
2.\\:
反斜杠\
3.\':
单引号'
4.\":
双引号"
5.\t:
缩进
第三课变量
定义变量
1.定义变量:
a.定义一个整数型变量
int 变量名
b.定义多个整数型变量
int 变量名1,变量名2,...
输出变量
printf("%d",变量名);其中%d是格式控制符
printf输出的是双引号中的内容
输入变量
a.scanf("%d",&变量名);变量名前要加&
b.scanf("%d%d",&变量名1,&变量名2);
其中,%d%d之间没有空格,输入顺序与变量顺序一致
间隔符:
回车、空格、制表符
第四课变量的赋值
变量的赋值
1.%%相当于百分号字符%
2.顺序结构:
从上往下依次执行
3.变量:
变量值可在程序中变化
4.变量初始化:
将定义域赋值合并在一起,比如:
int a=5;
5.赋值:
将等号右边的值赋值给左边,比如:
a=a+1;
运算符
1.算术运算符:
+、-、*、/、%
2.赋值运算符:
=
3.复合运算符:
+=、-=、*=、/=、%=
4.自增自减运算符:
++、--
第五课变量的交换
借助第三方变量交换的实例
#include
main()
{
int a,b,temp;
printf("请输入两个整数:
");
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
temp=a;
a=b;
b=temp;
printf("a=%d,b=%d\n",a,b);
}
不借助第三方变量交换的实例
#include
main()
{
int a,b;
printf("请输入两个整数:
");
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
a=a+b;
b=a-b;
a=a-b;
printf("a=%d,b=%d\n",a,b);
}
第六课变量修饰符
变量修饰符知识点
1.sizeof():
计算变量在内存中所占大小
2.字符变量只占1字节
3.bit:
最小存储单位,只能存储0或1
4.int:
整型,占4字节,取值范围:
-2^31~2^31-1,格式控制符:
%d
5.short:
短整型,占2个字节,格式控制符:
%hd
6.long:
长整型,占4个字节,格式控制符:
%ld
7.signed:
有符号
8.unsigned:
无符号,格式控制符:
%u
第七课浮点类型
普通浮点类型
a.定义:
float a;
b.赋值:
float a=3.5f;
双精度浮点类型
a.定义:
double a;
b.赋值:
double a=3.5;
变量、常量都占内存空间
浮点型的常量:
double a=.3相当于double a=0.3
格式控制符
a.float控制符:
%e:
科学计数法形式,最常考,实数E整数(整数、0、负数)
%f:
保留6位小数,不足部分以0补位
%g:
原样输出,最常用
b.double控制符:
%le、%lf、%lg
注意:
1.浮点数和整数运算,结果为浮点数
2.整数和整数运算,结果为整数
3.实数不可以参与余数运算
第八课格式化输入输出
C语言中三种进制
1.八进制
a.逢8进一
b.表示八进制:
0、1、2、3、4、5、6、7
c.格式控制符:
%o
d.赋值:
以0作为开头,例如:
int a=010;
2.十进制
a.逢10进一
b.表示十进制:
0、1、2、3、4、5、6、7、8、9
c.格式控制符:
%d
3.十六进制
a.逢16进一
b.表示十六进制:
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
c.格式控制符:
%x
d.赋值:
以0x作为开头,例如:
int a=0x10
格式控制符
1.%md:
空格补位,一共占m位,若m<变量长度,不加空格,正常输出
2.%m.nf:
一共占m位,小数点占n位
第二章选择结构
第一课if语句
if语句的一般格式:
if(逻辑条件)
{
满足条件时,执行的语句
}
else
{
不满足条件时,执行的语句
}
省略形式:
if(逻辑条件){执行语句}
第二课关系运算符
6中关系运算符
1.>:
大于
2.<:
小于
3.==:
等于
4.>=:
大于等于
5.<=:
小于等于
6.!
=:
不等于
关系表达式:
计算结果为真或假
C语言中,0表示假,非0表示真
判断奇偶
偶数:
能被2整除
奇数:
不能被2整数
第三课语句的概念
表达式语句
表达式;
函数调用语句
函数名(参数);
复合语句
{
语句1;
语句2;
语句3;
......
}
控制语句
.if语句
通用写法:
if(逻辑条件)
语句1
else
语句2
其中,语句可以为表达式语句、函数调用语句、复合语句、控制语句和空语句
.switch语句
.for语句
.while语句
.do语句
.break语句
.continue语句
.return语句
.goto语句
5.空语句
不执行任何内容
;
第四课逻辑运算符
逻辑非(!
)
!
真 假
!
假 真
逻辑与(&&)
真 && 真 真
真 && 假 假
假 && 真 假
假 && 假 假
逻辑或(||)
真 || 真 真
真 || 假 真
假 || 真 真
假 || 假 假
第五课嵌套的if语句
嵌套的if语句格式
if(逻辑表达式1)
语句1
else if(逻辑表达式2)
语句2
else if(逻辑表达式3)
语句3
......
else
语句n
else匹配:
遵循就近原则else与离自己最近的未匹配if匹配
第六课switch语句
switch语句一般格式
switch(表达式)
{
case 情况1:
语句1
break;
case 情况2:
语句2
break;
......
case 情况n:
语句n
break;
default:
默认语句
break;
}
其中,break是跳出switch语句,default不一定放在最后
注意:
switch不能检查实数,case后面也不能判断实数
第七课条件运算符
格式
表达式1?
表达式2:
表达式3
用法1
if(表达式1)
{
表达式2;
}
else
{
表达式3;
}
用法2
if(表达式1)
{
表达式=表达式2;
}
else
{
表达式=表达式3;
}
嵌套格式
表达式1?
表达式2:
(表达式3?
表达式4:
表达式5)
单目运算符:
只对一个表达式进行运算
双目运算符:
对两个表达式进行运算
三目运算符:
对三个表达式进行运算
第八课注释
按用途可分为
1.序言性注释
2.功能性注释
格式
/*注释内容*/
第九课a++和++a
自增
a++:
后缀表达式
++a:
前缀表达式
执行过程中:
a++=a,++a=a+1
第十课逻辑短路
逻辑短路
1.逻辑或:
只要前面逻辑表达式为真了,整个式子结果就为真,后面的就不需要执行了
2.逻辑与:
只要前面逻辑表达式为假了,整个式子结果就为假,后面的就不需要执行了
第三章循环结构
第一课for循环
for循环一般格式
for(初始化表达式;判定条件;自增表达式)
{
循环体
}
第三课质数
质数(素数)
质数(素数):
只能分解成1和自己
判断质数的方法:
排除法
求平方根:
sqrt()
第四课while循环和do循环
while循环格式
while(判断条件)
{
循环体
}
do循环格式
do
{
循环体
}while(判定条件);
第五课break和continue
Break
break:
结束整个循环
Continue
continue:
结束本次循环,进入下次循环
控制语句
1.选择结构
a.if()else{}
b.switch(){}
2.循环结构
a.for(){}
b.while(){}
c.do{}while{}
3.流程控制
a.break;
b.continue;
c.goto;
第六课随机数
随机数知识点
1.生成随机数:
rand()
2.伪随机数:
数字虽然随机,但每次生成结果都相同
3.与时间有关的头文件:
time.h
4.控制随机数范围:
rand()%100:
任何整数%100,范围都是0-99
100+rand()%100:
范围是100-199
第七课水仙花数
判断规则
1.是一个三位数(100-999)
2.设百位a,十位b,个位c,则a^3+b^3+c^=abc
第四章函数
第一课函数
函数的一般格式
函数类型 函数名(参数)
{
函数体
return 函数返回值;
}
其中:
1.参数可以省略
2.return;返回函数调用位置
除void类型外,所有函数都应有返回值
返回值类型:
应与函数类型一致
函数类型
int
float
double
......
void(空类型)
函数的调用格式:
函数名();
函数声明:
类型 函数名(参数);
全局变量:
作用范围为整个源文件
局部变量:
作用范围为函数f内部
第二课标识符
标识符包括
关键字和自定义标识符
自定义标识符三大规则
1.由字母、数字、下划线组成
2.只能以字母、下划线开头
3.不能与关键字重复
第三课形参和实参
本课知识点
形参:
函数定义时的参数
实参:
函数调用时的参数
第十四课递归函数
递归函数
自己调用自己
经典递归
1.阶乘
终止条件:
n=1
递推公式:
f(n)=n*f(n-1)
2.斐波那契数列
终止条件:
n=1或n=2
递推公式:
f(n)=f(n-1)+f(n-2)
第十七课主函数的几种形式
主函数的几种形式
1.int main(void)
{
函数体
return 0;
}
2.int main(int argc,char *argv[])
{
函数体
return 0;
}
3.main()
{
函数体
}
return 0:
成功
return 1:
错误1
return 2:
错误2
......
exit():
成功
exit(0):
成功,直接结束程序
exit
(1):
错误1
exit
(2):
错误2
......
第十八课宏
宏有两种
1.不带参数的宏
#define 宏的名称
2.带参数的宏
注意:
宏定义的后面是没有分号的
C语言中3种常量
1.普通常量
2.符号常量:
不带参数的宏
3.const常量:
使用方法类似变量
第五章数组
第一课数组的定义
本课知识点
1.数组定义
int 数组名[数组大小];
int a[n],则最大的角标为n-1
2.可以根据初始化确定数组大小
3.初始化数量不能大于数组大小
4.使用宏来定义数组大小
#define N 10
int a[N];
5.不可以使用变量定义数组
第二课数组和函数
本课知识点
1.数组可以作为函数的参数
2.函数中的数组参数可以省略大小
void f(int x[],int n)
{
函数体
}
第十一课质数
质数的两种算法
不用数组的质数算法:
1.若n不是质数,则必然存在一个不大于√n的因数
2.只要找到一个因数,则n就必然不是质数,退出循环
用数组求质数的算法:
筛法
第十二课冒泡排序
排序原理
1.最大的元素放在右边
2.每次比上次至少循环一次
3.最坏次数:
(n-1)*n/2
第十四课二分查找
查找算法
1.顺序查找
从前往后,按顺序依次查找
2.二分查找(折半查找)
前提:
数组必须按序排好
中位数:
Mid=(Left+Right)\2,对于奇数、偶数都适应
其中Left表示数组下界,Right表示数组上界
第二十课杨辉三角
本课知识点
1.规则1:
最左列和斜边,均为1
2.规则2:
当前数字=上方数字+左上数字
生成杨辉三角的步骤:
1.二维数组全部初始化为0
2.第一列全部初始化为1
3.从a(2,2)开始进行计算
4.从a(1,1)开始输出
第六章字符串
第一课字符类型
本课知识点
1.字符类型只接受单个字符的赋值
2.字符类型定义
char c;
c='w';
3.字符类型格式控制符:
%c
4.输入字符:
getchar()
输出字符:
putchar()
5.字符运算:
就是对它的ASCII码进行运算
第二课字符数组
常见转义符
1.'\n':
换行符
2.'\t':
缩进
3.'\'':
单引号
4.'\\':
反斜杠
5.'\"':
双引号
6.'\0':
字符串结尾
数字转义
1.\八进制ASCII码
2.\x十六进制ASCII码
第三课字符串
本课知识点
1.以'\0'结尾的一串字符
2.其本质仍然是字符数组
3.字符串格式控制符:
%s
4.输入字符串:
gets()
5.输出字符串:
puts(),结尾换行
6.库函数:
String.h
第十五课字符串函数
本课知识点
1.strlen():
计算字符串长度,第一个'\0'前有几个字符
sizeof():
计算数组占几字节
2.strcpy(目标数组,原字符串):
复制字符串
3.strcmp():
比较字符串大小
0:
两个字符串完全相等
1:
字符串1>字符串2
-1:
字符串1<字符串2
4.strcat():
连接字符串
第七章指针
第一课指针变量
本课知识点
1.定义:
使用*说明符进行定义
int *p; int* p;
float *p; float* p
2.赋值:
指针变量,用于存储变量地址
只有指针变量指向一个变量时才可以为指针变量赋值
第二课指针和函数
指针和函数
1.按值传递:
实参的值不受形参影响
2.按地址传递:
实参的值可以受到形参影响
3.scanf():
变量以地址传递
4.函数地址:
每一个函数也都有内存地址
5.函数指针:
int *p();声明一个函数,返回值类型为int*
int (*p)();定义一个指针,用于指向一个函数
第五课指针和数组
本课知识点
1.p=a和p=&a[0]等价
2.int f(int x[])
所有数组形式的形参 int x[]
实质上都是指针类型 int *x
3.x[i]和*(x+i)等价
&x[i]和x+i等价
4.int a[10];a++;
错误,数组不能改变其他地址
第九课指针和字符串
本课知识点
1.字符串的本质是一个字符数组
2.字符指针:
可以指向字符串的指针
3.字符数组和字符指针对比:
字符数组不能修改其内存地址,可以修改其元素的值
字符指针不能修改其元素的值,可以修改其内存地址
第十六课指针和二维数组
本课知识点
1.二维数组,每一个元素相当于一个变量
int a[2][3];
a[0]->&a[0][0]
a[1]->&a[1][0]
2.二维数组指针的定义
int (*p)():
指向函数的指针
int (*p)[3]:
指向列数为3的二维数组的指针
3.两种形式
数组形式:
int a[6],*p=a;
p[0]->*p
p[1]->*(p+1)
p[2]->*(p+2)
......
p[i]->*(p+i)
p[i][j]->(*(p+i))[j]
指针形式:
p[i][j]->*(*(p+i)+j)
p[0][0]->*(*(p+0)+0)->**p
p[0][1]->*(*(p+0)+1)->*(*p+1)
p[1][0]->*(*(p+1)+0)->**(p+1)
p[1][1]->*(*(p+1)+1)
4.对应赋值:
层次不同的指针不能相互赋值
第八章线性列表和其他
第一课结构体和共用体
结构体
1.定义
struct 结构体类型名
{
成员属性
};//以分号结束
2.定义变量
struct 结构体类型名 变量名
struct 结构体类型名
{
成员属性
}变量名;
3.赋值
变量名.属性名
4.初始化(定义时)
struct 结构体类型名 变量名={依次初始化各成员}
5.定义类型别名
typedef 原类型名 新类型名
共用体
union 共用体类型名
{
成员属性
}变量名;
第二课结构体和指针
结构体指针基本用法
main()
{
Rect x={3,5},*p;
p=&x;
printf("%d\n",p->width);//p所指向的结构体的属性
}
优先级:
++p->x等价于++(p->x)
第五课malloc函数
本课知识点
1.malloc函数所在的头文件:
2.malloc函数使用格式:
malloc(空间大小)
3.malloc函数返回值类型:
void *
4.malloc申请的空间并不会自动消失
5.释放空间:
free(p);
第六课线性链表
定义
#include
#include
struct Node
{
int data;
struct Node *next;
};
main()
{
struct Node *header=NULL;
}
创建
struct Node *create(int n)
{
struct Node *p;
p=(struct Node*)malloc(sizeof(struct Node));
p->data=n;
p->next=null;
return p;
}
输出
void output(struct Node *p)
{
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
}
修改
void modify(struct Node *p,int n,int k)
{
int i;
for(i=0;i { p->next; } p->data=k; } 插入 void insert(struct Node *p,int n,int k) { struct Node *pNew; int i; for(i=0;i { p=p->next; } pNew=(struct Node*)malloc(sizeof(struct Node)); pNew->data=k; pNew->next=p->next; p->next=pNew; } 删除 void del(struct Node *p,int n) { struct Node *pDel; int i; for(i=0;i { p=p->next; } pDel=p->next; p->next=pDel->next; free(pDel); } 第十课文件的打开和关闭 定义文件指针 FILE *fp 打开文件 fp=fopen("文件名","打开方式") 12种打开方式 文本文件: r: 只读 w: 新建写入 a: 追加 r+: 读写 w+: 新建读写 a+: 读写 二进制文件: rb: 只读 wb: 新建写入 ab: 追加 rb+: 读写 wb+: 新建读写 ab+: 读写 关闭文件 fclose() 第十一课文件的输入和输出 字符的写入和读取 fputc(字符,文件指针): 像文件中写入单个字符 putchar(): 在控制台打印一个字符 fgetc(文件指针): 从文件中读取单个字符 getchar(): 从控制台读条一个字符 feof(文件指针): 对文件进行遍历 rewind(文件指针): 将文件指针重新指回文件头部 字符串的写入和读取 fputs(字符串,文件指针): 像文件中输入字符串 puts(数组名): 向控制台输出字符串 fgets(数组名,数组大小,文件指针): 从文件中读取字符串 gets(数组名): 从控制台读取字符串 普通变量的写入和读取 fprintf(文件指针,"%d",5): 向文件中写入 printf("%d",5): 向控制台输出 fscanf(文件指针,"%d",&a): 从文件中读取 scanf("%d",&a): 从控制台输入 数组的写入和读取 数组的写入: fwrite(数组名,单个元素大小,数组大小,fp) 数组的输出: fread(数组名,单个元素大小,数组大小,fp) 第十二课进制的转换 二/八/十六进制->十进制 数码乘以相应权之和 十进制->二/八/十六进制 连续除以基,直至商为0,从低到高记录余数 二进制<-->八/十六进制 二进制转换成八进制: 从右像左,每3位一组(不足3位补0),转换成八进制 八进制转换成二进制: 用3位二进制数代替每一位八进制数 二进制转换成十六进制: 从右像左,每4位一组(不足4位补0),转换成十六进制 十六进制转换成二进制: 用4位二进制数代替每一位十六进制数 其中: 数码: 表示数的符号 基: 数码的个数 权: 每一位所具有的值 第十三课位运算 按位与(&) 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 按位或(|) 两个相应的二进制位中只要有一个为1,该位的结果值为1 按位取反(~) 用来对一个二进制数按位取反,即将0变1,将1变0 按位异或(^) 若参加运算的两个二进制位值相同则为0,否则为1 左移(<<) 用来将一个数的各二进制位全部左移N位,右补0 右移(>>) 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 讲义