计算机二级C语言复习资料.docx
- 文档编号:12124103
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:36
- 大小:462.67KB
计算机二级C语言复习资料.docx
《计算机二级C语言复习资料.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言复习资料.docx(36页珍藏版)》请在冰豆网上搜索。
计算机二级C语言复习资料
C语言最重要的知识点复习资料!
总体上必须清楚的:
1)程序结构是三种:
顺序结构,循环结构(三个循环结构),选择结构(if和switch)
2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。
3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是它的地址.
4)bit是位,是指为0或者1。
byte是指字节,一个字节=八个位.
5)一定要记住二进制如何划成十进制。
概念常考到的:
1、编译预处理不是C语言的一部分,不占运行时间,占编译时间。
C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
2、每个C语言程序中main函数是有且只有一个。
3、在函数中不可以再定义函数。
4、算法的是一定要有输出的,他可以没有输入。
5、break可用于循环结构和switch语句,continue只用于循环。
6、逗号运算符的级别最低。
第一、二章C语言基础及简单程序设计
1.c语言由什么构成;(函数:
一个C语言程序由一个至多个函数组成,)
2.main()是主函数,该函数既是入口又是出口(一个入口,一个出口)
3.数据类型:
基本数据类型(整型,字符,实型,枚举型),占用内存的字节数,表示范围
4.常量:
123,0101(没有8和9),0x41,'1',-2.30,-1.2E+5
5.在一个字节内,字符通整型,整型通字符
6.合法的用户标识符考查:
合法的要求是由字母,数字,下划线组成,并且第一个必须为字母或则是下划线。
关键字不可以作为用户标识符号。
main define scanf printf都不是关键字。
迷惑你的地方If是可以做为用户标识符。
因为If中的第一个字母大写了,所以不是关键字。
7.实型数据的合法形式:
考试口诀:
e前e后必有数,e后必为整数。
.
2.333e-1就是合法的,且数据是2.333×10-1。
8.字符和字符串数据的合法形式:
:
'1'是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。
'0'的ASCII数值表示为48,'a'的ASCII数值是97,'A'的ASCII数值是65。
9.转义字符的考查(p28):
转义符\:
'\n','\0','\ddd','\xdd'等
10.强制类型转换:
一定是(int)a不是 int(a),注意类型上一定有括号的。
注意(int)(a+b)和(int)a+b的区别。
前是把a+b转型,后是把a转型再加b。
11.自加、自减表达式:
假设a=5,++a(是为6),a++(为5);
运行的机理:
++a是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,再放到变量a中。
进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。
考试口诀:
++在前先加后用,++在后先用后加。
12.逗号表达式:
优先级别最低;表达式的数值逗号最右边的那个表达式的数值。
如(2,3,4)的表达式的数值就是4。
13.位运算的考查:
口诀:
先转二进制再运算
总的处理方法:
(先把十进制变成二进制再变成十进制)。
例1:
chara=6,b;
b=a<<2; 这种题目的计算是先要把a的十进制6化成二进制,再做位运算。
例2:
在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。
14.%符号两边要求是整数。
不是整数就错了。
15.变量:
变量的命名规则满足标识符的命名规则,区分大小写,关键字(p7)除外,变量的定义一般都要放在函数或程序的开头位置(即先定义后使用)
16.分号:
表示一个语句结束
17.变量的定义:
类型名变量名列表;(不同的类型要写成两句),定义的时候给值成为变量的初始化,初始化的时候不能连等(如inta=b=c=1;是错的!
inta,b,c;a=b=c=1;是对的)。
18.变量的赋值:
变量名=表达式或变量名复合赋值运算符表达式(复合赋值运算符:
+=,*=,^=,...),如:
xyz+2=c行吗?
不行(赋值表达式左边只能是变量)!
赋值的时候可以连等。
19.输入一个字符:
x=getchar(),putchar(x),有这两个函数及FILE时一定要加上
#include
20.getch(),表示暂停程序运行,可直接查看结果,否则运行完后不显示结果(需按ALT+F5)。
21.printf("xxxxxxxxxxxxxxx");或printf("格式控制符",变量列表);变量列表不加&
22.scanf("格式控制符",地址列表),地址列表可为数组名、指针变量名及普通变量名(普通变量名前要加加&)。
23.printf("%m.nf",32.6789)
24.scanf的格式控制符中,除了逗号,一般不加其他字符;一定要记住,有逗号时输入要加逗号,否则:
数据用空格隔开,字符连着输入;没有"%m.nf"的写法,只有"%mf"的写法,float型用"%f",double型用"%lf",longdouble用"%Lf"
25.不同类型的数值型数据进行混合运算
不同类型的数值型数据进行混合运算时,先要把低数据类型向高数据类型转换,成为同一类型后才进行运算。
横向箭头表示必须进行的转换。
逗号运算符是最低的运算符
常量不能++、--;
例:
b=(a=1,a++,a++),
又例:
b=(a=2)+(a=3),
又例:
a=1;b=(++a)+(++a)
=与==的区别(赋值和等号)
26.在C语言中,对于逻辑运算,非零的数(不管实数还是整数)都认为是真的,真的就是1,假的就是0;
27.关系运算的结果是逻辑值(真为1假为0)。
28.运算符:
运算符的优先序(p246):
成单算移关于,异或逻条赋逗。
运算符的结合性(p246):
条件、单目、赋值运算符。
(printf输出也是自右而左运算)
『所有运算符』
例如.以下程序的运行结果是
structst
{intn;floatx;
}*p;
voidmain()
{structstarr[3]={{10,5.6},{12,7.1},{14,6.7}};
p=arr;
printf(“%d\n”,++p->n);
p++;
printf(“%d,%.2f\n”,p->n,p->x);
}
A)12B)11C)11D)12
12,7.1010,5.6012,7.1014,6.70
第三、四章选择和循环结构
1.C程序一般采用自顶向下的编写格式,模块化(函数)
2.C程序结构有三种:
顺序,选择(分支),循环
3.{}:
用在函数,或复合语句
4.分支结构(或选择结构)[if结构和switch结构]
1.if分支结构
单分支:
if(表达式)语句;或if(表达式){语句组}
双分支:
if(表达式)语句1;
else语句2;
多分支if:
if(表达式1)语句1;
elseif(表达式2)语句2;
...
elseif(表达式n-1)语句n-1;
else语句n;
2.多分支switch:
switch(x)
{casex1:
语句1;[break;]
...
casexn:
语句n;[break;]
default:
语句;[break;]
}
例:
main()
{intc;
while((c=getchar())!
='\n')
{switch(c-'2')
{case0:
case1:
putchar(c+4);
case2:
putchar(c+4);break;
case3:
putchar(c+3);
default:
putchar(c+2);break;
}
}
printf("\n");
}
当输入:
247<回车>,程序的输出结果是()。
(A)689(B)6689(C)66778(D)66887
switch总结:
●其语义是:
先计算出表达式的值,用此值与哪个case后的常量表达式的值相一致,则执行那个case后的语句组,如果语句组后有break语句则直接退出switch结构,如语句组执行后没有break语句则继续执行后续case后的语句组,直到遇到break语句退出switch结构,如没有break语句则会执行后续所有case或default后的语句组再退出switch结构。
●若计算出表达式的值与case后的所有常量表达式的值都不同则只执行default及之后的语句组一直执行到最后(若遇break则终止退出switch结构),如没有default语句则直接退出switch结构。
5.循环语句:
(1)for(表达式1;表达式2;表达式3)或for(表达式1;表达式2;表达式3)
{循环体语句组;循环体语句;
...
[break;]/*用于结束当层循环,跳到当层循环后面的语句。
*/
...
[continue;]/*用于结束当次循环,跳过当次循环后面的语句,进入下次循环。
*/
...
}
(2)while(表达式)while(表达式)
{循环体语句组;循环体语句;
...
[break;]
...
[continue;]
...
}
(3)do
{循环体语句组;
...
[break;]
...
[continue;]
...
}while(表达式);
例:
for(i=1;i<=10;i++)for(i=1;i<=10;i++)
{{
if(i%2==0)break;if(i%2==0)continue;
printf(“%d”,i);printf(“%d”,i);
}}
6.循环嵌套:
从外循环进来,内循环结束后,再到外循环,如此反复,直到外循环结束)
x=0;或x=0;
for(i=1;i<=2;i++)for(i=1;i<=2;i++)
for(j=1;j<=i;j++){j=1;
x+=i*j;while(j<=i)
{x+=i*j;j++;
}}
7.break可用于switch和循环语句,一个break只退出一层;而continue只对循环有效
8.记住:
质数的判断,斐波那契数列,辗转相除法,求数列的和(有正符号如何处理?
置标志位)
循环总结:
•for循环与while循环类似,属于先判断后执行;dowhile,属于先执行后判断
•for语句中有三个表达式:
表达式1通常用来给循环变量赋初值;表达式2通常是循环条件;表达式3用来更新循环变量的值
•for语句中的各个表达式都可以省略,但要注意分号分隔符不能省略
•如果省略表达式2和表达式3需要在循环体内设法结束循环,否则会导致死循环
•break语句用在循环中时,可以直接终止当前循环,将控制转向循环后面的语句
•continue语句的作用是跳过循环体中剩余的语句而执行下一次循环
•嵌套循环时,必须将被嵌套的循环语句完整地包含在外层循环的循环体内
第五章函数
1.系统函数:
数学类函数(math.h),输入输出函数(stdio.h),字符串类函数(string.h)
2.自定义函数:
格式
类型名函数名(形式参数列表)
{
函数体
}
3.不写函数类型名默认为整型
4.如果函数类型名为void表示无返回值函数(不写return)
5.
如果调用函数写在被调函数之前,且被调函数类型名不是整型(或字符型),则在调用函数中或调用函数之前应该先声明,如何声明?
声明:
类型名函数名(形式参数列表);
6.函数的递归:
直接或者间接调用自身。
(如阶乘)
7.全局变量:
在函数外定义的变量,如果定义时没给值,默认为0
8.局部变量:
在函数内定义的变量、形式参数、复合语句中定义的变量,如果没给具体的值,该值不确定
9.对于全局变量和局部变量主要观察在函数中是否被重新定义,若全局变量和局部变量同名,则自动屏蔽掉全局变量。
10.函数调用时,实参向形参传递:
(1)按值传递:
形参的变化不会改变实参的变化。
(若有返回值将值带回,否则带回控制流,函数的返回值类型与函数类型一致);
(2)按地址传递:
形参的变化就会有可能改变实参的变化。
(3)数组传递,通常就把数组名及数组元素传过去
11.如果一个函数名为:
fun(x),严禁出现:
fun(x)=…,不管递归与否(满足标识符命名)
12.returny;或return(y);不要写成returny1,y2;
13.静态变量:
staticintx;
(1)没给值,默认为0;
(2)始终占用内存,其值会保留下来(即赋值一次,不再重新赋值,保留上次运行结果)
[静态变量]举例
eg:
以下程序的运行结果是(C)。
fun3(intx)main()
{staticinta=3;{intk=2,m=1,n;
a+=x;n=fun3(k);
returna;n=fun3(m);
}printf("%d\n",n);
}
A、3B、4C、6D、9
14.宏定义:
#define标识符字符串,宏一定要先替换后计算
分带参和无参宏定义无参宏定义如#definePx*x//表示碰到P时用x*x替换
带参宏定义如#defineP(x)x*x//表示碰到P(x)时用x*x替换
[无参宏定义]举例
若有定义:
#defineN3+2,则表达式N*2的值为(B)。
A、5B、7C、10D、0
解释:
N*2=3+2*2=3+4=7。
[带参宏定义]举例
以下程序运行后输出结果是(B)。
#defineMIN(m,n)m m: n main() {inta=3,b=5,c; c=2*MIN(a,b); printf("%d",c); } A、3B、5C、6D、10 解释: c=2*MIN(a,b)=2*a a: b2*3<5? 3: 5。 第六章数组 1.一维数组的定义格式为: 类型说明符数组名[常量表达式];例如: inta[10]; 常量表达式可以是整型常量或字符常量或枚举值或符号常量表达式(注意不能包含变量). 例如,下面这样定义数组是不行的: •举例: 1intn;scanf(“%d″,&n);inta[n]; 2intk,M=5,a[k],b[M];/*不能用变量说明数组大小*/ 3floata[0];/*数组大小为0没有意义*/ 4intb (2);/*不能使用圆括号*/ 2.数组元素下标可以是整型常量、变量、变量或整型表达式。 3.C语言规定,下标的最小值是0,最大值则是数组大小减1。 eg: m[8]中,表示数组m有8个元素,下标从0开始一直到7。 这8个数组元素分别是: m[0]、m[1]、m[2]、m[3]、m[4]、m[5]、m[6]、m[7],注意没有m[8]。 4.对一维数组的初始化赋值 (1)可以只给部分元素赋初值。 没有赋值的元素: 对于数值型数组,自动赋初值为0;对字符型数组,自动赋初值为空字符。 (2)只能给元素逐个赋值,不能给数组整体赋值。 intm[5]={2,2,2,2,2}; 不能写成: intm[5]=2; (3)如果给全部元素赋值,则在数组说明中,可以不给出数组元素的个数,其长度等于初值表中数组元素的个数。 intm[]={1,2,3,4,5}; 5.二维数组元素的引用形式: 数组名[下标1][下标2]; 6.二维数组元素的初始化 (1)分行初始化: 存储类型符数据类型数组变量名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}}; Eg: 若有定义: ints[3][4]={{1,2},{0},{3,4,5}};则s[2][1]的值为(B)。 A.3B.4C.0D.1 (2)省略一维大小: 存储类型符数据类型数组变量名[行常量表达式][列常量表达式]={初值表}; Eg: inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};printf("%d\n",a[1][2]); A.2B.3C.6D.7 7.字符数组的定义格式: char数组名[常量表达式]; 8.在c语言中,没有专门的字符串变量,通常是用一个字符数组来存放一个字符串,由于字符串总是以‘\0’作为串的结束标志,因此当把一个字符串存入一个数组时,也把结束符‘\0’存入数组,并以此作为该字符串结束的标志 9.C语言允许用字符串的方式对数组做初始化赋值。 有两种方式: (1)按单个字符的方式赋初值,其中必须有一个字符是字符串的结束标记(但字符数组可以不包括’\0’)。 如chars[]={‘1’,’2’,’3’,’\0’}; 10. (2)直接在初值表中写一个字符串常量。 如chars[]={“123”};{}可以省略 chars[]={‘1’,’2’,’3’,’\0’};<=>chars[]={“123”};<=>chars[]=“123”; 11.设已定义chars[]="\"Name\\Address\023\n";,则字符串所占的字节数是(B)。 A.19B.16C.18D.14 12.字符串的常用串函数 1strlen函数——测试字符串长度 •格式: strlen(字符数组); •功能: 测试指定字符串的实际长度(不含字符串结束标志‘\0’),并返回字符串的长度 其中,函数的参数可以是字符型数组名或字符串常数,函数的返回值是字符串的长度。 strlen得到的是有效字符的个数(不包括‘\0’) sizeof得到的是整个数组的长度(包括‘\0’) 2.strcat函数——字符串连接函数 格式: strcat(字符数组1,字符数组2); 功能: 把字符数组2中的字符串连接到字符数组1中字符串的后面,同时删去字符串1的串标志‘\0’,组成新的字符串。 该函数返回值是字符数组1的首地址 3.strcmp函数——字符串比较函数 格式: strcmp(字符串1,字符串2); 功能: 字符串1和字符串2可以是字符型数组名或字符串常量。 按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果 4.strcpy函数——字符串拷贝函数 格式: strcpy(字符数组1,字符数组2); 功能: 把字符数组2中的字符串拷贝到字符数组1中。 字符串结束标志‘\0’也一同拷贝。 字符数组2也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组 注意: 字符数组1必须定义的足够大,以便能容纳被复制的字符串,字符数组1的长度不应该小于字符串2的长度; 字符数组1必须写成数组名形式,字符数组2可以是字符数组名,也可以是一个字符串常量; 有时只需要复制字符数组2中前面若干个字符,这些用strcpy函数也能实现。 如: strcpy(m1,m2,3)表示将m2前面3个字符复制到m1中,从而取代m1中最前面的3个字符。 13.冒泡排序、直接排序、交换排序 14.杨辉三角、矩阵转置(矩阵转置只要循环一半就可以)。 15.一维数组倒序存放、矩阵转置只要循环一半就可以 第七章 指针 ⏹本章主要内容: 指针的概念、定义和引用、指针与函数、指针与数组、指针与字符串、指针数据类型小结 1.指针变量的本质是用来放地址,而一般的变量是放数值的。 int *p中 *p和p的差别: *p可以当做变量来用;*的作用是取后面地址p指向的数值,p是当作地址来使用。 *p++和(*p)++的之间的差别: 改错题目中很重要 *p++是地址会变化;(*p)++是数值会要变化。 2.指针变量的定义: 一般形式为: 类型符*指针变量名;如: int*p; 3.指针变量的引用。 两种基本的指针运算: ☐&: 取变量的地址 ☐*: 指针运算符(或称“间接访问”运算符) 4.指针变量作函数参数 [例7.3]用函数实现两个变量的交换 voidswap(int*p1,int*p2) {int*t; t=*p1;*p1=*p2;*p2=t; } main() {inta=5,b=9; swap(&a,&b); printf(“a=%d,b=%d\n”,a,b); } 5.指针函数(函数的返回值为指针) 一般定义为: 类型符*函数名(参数表){……} [例7.4]把两个数中的最大值设为0 int*max(int*q1,int*q2) {return*q1>*q2? q1: q2;} main() {intx=5,y=9,*p; p=max(&x,&y); *p=0; printf("x=%d,y=%d\n",x,y); } 6.函数指针(用一个指针变量存储一个函数入口地址,即指向函数,这样的指针称函数指针) 1.定义形式为: 类型符(*函数指针变量)();如: int(*p)(); 2.使函数指针指向一个函数,一般的格式为: 函数指针变量=函数名;如: p=max; 3.调用函数。 一般格式为: (*函数指针)(实参表)如: c=(*p)(a,b); [例7.5]通过函数指针调用函数 intmax(intx,inty){returnx>y? x: y;} intmin(intx,inty){returnx x: y;} main() {inta=5,b=9,c,d; int(*p)();//定义函数指针 p=max;//指向函数 c=(*p)(a,b);//调用函数 p=min;d=(*p)(a,b); printf(“Max=%d,Min=%d\n”,c,d); } 7.指针与数组的关系 一个变量有地址,一个数组包含若干个数组元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址,这个地址就可以用指针来实现存储。 如有: inta[5],*p,*q; p=&a[0];q=&a[2]; *p=5;*q=8;则a[0]和a[2]值分别为5和8。 8.C语言规定: 数组名代表数组的首地址,也就是第一个元素a[0]的地址。 因此: a&a[0]。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 语言 复习资料