C笔试重点.docx
《C笔试重点.docx》由会员分享,可在线阅读,更多相关《C笔试重点.docx(18页珍藏版)》请在冰点文库上搜索。
C笔试重点
第一章程序设计基本概念
1)源文件后缀.c
编译
目标文件后缀.obj
连接
可执行文件后缀.exe
2)算法的概念和特点p2
3)结构化程序有哪三种基本结构?
P3
第二章c程序设计的初步知识
1)基本概念p7
每个c程序都必须有且只能有一个主函数。
主函数名必须是main,一个程序总是从主函数开始执行,在主函数中结束.
程序的基本组成单位是函数
分号是c语句的一部分,不是语句之间的分隔符.
“/**/”为注释,必须成对出现,不能嵌套,且“/”和“*”中间不可以有空格,可以出现在程序中任意合适的地方
2)标识符p8
只能由字母、数字、下划线组成,且第一个字符必须是字母或下划线。
注:
1、用户标识符不能使用关键字,如:
int等。
define、include、printf等是预定义标识符不是关键字可作为用户标识符。
2、区分大小写,if是关键字但大写后的If就不再是了。
3)常量p9
1、符号常量:
用标识符代表常量p9定义格式:
#define符号常量常量
2、整形常量p10
①三中表示形式:
十进制、八进制、十六进制
注:
八进制数由数字0开头,后跟数字0~7表示,不能出现8和9。
十六进制整数:
由0x开头,后跟0~9,a~f(A~F)表示.
只有十进制数可以是负数、小数,而八进制和十六进制数只能是正整数!
不能是负数也不能是小数。
②类型:
p11(int、short、long、unsigned)
基本整型、长整型占四个字节,短整型占两个字节
默认为有符号基本整型,在整常量后加字母l或L,认为它是longint型常量
在c语言中,合法的长整型常数是(A)
A)0L B)4962710 C)0.054838743 D)2.1869e10
③内存中的单位p12
位(bite)------内存中的最小存储单位字节(byte)------8个二进制位组成一个字节
通常把一个字节中的最右边一位为最低位,最左边一位为最高位.
对于一个有符号整数,其中最高位(左)用来存放整数的符号,称为符号位.正整数最高位为0,负整数为1.
3、实型常量p13
表示形式:
小数形式:
(必须有小数点)
如0.123,.123,123.0,0.0,123.
指数形式:
12.34=1.234×101=123.4×10-1
在c语言中可表示为1.234e1或123.4e-1(e或E)
e前e后必须有数字,且e后(指数)必须为整数如12.3e3,123E2,1.23e4,e-5,1.2E-3.5(×)
4)变量:
程序中所有的变量都必须先定义后使用变量定义位置:
一般放在函数开头(定义部分)
变量初始化:
定义的同时给变量赋值(赋初值)
例:
intx=1,y=1,z=1;
intx=y=z=1;(×)intx,y,z;x=y=z=1;(√)
整型变量只能存放整型数值
例inta=5.5;此时a只能得到5(没语法错误,精度损失)
实型变量
float:
占4字节,提供7位有效数字
double:
占8字节,提供15~16位有效数字
实型变量只能存放实型数值
例floata=5;(√)a接收5以后,自动按5.0实数形式存放
字符型变量
字符变量存放字符ASCII码
char与int数据间可进行算术运算
大写转小写:
ch-‘A’+’a’或ch+32小写转大写:
ch-‘a’+’A’或ch-32
5)算术运算符p14
两整数相除,结果为整数,有一方是实数形式,结果保留小数
“%”求余运算符要求两侧均为整型数据,数值取余,符号与被除数一致
例:
floati=3;floata=5;intb=5;
i%3(错)a/2=2.5b/2=2b/2.0=2.5
例:
5%2=1-5%2=-11%-10=1
5%1=0-3%-10=-35.5%2()
6)运算转换规则:
不同类型数据运算时先自动转换成同一类型
7)强制类型转换
形式:
(类型名)(表达式)
括号必须括住类型名注:
本身类型不变,只是得到个中间值
例:
x=1.1;y=2.2;则(int)(x+y)=3(int)x+y=3.2
(double)(3/2)=1.0(int)3.6=3
例:
x=5.2;y=(int)x/2;x=5.2y=2
8)赋值表达式p16
必须赋给变量“=”左边不可以是常量或表达式
++,--也是赋值运算(不能对常量或表达式进行自增自减)
例:
-a=1.3(-x)++b=-c=3错
a=1a+=a-=a+a则a=-2自右向左运算
赋值转换规则:
使赋值号右边表达式值自动转换成其左边变量的类型(以接收方为主)p18
例:
inti;i=2.2;则i只能得到2floata;a=6;则自动转换为6.0存放
9)自增、自减运算符p18(注:
一定要看书!
)
++i前置先使i增1再参与运算
i++后置先参与运算再使i增1
(i在前就先用i++在前就先加)
++--不能用于常量和表达式,如5++,(a+b)++,(-i)++
a=3;b=5;c=(++a)*b;c=20,a=4
a=3;b=5;c=(a++)*b;c=15,a=4
10)逗号运算符
表达式1,表达式2,……,表达式n
逗号表达式的值:
等于表达式n的值自左向右依次进行运算优先级最低
与赋值号混合运算时,没括号的情况下先赋值,再逗号
例:
a=(b=3,++b),a+ba=4b=4表达式值为:
8
a=b=3,++b,a+ba=3b=4表达式值为:
7
第三章顺序结构
1)赋值语句
赋值表达式+分号构成语句一定要有分号表达式一定没分号
2)#include预处理命令(提前告诉系统要调用stdio.h文件里的函数)
格式:
printf(“格式控制串”,输出项表)
输出项必须要有格式控制符控制着才可输出p27
例:
a=1;b=2;c=3;
若printf(“%d,%d”,a,b,c);则只能输出1,2c的值无法输出
若printf(“%d,%d,%d”,a,b);则输出1,2,2367460(乱码)
双引号中除了格式控制符,其他字符全部原样输出
格式控制符控制着后面对应的输出项按指定格式输出
例:
a=1,b=2;printf(“b=%d,a=%d”,a,b);输出结果:
b=1,a=2
3)指定宽度
printf(“%6.4f”,1234.56789);输出结果为:
1234.5679
先满足小数位数(四舍五入)整数位全输出
若整数位数+小数位数+1(小数点)大于要求输出的总位数
则自动突破
4)两个%输出一个%a=3;printf(“%%d”,a);输出结果为:
%d
5)scanf函数的几个知识点
格式:
scanf(“格式控制串”,输入项列)
特点:
“格式控制串”中与printf的“原样输出”对应的有个“原样输入”
双引号内除格式控制符,间隔符外,其他字符要按原样输入
要输入double型数据,格式控制必须用%lf(或%le)
输入分隔符的指定:
例:
想要给a,b,c分别赋值1,2,3
inta,b,c;scanf(“%d%d%d”,&a,&b,&c);
不可以直接输入123?
中间应用分隔符隔开如:
123
例:
要给a输入1,给b输入1.5。
scanf(“a=%d,b=%f”,&a,&b);
可输入a=1,b=1.5
若想输入空格、回车或TAB键这样的分隔符,可在“%d”和“%f”前加这些字符
如:
a=1,b=1.5(此处为加空格的形式,个数不限,也可加回车,tab)
例:
1、scanf(“%7.2f”,&a);不合法,不能企图用这样的scanf函数并输入
1234567而使a的值为12345.67
2、inta,b,c;
scanf(“%3d%3d%3d”,&a,&b,&c);
若输入123456789则a=123b=456c=789
若输入123456789则a=123b=4c=56
输入数据时,遇以下情况认为该数据结束:
1、遇空格、TAB、或回车
2、遇宽度结束
3、遇非法输入
例:
scanf(“%d%c%f”,&a,&b,&c);
若输入1234a123o.26?
(把1230.26错打成123o.26认为此数据遇到字母o结束)
a=1234b=ac=123
抑制符“*”,指定输入项读入后不赋给变量
例:
scanf(“%2d%*3d%2d”,&a,&b);
输入1234567
则12-->a,67-->b
第四章选择结构
1、关系运算符
a=1,b=2,c=3m=a
2、逻辑运算符的短路特征
例a=1;b=2;c=3;d=4;m=1;n=1;
(m=a>b)&&(n=c>d)
3、if(x)⇔if(x!
=0)
if(!
x)⇔if(x==0)
4、if~else配对原则:
缺省{}时,else总是和它上面离它最近的未配对的if配对
例:
inta=1,b=2,c=3,m=0,n=0;
if(a==b)
if(b==c)
m++;
else
n++;
5、条件运算符
a>b?
a:
c>d?
c:
d⇔a>b?
a:
(c>d?
c:
d)
x>y?
1:
1.5//x>y,值为1.0;x6、switch语句
例switch(score)
{case5:
printf(“Verygood!
”);
case4:
printf(“Good!
”);
default:
printf(“dataerror!
”);
case3:
case2:
printf(“Pass!
”);
case1:
printf(“Fail!
”);
}
当score的值是5时,结果是:
Verygood!
Good!
dataerror!
Pass!
Fail!
当score的值是3时,结果是:
Pass!
Fail!
当score的值是0时,结果是:
dataerror!
Pass!
Fail!
switch的执行流程:
一、计算二、找case三、从找到的case开始,往下全部执行
四、若没找到case,则从default开始往下全部执行,若没default则结束switch语句。
第五章循环结构
三种循环是如何循环的?
(必须知道)
1、break语句
跳出一层
break只能终止并跳出最近一层的结构
break只能用于循环语句和switch语句
2、continue语句
跳出一次
只能用于循环语句
第六章字符型数据
字符常量的概念:
用单引号引起来的单个不同字符和转义字符。
1、‘A’-------‘\101’(‘\0101’)-------‘\x41’--------65
'\\''%%'都为一个字符
2、特殊格式控制符“%c”
例:
scanf(“%c%c%c”,&c1,&c2,&c3);
若输入abc则‘a’->c1,‘’->c2,‘b’->c3(此时空格给了c2)应直接输入:
abc
scanf(“%c%c%c”,&c1,&c2,&c3);
可输入:
abc也可输入:
abc
例:
scanf(“%3c%2c”,&c1,&c2);输入abcde则‘a’->c1,‘d’->c2
例:
scanf(“%d%c%d%c”,&c1,&c2,&c3,&c4);此时在%d前可加空格等间隔符,%c前不可
可输入:
1a2b则1->c1,‘a’->c2,2->c3,‘b’->c4
也可输入:
1a2b
如输入:
1a2b则1->c1,‘’->c2c3本来应接受整型数据却遇到’a’非法输入
第七章函数
1、自定义函数的定义:
一种方法:
intfun(inta,intb){循环体;}
注意:
在小括号里每个变量前必须要有数据类型。
也就是a和b前。
二种方法:
intfun(a,b)
inta,b;
{循环体;}
注意:
两种定义的区别。
函数调用有三种:
1)函数调用语句:
max(a,b);
2)函数调用表达式:
c=max(a,b);
3)函数作为函数参数:
printf(“%d”,max(a,b));
注意:
在这三个函数调用中,第一种是不需要函数的返回值。
在后两种里需要有return的返回值。
2、参数传递:
参数传递时,实参向形参传递,形参在使用时开辟内存单元,在调用完后释放内存单元。
第八章指针
1、指针变量
2、&:
取变量的地址*:
取指针所指向变量的内容
优先级:
自右向左
p=&i=&(*p)
*p=i=*(&i)
p-----指针变量,它的内容是地址量
*p----指针的目标变量,它的内容是数据
&p---指针变量占用内存的地址
4、地址传递:
inta=1,b=2,*p1=&a,*p2=&b;
值传递f(a,b)f(*p1,*p2)
接受方f(intx,inty)
无论f函数里的变量如何改变都不影响主函数中的值
地址传递f(&a,&b)f(p1,p2)
接受方f(int*q1,inr*q2)
地址传递也不一定会改变主函数中的值,必须与‘*’结合,才可改变,而且改变的是它们所指向的变量(如a,b)改变不了p1,p2
第九章数组
1、一维数组
数组名是表示数组首地址的地址常量
初始化:
可不指定数组长度,但必须赋初值
2、一维数组与指针
①[]变址运算符a[i]*(a+i)
②inta[10],*p=a;则:
a[i]p[i]*(p+i)*(a+i)
3、一级指针变量与一维数组的关系
int*p与intq[10]
①数组名是指针(地址)常量
②p=q;p+i是q[i]的地址
③数组元素的表示方法:
下标法和指针法,即若p=q,
则p[i]q[i]*(p+i)*(q+i)
④形参数组实质上是指针变量,即intq[]int*q
⑤在定义指针变量(不是形参)时,不能把int*p写成intp[];
5、二维数组
定义:
inta[3][2]
6、二维数组与指针
对二维数组inta[3][4],有
a-----二维数组的首地址,即第0行的首地址
a+i-----第i行的首地址
a[i]*(a+i)------第i行第0列的元素地址
a[i]+j*(a+i)+j-----第i行第j列的元素地址
*(a[i]+j)*(*(a+i)+j)a[i][j]
7、二维数组与一维数组指针变量的关系
如inta[5][10]与int(*p)[10];
●p=a+i使p指向二维数组的第i行
●*(*(p+i)+j)a[i][j]
●即intx[][10]int(*x)[10]变量定义(不是形参)时两者不等价
第十章字符串
chara[6]=”hello”;
chara[6]={”hello”}
char*p=”hello”;
char*p;p=”hello”;
chara[6];a=”hello”;
2、字符串函数p148
◆字符串拷贝函数strcpy
字符串比较函数strcmp
◆字符串长度函数strlen
◆字符串连接函数strcat
第十一章函数二
1、传给main函数的参数(参照题一起来做,例如:
课后题和卷子上的题)
2、指针与函数
指向函数的指针变量
定义形式:
数据类型(*指针变量名)();
如int(*p)();
3、递归函数(必须会,多做题)
第十二章标识符
1、局部变量与全局变量
局部变量---内部变量定义:
在函数内定义,只在本函数内有效
说明:
●不同函数中同名变量,占不同内存单元
●可定义在复合语句中有效的变量
全局变量---外部变量定义:
在函数外定义,可为本文件所有函数共用
有效范围:
从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件
外部变量说明:
extern数据类型变量表;
若外部变量与局部变量同名,则外部变量被屏蔽
第十三章编译预处理
1、定义
种类
宏定义#define文件包含#include
格式:
“#”开头占单独书写行语句尾不加分号
2、不带参数的宏定义
例#defineWIDTH80
#defineLENGTHWIDTH+40
var=LENGTH*2;
宏展开:
var=80+40*2;结果是:
160
3、带参数的宏定义
例#definePOWER(x)x*x
x=4;y=6;
z=POWER(x+y);
宏展开:
z=x+y*x+y;
一般写成:
#definePOWER(x)((x)*(x))
宏展开:
z=((x+y)*(x+y));
注意:
在参数后面的参数有小括号在做的时候加上小括号,没有的话一定不要加,多做多练习,课后题和卷子都有类似的题。
第十四章结构体与共用体
1、三种定义形式:
1)structstudent
{intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];
};
structstudentstu1,stu2;
2)structstudent
{intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];
}stu1,stu2;
3)struct
{intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];
}stu1,stu2;
上面三种定义的变量名是stu1和stu2,定义形式是一样的。
2、typedef的使用
typedefintM;写Ma;等价于inta;
同理:
typedefstructstudent
{intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];
}stu1,stu2;
那么在这里stu1和stu2不在是变量名,而是已经变成已有的数据类型,写stu1a;就等价于structstudenta;
3、同理数组也有三种定义方式是类似的,大家看课本就可以了,现在给大家分析一个题:
#include
main()
{structcmplx{intx;inty;}cnum[2]={1,3,2,7};
printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x);}
一起分析:
现在在结构体中定义了一个数组,数组名是cnum,那么这个数组包含两个元素,分别是cnum[0],和cnum[1],那么在这两个元素中,每个元素包含两个成员,cnum[0]的成员是x和y,而cnum[1]的成员也是x和y,现在1和3这两个数的值是不是就是cnum[0]中两个成员x和y的值呢,2和7的两个值就是cnum[1]中两个成员x和y的值,现在式子就变成了3/1*2,结果是不是就是6了.
4、成员运算符的引用p190
(1)结构体变量名.成员名
(2)指针变量名->成员名(3)(*指针变量名).成员名
数组的引用:
数组名[下标].成员名
注意:
数组引用必须会
第十五章位运算
看课本明白六种运算符的使用,会运算就可以了。
第十六章文件
1、打开文件fopen
函数调用:
FILE*fp
fp=fopen(char*name,char*mode)
2、文件的读写
fputc函数调用:
fputc(ch,fp)
功能:
把一字节代码c写入fp指向的文件中
fgetc函数调用:
ch=fgetc(fp)
功能:
从fp指向的文件中读取一字节代码
3、数据块I/Ofreadfwrite
fread(buffer,size,count,*fp)
fwrite(buffer,size,count,*fp)
说明:
buffer:
指向要输入/输出数据块的首地址的指针
size:
每个要读/写的数据块的大小(字节数)
count:
要读/写的数据块的个数
fp:
要读/写的文件指针
fread与fwrite一般用于二进制文件的输入/输出
4、格式化I/O:
fprintffscanf
例fprintf(fp,“%d,%6.2f”,i,t);//将i和t按%d,%6.2f格式输出到fp文件
fscanf(fp,“%d,%f”,&i,&t);//若文件中有3,4.5,则将3送入i,4.5送入t
5、字符串的I/Ofgetsfputs
功能:
从fp指向的文件读/写一个字符串
fgets(s,n,fp)
fgets从fp所指文件读n-1个字符送入s指向的内存区,并在最后加一个‘\0’
fputs(s,fp)fputs把s指向的字符串写入fp指向的文件
6、fseek函数函数调用:
fseek(fp,offset,whence)
fp:
文件指针offset:
位移量whence:
起始点
功能:
改变文件位置指针的位置(见课本上的表)
7、ftell函数
函数调用:
ftell(fp)
功能:
返回位置指针当前位置(用相对文件开头的位移量表示)