C笔试重点

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章程序设计基本概念
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,认为它是long int 型常量
在c语言中,合法的长整型常数是(A)
A) 0L B) 4962710C) 0.054838743D) 2.1869e10
③内存中的单位p12
位(bite)------内存中的最小存储单位字节(byte)------8个二进制位组成一个字节
通常把一个字节中的最右边一位为最低位,最左边一位为最高位.
对于一个有符号整数,其中最高位(左)用来存放整数的符号,称为符号位. 正整数最高位为0,负整数为1.
3、实型常量p13
表示形式:小数形式:(必须有小数点)
如0.123 , .123 , 123.0 , 0.0 , 123.
指数形式:12.34 = 1.234×10 1 = 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)变量:程序中所有的变量都必须先定义后使用变量定义位置:一般放在函数开头(定义部分)
变量初始化:定义的同时给变量赋值(赋初值)
例: int x=1,y=1,z=1;
int x=y=z=1;(×) int x,y,z; x=y=z=1; (√)
整型变量只能存放整型数值
例int a=5.5; 此时a只能得到5 (没语法错误,精度损失)
实型变量
float:占4字节,提供7位有效数字
double:占8字节,提供15~16位有效数字
实型变量只能存放实型数值
例float a=5; (√) a接收5以后,自动按5.0 实数形式存放
字符型变量
字符变量存放字符ASCII码
char与int数据间可进行算术运算
大写转小写: ch-…A‟+‟a‟ 或ch+32 小写转大写: ch-…a‟+‟A‟ 或ch-32
5)算术运算符p14
两整数相除,结果为整数,有一方是实数形式,结果保留小数
“%”求余运算符要求两侧均为整型数据, 数值取余,符号与被除数一致
例:float i=3; float a=5; int b=5;
i%3(错)a/2=2.5b/2=2 b/2.0=2.5
例: 5%2 = 1 -5%2 = -1 1% -10 = 1
5%1 = 0 -3% -10 = -3 5.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.2 y=2
8)赋值表达式p16
必须赋给变量“=”左边不可以是常量或表达式
++, - - 也是赋值运算(不能对常量或表达式进行自增自减)
例: -a=1.3 (-x)++ b=-c=3 错
a=1 a += a -= a+a 则a=-2自右向左运算
赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型(以接收方为主) p18 例: int i; i=2.2; 则i只能得到2 float a; 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+b a=4 b=4 表达式值为: 8
a=b=3,++b,a+b a=3 b=4 表达式值为: 7
第三章顺序结构
1) 赋值语句
赋值表达式+分号构成语句一定要有分号表达式一定没分号
2) #include <stdio.h> 预处理命令(提前告诉系统要调用stdio.h文件里的函数)
格式:printf(“格式控制串”,输出项表)
输出项必须要有格式控制符控制着才可输出p27
例: a=1;b=2;c=3;
若printf(“%d,%d”,a,b,c); 则只能输出1,2 c的值无法输出
若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
int a,b,c; scanf(“%d%d%d”,&a,&b,&c);
不可以直接输入123?中间应用分隔符隔开如:1 2 3
例:要给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、int a,b,c;
scanf(“%3d%3d%3d”,&a,&b,&c);
若输入123456789 则a=123 b=456 c=789
若输入1234 56 789 则a=123 b=4 c=56
输入数据时,遇以下情况认为该数据结束:
1、遇空格、TAB、或回车
2、遇宽度结束
3、遇非法输入
例:scanf(“%d%c%f”,&a,&b,&c);
若输入1234a123o.26?(把1230.26错打成123o.26 认为此数据遇到字母o结束) a=1234 b=a c=123
抑制符“*”,指定输入项读入后不赋给变量
例:scanf(“%2d•%*3d•%2d”,&a,&b);
输入12•345•67
则12-->a, 67-->b
第四章选择结构
1、关系运算符
a=1,b=2,c=3 m=a<b<c; m=0
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 配对例:int a=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; x<y ,值为1.5
6、 switch语句
例 switch(score)
{ case 5: printf(“Very good!”);
case 4: printf(“Good!”);
default : printf(“data error!”);
case 3:
case 2: printf(“Pass!”);
case 1: printf(“Fail!”);
}
当score的值是5时,结果是:Very good!Good!data error!Pass!Fail!
当score的值是3时,结果是:Pass!Fail!
当score的值是0时,结果是:data error!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);
若输入a •b •c 则…a‟->c1, … ‟->c2, …b‟->c3 (此时空格给了c2) 应直接输入:abc
scanf(“%c %c %c”,&c1,&c2,&c3);
可输入:abc 也可输入:a b c
例: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
也可输入: 1a 2b
如输入:1 a 2 b 则1->c1, … ‟->c2 c3本来应接受整型数据却遇到‟a‟ 非法输入
第七章函数
1、自定义函数的定义:
一种方法:int fun(int a,int b) {循环体;}
注意:在小括号里每个变量前必须要有数据类型。

也就是a和b前。

二种方法:int fun(a,b)
int a,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、地址传递:
int a=1,b=2,*p1=&a,*p2=&b;
值传递 f(a,b) f(*p1,*p2)
接受方 f(int x,int y)
无论f函数里的变量如何改变都不影响主函数中的值
地址传递 f(&a,&b) f(p1,p2)
接受方 f(int *q1,inr *q2)
地址传递也不一定会改变主函数中的值,必须与‘*’结合,才可改变,而且改变的是它们所指向的变量(如 a,b)
改变不了p1,p2
第九章数组
1、一维数组
数组名是表示数组首地址的地址常量
初始化:可不指定数组长度,但必须赋初值
2、一维数组与指针
①[] 变址运算符 a[i] ⇔ *(a+i)
②int a[10],*p=a; 则: a[i] ⇔ p[i] ⇔ *(p+i) ⇔*(a+i)
3、一级指针变量与一维数组的关系
int *p 与 int q[10]
①数组名是指针(地址)常量
② p=q; p+i 是q[i]的地址
③数组元素的表示方法:下标法和指针法,即若p=q,
则 p[i] ⇔ q[i] ⇔ *(p+i) ⇔ *(q+i)
④形参数组实质上是指针变量,即int q[ ] ⇔ int *q
⑤在定义指针变量(不是形参)时,不能把int *p 写成int p[];
5、二维数组
定义:int a[3][2]
6、二维数组与指针
对二维数组 int a[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、二维数组与一维数组指针变量的关系
如 int a[5][10] 与 int (*p)[10];
●p=a+i 使 p指向二维数组的第i行
●*(*(p+i)+j) ⇔ a[i][j]
●即 int x[ ][10] ⇔ int (*x)[10] 变量定义(不是形参)时两者不等价
第十章字符串
char a[6]=”hello”;
char a[6]={”hello”}
char *p=”hello”;
char *p; p=”hello”;
char a[6]; a=”hello”;
2、字符串函数 p148
◆字符串拷贝函数strcpy
字符串比较函数strcmp
◆字符串长度函数strlen
◆字符串连接函数strcat
第十一章函数二
1、传给main函数的参数(参照题一起来做,例如:课后题和卷子上的题)
2、指针与函数
指向函数的指针变量
定义形式:数据类型 (*指针变量名)();
如 int (*p)();
3、递归函数(必须会,多做题)
第十二章标识符
1、局部变量与全局变量
局部变量---内部变量定义:在函数内定义,只在本函数内有效
说明:
●不同函数中同名变量,占不同内存单元
●可定义在复合语句中有效的变量
全局变量---外部变量定义:在函数外定义,可为本文件所有函数共用
有效范围:从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件
外部变量说明: extern 数据类型变量表;
若外部变量与局部变量同名,则外部变量被屏蔽
第十三章编译预处理
1、定义
种类
宏定义 #define 文件包含 #include
格式:“#”开头占单独书写行语句尾不加分号
2、不带参数的宏定义
例 #define WIDTH 80
#define LENGTH WIDTH+40
var=LENGTH*2;
宏展开:var= 80+40 *2; 结果是:160
3、带参数的宏定义
例 #define POWER(x) x*x
x=4; y=6;
z=POWER(x+y);
宏展开:z=x+y*x+y;
一般写成: #define POWER(x) ((x)*(x))
宏展开: z=((x+y)*(x+y));
注意:在参数后面的参数有小括号在做的时候加上小括号,没有的话一定不要加,多做多练习,课后题和卷子都有
类似的题。

第十四章结构体与共用体
1、三种定义形式:
1) struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct student stu1,stu2;
2) struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
3) struct
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
上面三种定义的变量名是stu1和stu2,定义形式是一样的。

2、typedef的使用
typedef int M;写M a; 等价于 int a;
同理:typedef struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
那么在这里stu1和stu2不在是变量名,而是已经变成已有的数据类型,写stu1 a;就等价于 struct student a;
3、同理数组也有三种定义方式是类似的,大家看课本就可以了,现在给大家分析一个题:
#include<stdio.h>
main()
{ struct cmplx { int x; int y;} 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/O fread fwrite
fread(buffer, size, count, *fp)
fwrite(buffer, size, count, *fp)
说明:
buffer: 指向要输入/输出数据块的首地址的指针
size: 每个要读/写的数据块的大小(字节数)
count: 要读/写的数据块的个数
fp: 要读/写的文件指针
fread与fwrite 一般用于二进制文件的输入/输出
4、格式化 I/O:fprintf fscanf
例 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/O fgets fputs
功能:从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)
功能:返回位置指针当前位置(用相对文件开头的位移量表示)。

相关文档
最新文档