《C程序设计》重点总结_c程序设计总结
《C程序设计》重点总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c程序设计总结”。
C语言
最后加粗一下重点!
第二章 算法
1.计算计算法分两类:
数值运算算法:求数值解
非数值运算算法:排序、检索、管理
2.算法特性:有穷性、确定性、零或多输入、一或多输出、有效性
3.算法的三种基本结构:
顺序结构
选择结构
循环结构(当型、直到型)
第三章 顺序结构
常量和变量
1.常量:
整型常量
实型常量:小数形式
指数形式:12.34*103=12.34e3
字符常量:普通字符:用' '括起来
转义字符: 开头(a警告 b退格 n t空出一段距离 o xh)
字符串常量:用“ ”括起来
符号常量:#define PI 3.14(大写,行末无分号)
2.变量:先定义,后使用
3.常变量:const int a=3;(取代符号常量)
4.标识符(可作为变量名):
只能由字母、数字、下划线组成且不能数字打头
大小写是不同字符
数据类型
整型类型:基本整int 短整short int 长整long int 双长整long long int 字符char 尔bool
浮点类型:单精度浮点float 双精度浮点double 复数浮点
枚举类型:enum
布
空类型:
void
数组[] 函数
指针* 结构体struct 共用体union
字节数(有效数字)
int:
2、4 short:2 long:4 long long:8 char:1
float:4(6)double:8(15)long double:8(15)、16(19)规范化指数形式:3.14159→0.314159e001
运算符和表达式
1.实数相除得双精度实数 整数相除得整数(商向零取整)2.自增自减运算符(只用于变量):++i、--i先加减再使用
i++/i--先使用再加减 3.算术表达式自左向右结合,先乘除后加减 4.不同类型数据混合运算:
float和double→double
int和float/double→double
char和int→ASCII和int 5.强制类型转换:(double)(x+y)将x+y的值转换成double型
6.C运算符:等于== 不等于!= 与&& 或|| 非!赋值= 下标[]
C语句
1.分类
控制语句:如
continue(结束本次循环)
break(中止执行switch或循环)
switch(多分支选择)函数调用语句:printf(...);表达式语句:句末有分号
空语句:;(作流程转向点)
复合语句:用{ }括起来,语句句末写分号 用数学公式开头加#include 2.赋值语句:
复合赋值运算符: x+=y等价于x=x+y
x*=y等价于x=x*y
x%=y等价于x=x%y
赋值表达式:a=b、a+b这种表达式不能作为左值
a=b=5 自右而左:b=5;a=b;
数据的输入输出
1.C语言本身不提供输入输出语句,以下都是函数:
putchar输出字符
getchar输入字符
printf格式输出
scanf格式输入
puts输出字符串
gets输入字符串 2.输入输出头文件:#include 3.printf(格式控制,输出表列):
格式控制=%格式字符+普通字符
输出表列可以是常量、变量、表达式 4.scanf(格式控制,地址表列):不能忘“&”
注意:逗号对逗号,空格对空格
%c中,空格和转义字符都作为有效字符
输入数值数据时遇非法字符认为数据结束 5.格式字符:
%d有符号的十进制整数
%f小数形式的实数(%7.2f表示共7位,小数2位)(%-7.2f表示向左对齐)双精度%lf
%c一个字符
%s字符串
%e %E指数形式(printf(“%e”,123.456)→ 1.23456e+002)
%o八进制整数(补码)
%x十六进制整数
%u无符号十进制整数
%g %G系统自动选择变成%f或%e
输出“%”用连续两个“%”表示
6.putchar()输出一个字符:putchar(66)输出“B”
putchar('n')换行 7.getchar(c)输入一个字符
第四章 选择结构
1.if:两分支选择
switch:多分支选择 2.将a和b的值互换:t=a;a=b;b=t;3.优先级:!→ 算术运算符 → 关系运算符 → && → || → 赋值运算符
关系运算符优先级:高: >= → 低:==!=
逻辑运算符优先级:!→ && → || 4.关系表达式:“1”代表真,“0”代表假
逻辑表达式:非0代表真,0代表假
a&&b&&c只有a为真才向后算
a||b||c只有a为假才向后算 5.逻辑型变量:头文件#include 如a=score>=60 6.条件表达式:max(a>b)?a:b;7.选择结构嵌套:else总与上面最近的未配对if配对 8.多分支选择结构:(多个case,最多一个default)
switch(表达式)
{
case 常量:语句;break;
„
default:语句;
}
多个case共用一组语句:
case'A':
case'B':
case'C':printf(“>60n”);break;
第五章 循环结构
三种循环
1.while(表达式){语句;} 2.do {语句;} while(表达式)
3.for(初值;循环条件;循环变量增值):
改写成while:
初值;
while(循环条件)
{
语句;
循环变量增值;
}
for里3项都可以省略,第1、3项可含逗号,第2项可以是关系/逻辑/数值/字符表达式
逗号表达式内,整个逗号表达式的值=最右边表达式的值
跳出、结束循环
break:终止整个循环,只用于switch和3种循环语句 continue:结束本次循环
如果是双重循环,内循环里有break,则终止内循环而不是整个循环
第六章 数组
1.一维数组:
int a[10];含a[0]~a[9]十个元素
初始化:a[10]={0,1,2,3,4,5,6,7,8,9};中括号里可以不写,大括号里不写的得0
起泡法排序:n个数n-1趟比较,第j趟比较n-j次 2.二维数组:
float a[3][4];含a[0][0]~a[2][3]十二个元素
初始化:3行4列int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};第一维中括号可以不写,大括号里不写的得0
打擂台算法:先max=a[0][0],剩下的挨个跟a[0][0]比,赢了就赋给max 3.字符数组:
char a[10];含a[0]~a[9]十个元素
初始化:char a[]={'I',' ','a','m',' ','h','a','p','p','y'};
char a[2][3]={{'#','#','#'},{'#','#','#'}};
char a[]=“I am happy” 4.' '作为字符串结束的标志 5.scanf函数输入项如果是字符数组名不加&: scanf(“%s”,a);6.输出字符串:puts(字符数组)
输入字符串:gets(字符数组)
字符串连接:strcat(字符数组1, 字符数组2)
字符串复制:strcpy(字符数组1, 字符串2)将2复制到1中
strncpy(str1,str2,2)将2的前2个字符复制到1中
7.字符串比较:strcmp(字符串1,字符串2)
if(strcmp(s1,s2)>0)printf(“yes”);8.测字符串长度:strlen(字符数组)9.转换为小写:strlwr(字符串)
转换为大写:strupr(字符串)
第七章 函数
1.定义有参函数:三处类型名和return z不能少 2.形参:定义函数时括号中的变量
实参:主调函数调用时括号中的参数(常量、变量或表达式)3.数据传递(单向传递,值传递):实参的值给形参,函数中return z把z的值作为函数值返回主函数赋给相应变量 4.函数调用
函数类型名和里面return表达式的类型名一致(函数类型决定返回值类型)
不需要返回值的函数里边不写return,类型名为void(空类型)
调用结束时形参单元被释放,实参单元仍保留原值。形参和实参是两个不同存储单元
主函数的声明和函数的定义第一行(函数原型)一样,再加分号
声明中的形参名可以不写:float add(float,float)
函数原型专业写法:
void print(int num, char sex, float score);
声明也可以在int main()之前 5.嵌套调用
递推法:主函数声明a函数,a函数定义中声明b函数,定义b函数
改进:b函数只用一个return语句 6.递归调用(调用函数本身):
分为“回溯”和“递推”两个过程,必须具有一个结束递归的条件。7.数组名作参数
数组元素作实参,向形参传递元素的值
数组名作实参,想形参传递元素的地址
二维数组名作参数,函数定义里用两个for控制 8.局部变量和全局变量
局部变量:在函数内定义,比如形参
全局变量(外部变量):在函数外定义,范围直到本源文件结束
不同函数中可以使用同名变量
习惯:全局变量首字母大写
若同一源文件中全局变量和局部变量重名,则在局部变量作用范围内全局变量被屏蔽 9.变量的存储方式和生存期
第八章 指针
概念
1.“指针”就是地址。指针变量是存放地址的变量 2.直接访问:按变量名访问
间接访问:将变量a的地址存放在变量b中,通过b访问a 3.*a表示a指向的对象,a叫指针变量,a的值是地址(指针)4.定义指针变量必须指定基类型:int *a, *b;(int叫基类型)5.初始化时:int *p1=&a, *p2=&b;
赋地址时:
p1=&a;p2=&b;6.一个变量的指针的含义包含两个方面:
地址:以存储单元编号表示
数据类型:指向存储单元
7.不能写 *point_1=100;等号右边应该写变量,不能写数 8.引用指针变量:p=&a;
定义时:swap(*p1,*p2)调用时:swap(p1,p2)9.“交换值”:int temp;temp=*p1;*p1=*p2;*p2=temp;10.p=&a[0];p=a;表示a数组首元素的地址赋给p
数组指针
1.指针指向数组元素时可以:加减整数、自加自减
同一数组中的两元素p1、p2可以p1-p2 2.自加自减
*p++=*(p++):先引用p的值,再使p自增1
*(++p):先p+1,再取*p
++(*p):p所指向的元素值加1 3.一维:
fun(int arr[], int n)与fun(int *arr, int n)等价
a[i]与*(a+i)等价 4.多维:
*(*(a+i)+j)= *(a[i]+j),都是a[i][j]的值
a(&a[0])、a+1(&a[1])表示第0行、第1行
*a、*(a+1)表示a[0][0](a[0])、a[1][0](a[1])
a+i、a[i]、*(a+i)、&a[i]、&a[i][0]都代表同一地址
字符串指针
1.char *a=“blablabla”;printf(“%s”,a);没问题 2.字符数组名和字符指针变量可以做形参和实参 3.不能对数组名赋值
4.字符指针变量只分配一个存储单元