1、C程序设计期末复习知识点C程序设计期末复习:知识点总结1. 算法及流程图表示(1)程序流程图 : 可以表示结构化算法和非结构化算法,用箭头表示执行顺序(2)N-S图 : 只能表示结构化算法,用上下关系表示执行顺序(3)基本算法 交换两个变量的值 最大公约数的欧几里德算法 判断是否是素数 从多个数中找最大最小值 冒泡排序法(数组) 直接选择排序法(数组) 折半查找(数组)2. 程序代码之预处理部分(1)预处理的作用 : 编译之前根据预处理命令对源代码进行修改(2)文件包含 : 为代码中的函数提供声明 #include scanf( ) : 格式化输入 printf( ) : 格式化输出 gets
2、( ) : 输入一行字符串 puts( ) : 输出一行字符串 #inlcude sin( ) : 求正弦值 cos( ) : 求余弦值 #include malloc( ) : 分配指定字节的内存空间,返回该空间的起始地址 free( ) : 释放所分配的内存空间 #include strlen( ) : 求字符串的长度(实现机制) strcpy( ) : 字符串拷贝(实现机制) strcat( ) : 字符串连接(实现机制)(3)宏定义 : 掌握如何定义符号常量 #define PI 3.143. 程序代码之注释部分(1)注释的作用 : 只供人阅读,编译器跳过这些字符不予处理(2) /*
3、*/ : 块注释,可跨多行(3) / : 行注释,从/开始至本行结束的字符为注释内容4. 程序代码之常量的表示(1)整数表示 : 8进制整数的表示 : 以0开头表示8进制整数 16进制整数的表示 : 以0x开头表示16进制整数 8进制数的常见错误 : 01238, 048 (只能用07共8个数码)(2)浮点数表示 : 小数表示形式 : 必须有小数点,如3.14 指数表示形式 : E,如10E10(3)字符 : 以限定的一个字符 a : 小写字母a,其值为97 A : 大写字母A,其值为65 0 : 数字0,其值为48 n : 转义字符换行,其值为10 0 : 字符串结束符,其值为0(4)字符串
4、 : 以限定的一个字符序列,含有字符串结束符05. 程序代码之标识符(1)标识符的功能 : 用来为变量、数组、函数命名(2)标识符的命名规则 : 以_或字母开头,由_、字母和数字组成,不能用关键字(3)C语言大小写字母敏感 : IF、if、If、iF不相同6. 程序代码之变量及其数据类型(1)字符型变量的关键字 signed(有符号) unsiged(无符号) char(1字节)(2)整型变量的关键字 signed(有符号) unsiged(无符号) short(2字节) int(4字节) long(4字节) char ch=0xFF; short s=0xFFFF; int i=0xFFFF
5、FFFF; long l=0xFFFFFFFF;(3)实型变量的关键字 float(4字节) double(8字节)(4)字符变量的输入和输出 char ch; scanf(%c,&ch); printf(%c,ch);/以字符形式输出 printf(%d,ch);/以整数形式输出 (5)整型变量的输入和输出 int i; scanf(%d,&i); printf(%d,i); (6)实型变量的输入和输出 float a; double b; scanf(%f%lf,&a,&b); printf(%f%f,a,b);7. 程序代码之运算符和表达式(1)运算符及优先级 (15) () 、 (14
6、) (位运算) 、! 、+ 、- 、 & 、 * 、 sizeof (右) (13) * 、/ 、% (12) + 、- (11) (位运算) (10) = b?a:b : 条件运算,条件表达式成立,其值为a,否则为b a与!a :按位非运算和逻辑非运算8. 程序代码之语句(1)语句规则 : 将多条语句书写于一行及将一条语句书写于多行无需特殊处理(2)if语句: if (expression1) statement1 ; else if (expression2) statement2 ; else if (expression3) statement3 ; else if (expressi
7、onm) statementm ; else statementn ; (3)switch语句:switch(expr)case const_expr1: statements1;breakcase const_expr2: statements2;breakcase const_exprn: statementsn;breakdefault : statmentsn+1 ; (4)else 悬挂 : else将和距离最近的、尚未匹配的if语句匹配if (y != 0) if (x != 0) result = x / y;else printf(Error: y is equal to 0n
8、);(5)switch瀑布 : switch(n) case 1: printf(Monday); case 2: printf(Tuesday); case 3: printf(Wednesday); case 4: printf(Thursday);break; case 5: printf(Friday); case 6: printf(Saturday); case 7: printf(Sunday); default:printf(Invalid number!);上述代码中,若n的值为1,将输出:Monday Tuesday Wednesday Thursday(6)while语句
9、 : 当型循环,循环体的执行次数可能为0 while(control_expr) loop_statements; (7)do语句 : 直到型循环,循环体的执行次数至少为1 do loop_statements; while(control_expr);(8)for语句 : 当型循环,循环体的执行次数可能为0 for(expr1;expr2;expr3 ) loop_statements; (9)break语句 : break将跳出包含该语句的整个循环结构(10)continue语句 : continue将结束本轮循环,进入下一轮循环9. 程序代码之函数(1)函数的定义 : 返回值类型函数名(
10、形式参数列表) 函数体 (2)return语句 : 当函数的返回值类型为void时,可以省略return语句(3)函数的调用及参数传递 : 函数按被调用的先后顺序执行,参数只能按值传递#include void f2();void f3();void f1() printf(1); f2(); printf(2);void f2() printf(3); f3(); printf(4);void f3() printf(5);void main() f1(); f2(); printf(n);输出结果:13542354(4)变量的作用域和存储周期 : 文件和块作用域,静态和自动存储周期#inc
11、lude int X=10,Y=100;void f1() X=X*2; /f1中的X是外部变量,调用后外部变量X的值为20void f2() int Y=10;Y=Y*3; /f2的Y是内部变量,其值改变不会影响外部变量Y void main()f1();f2();printf(%d,%dn,X,Y);输出结果:20,100(5)外部变量和内部变量 : 函数外定义(全局变量)和函数内定义(局部变量)(6)静态变量 : static用于外部变量时指链接方式,用于内部变量时指存储周期10. 程序代码之数组和指针(1)数组的声明和初始化 :int a33=0,1,2,3,4;(2)数组元素的引用
12、:int a10=0,1,2,3,4,5,6,7,8,9 有元素a10吗?(3)数组中的基本算法 : 冒泡排序法(数组) 直接选择排序法(数组) 折半查找(数组)(4)指针的声明和初始化 :int a=123,*p=&a;(5)指针的基本运算 : & : 取对象的地址 * :取得所指对象的值 指针变量+整数:指向其后的第几个(整数值决定)对象 指针变量-整数:指向其前的第几个(整数值决定)对象(6)用指针变量作形参 :#include void foo(int x,int * y) x=20; *y=200;void main() int a=10,b=100; foo(a,&b); prin
13、tf(%d,%dn,a,b); 输出结果:10,200为什么?只有使用指针类型的形参,函数调用后才能改变对应的实参值,这是C语言中指针之所以存在的最大的意义。(8)数组名和指针的关系 : 数组名是指向数组首元素的指针常量,不能对数组名赋值。(9)字符数组和字符串 :char str1=1,2,3,str2=”123”;字符数组str1含有3个元素,str含有4个元素(包括结束符)char s20=”forFUN”; printf(“%c,%c,%c,%s,%s”, *s , *(s+2) , *s+2 , s , s+2) ;输出:f,r,h,forFUN, rFUN(10)指针的应用 : 用
14、指针实现字符串的拷贝、连接、求长度、大小写转换等字符串复制函数strcpy的实现代码:char* strcpy(char *s1, char *s2) char *ret = s1; /记住字符串s1的地址while(*s1+ = *s2+) != 0); /逐个复制字符(包括结束符)return ret; /返回字符串s1的地址字符串连接函数strcat的实现代码:char* strcat(char *s1, char *s2) char *ret = s1; /记住字符串s1的地址while(*s1 != 0) s1+; /指向字符串s1的结束符while(*s1+ = *s2+) !=
15、0); /逐个复制字符(包括结束符)return ret; /返回字符串s1的地址字符串长度函数strlen的实现代码:int strlen( char *s)int length = 0; /初始化字符串长度while(*s+ != 0) length+; /统计字符个数(不含结束符)return length; /返回字符串长度字符串大写转小写函数strlwr的实现代码:char* strlwr(char *s)char *ret = s; /记住字符串s的地址while (*s != 0) /若当前字符不是结束符if(*s=A & *s=Z) *s=*s+32; 大写字符转小写s+; /
16、指向下一个字符return ret; /返回字符串s的地址附录:算法及其实现 交换两个变量的值 int a,b,t;t = a;a = b;b = t; 最大公约数的欧几里德算法int gcd(int m,int n) int r; do r = m % n; m = n; n = r; while (r!=0); return m; 判断是否是素数int prime(int n) int i; for (i=2;i=n-1;i+) if (n%i = 0) return 0; return 1; 从多个数中找最大最小值#include void main() int a10=2,23,4,1
17、7,56,27,38,19,15,1;int max,min,i;max=a0; min=a0; for(i=1;imax) max=ai; if(aimin) min=ai; printf(Max= %dn,max); printf(Min= %dn,min); 冒泡排序法(数组)#include #define SIZE 10void main() int t,pass,i; int a=3,7,9,2,0,4,8,1,5,6; printf(Original order:n); for (i=0; i=SIZE-1; i+) printf(%3d,ai); for (pass=1; pa
18、ss=SIZE-1; pass+) for (i=1; iai) t=ai-1; ai-1=ai; ai=t; printf(nAscending order:n); for (i=0; i=SIZE-1; i+) printf(%3d,ai); printf(n); 直接选择排序法(数组)#include #define SIZE 10void main() int t,pass,i; int a=3,7,9,2,0,4,8,1,5,6; printf(Original order:n); for (i=0; i=SIZE-1; i+) printf(%3d,ai); for (pass=1
19、; pass=SIZE-1; pass+) for (i=pass; iai) t=apass-1; apass-1=ai; ai=t; printf(nAscending order:n); for (i=0; i=SIZE-1; i+) printf(%3d,ai); printf(n); 折半查找(数组)#include void main() int a10=12,23,34,45,56,67,78,89,90,91; int key,m,l,h; scanf(%d,&key); l=0; h=9; while(l=h) m=(l+h)/2; if(keyam)l=m+1; if(key=am)break; if(key=am)printf(at %dn,m); else printf(Not found!n);