12、"是素数!”); //若需要返回值,则把printf语句换成return语句。
}
4) 如何求阶层:n!背诵这个程序!
int fun(int n)
{ int p=1;
for(i=l;i<=n;i++) p=p*i;
return p;
}函数的参数可以是常量,变量,表达式,甚至是函数调用。
int add (int x, int y) (return x+y; }
main ()( int sum;
sum=add (add (7,8), 9); 请问sum的结果是多少?结果为24}
5) 一定要注意参数之间的传递
实参和形参之间传数值,和传地址的差别。(考试
13、的重点)
传数值的话,形参的变化不会改变实参的变化。
传地址的话,形参的变化就会有可能改变实参的变化。
6) 函数声明的考查:
一定要有:函数名,函数的返回类型,函数的参数类型。不一定要有:
形参的名称。
int fun (int a[] , int b[])已经知道函数是这样。这个函数的正确的函数声明怎么写?
这里是函数声明的写法,
int fun (int *a , int *b);这种写法也是正确的
这种写法也是正确的
这种写法也是正确的,参
int fun (int * , int *);
这种写法也是正确的,参
注意数组就是指针 int fun (int
14、 a[] , int b[]); int fun (int b[] , int c[]); 数的名称可以随便写
数的名称可以不写要求掌握的库函数:
a)库函数是己经写好了函数,放在仓库中,我们只需要如何去使 用就可以了!
b)以下这些库函数经常考到,所以要背诵下来:abs()、sqrtO.
fabs () > pow () >strcmp ()、strcpy ()、strlen ()。
22. 指针:指针变量的本质是用来放地址,而一般的变量是放数值的。
1) 定义:int *p;后,表达式中*?和?的差别:简单说*?是数值, P是地址!
*p可以当做变量来用;*的作用是取后面
15、地址p里面的数值
p是当作地址来使用。可以用在scanf函数中:scanf (,P);
2) *p++和(*p) ++的之间的差别:改错题目中很重要!考试超级 重点*p++是地址会变化。
*p++是地址会变化。
口诀:取当前值,然后再移动
地址!
(*p) ++是数值会要变化。口诀:取当前值,然后再使数值增加lo
例题:int *p,a[] = (l,3, 5, 7, 9);P=a;
请问*p++和(*P)++的数值分别为多少?
*p++:这个本身的数值为1。由于是地址会增加一,所以指针指向数值3 了。
(*p) ++这个本身的数值为lo由于有个++表示数值会增加,指针
16、不移动,但数值1由于自加了一次变成了 2O
3)三名主义:(考试的重点)
数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)
函数名:表示该函数的入口地址。
字符串常量名:表示第一个字符的地址。
4)移动指针(经常加入到考试中其他题目综合考试)
char *s= "meikanshu"
while (*s) (printf ( "%c” , *s); s++; )这个s首先会指向第一个字母m然后通过循环会一次打印出一个字符,
s++是地址移动,打印了一个字母后,就会移动到下一个字母!
5)指针变量两种初始化(一定要看懂)方法一:int a=2, *
17、p=&&;(定义的同时初始化)
方法二:int a=2, *p;(定义之后初始化)p=&a;
6) 传数值和传地址(每年必考好多题目)void fun (int a, int b)
int *b)( int t ;
t=a; a= b; b二 t;*b=t;
)main ()
( int x=l, y=3,
fun (x, y);
printf ( "%d, %d” , x, y);
(“%d, %d" , x, y);)
这个题目答案是1和3o就是3和1。
传数值,fun是用变量接受,所以fun中接受!这个时候fun
的交换不会影响到main中的x和y。
响到mai
18、n中的x和y。
void fun ( int *a,
( int t ;
t=*a; *a=*b;
}
main ()
( int x=l, y=3,
fun (&x, &y)
printf
}
这个题目的答案
传地址,fun用指针 中的交换,就会影 传地址形参的变化绝
传数值,形参的变化不会影响实参。
大多数会影响到实参!
7)函数返回值是地址,一定注意这个*号 int *fun (int *a, int *b) 明函数运算结果是地址( if (*a>*b) return a;
else return b;)
main ()( int x=7, y=8, *m
19、ax;
max = fun (&x, &y);址,所以用max来接收。
printf ( "%d” , *max); }可以发现函数前面有个*,这个就说 return a可以知道返回的是a地址。
可以发现函数前面有个*,这个就说 return a可以知道返回的是a地址。
由于fun (&x, &y)的运算结果是地
8) 考试重要的话语: 指针变量是存放地址的。并且指向哪个就等价哪个,所有出现+p的地 方都可以用它等价的代替。例如:int a=2, *p=&a;*p=*p+2;
(由于*P指向变量a,所以指向哪个就等价哪个,这里*p等价于a ,可 以相当于是a二a+2)数组:存放
20、的类型是一致的。多个数组元素的地址是连续的。
文件时无法运行的,只有.exe文件才可以运行。(常考!)C语言书写格式是自由的,每行可以写多个语句,一条语句也可以 写在多行。
8. 一个C语言程序有且只有一个main函数,是程序运行的起点。
9. Cfree、VC/VC++、CodeBlock等是软件,用来运行写的C语言程 序。(编译环境)标识符(必考内容):
合法的要求是由字母,数字,下划线组成。有其它元素就错了。
并且第一个必须为字母或则是下划线。第一个为数字就错了标识符分为关键字、预定义标识符、用户标识符。
关键字(P259):不可以作为用户标识符号。main define s
21、canf printf都不是关键字。迷惑你的地方是If、Main等可以做为用户标 识符。因为If\ Main中的第一个字母大写了,所以不是关键字和特定 字了。
预定义标i只符:如define scanf printf include。记住预定 义标识符可以做为用户标识符,但因为它们有特定含义,一般不做用 户标识符。
用户标识符:可作为常量名、变量名、函数名、构造类型名等。
10. 整型常量:C语言只有八、十、十六进制整数,没有二进制。但 是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次)
C语言中的八进制规定要以0开头。018的数值是非法的,八进制 是没有8的。
1) 一
22、维数组的初始化:
int a[5] = (l, 2, 3, 4, 5);合法int a[5] = (l, 2, 3, }; 合法
int a[] = {l, 2, 3, 4, 5); 合法,int a[5] = {l,2, 3, 4, 5, 6);不合法,赋值的个数多于数组的个数了
2) 一维数组的定义;int aF51;注意这个地方有一个重要考点,定义时数组的个数不是变
量一定是常量。
int a[5];
int a[l+l];
式
int a[l/2+4];
int x=5, int a[x];
非法的,
#define N 5
int a[N];
只是长得像变量
23、
3)二维数组的初始化
inta[2] [3] = {1,2, 3, 4, 5, 6);
赋值。
int a[2] [3] = (1,2, 3,4,5};
Oo
合法,最正常的数组合法,个数是常量2,是个算术表达
合法,同样是算术表达式
不合法,因为个数是x,是个变量,合法,define后的的N是符号常量,
合法,很标准的二维的合法,后面一个默认为
int a[2] [3]二{{1,2,3} , {4,5,6}};int a[2][3] = {(l,2), (3,4,5});
个默认为0。
int a[2] [3] = (1,2, 3, 4, 5, 6,7};多余数组的
24、个数了。
inta[][3] = (l,2, 3,4, 5,6};的个数。
inta[2] [] = (1,2, 3, 4, 5, 6};合法,每行三个。
合法,第一行最后一
不合法,赋值的个数
不合法,不可以缺省行
合法,可以缺省列的个
合法,每行三个。
合法,第一行最后一
不合法,赋值的个数
不合法,不可以缺省行
合法,可以缺省列的个
数。
补充:
1) 一维数组的重要概念:
对a[10]这个数组的讨论。
a) a表示数组名,是第一个元素的地址,也就是元素M0]的地址。(等价于&a)
b) a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错
25、误 的。
c) a是一维数组名,所以它是列指针,也就是说a+1是跳一列。
对M3] [3]的讨论。
a) a表示数组名,是第一个元素的地址,也就是元素a[0] [0]的地址。
b) a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误 的。
c) a是二维数组名,所以它是行指针,也就是说a+1是跳一行。
d) a[O]、a[l]、a[2]也都是地址常量,不可以对它进行赋值操作,同
时它们都是列指针,a[O]+l, a[l]+l, a[2]+l都是跳一列。
23. 其他知识点:
1) 字符串的 strlen ()和 strcat () 和 strcmp () 和 s
26、trcpy () 的使用方法一定要记住。他们的参数都是地址。其中strcpy ()和 strcmp ()有两个参数。
2) strlen和sizeof的区别也是考试的重点;#define f(x)(x)*(x) 和 ttdefine f (x) x*x 之间的 差别。一定要好好的注意这写容易错的地方,替换的时候有括号和没 有括号是很大的区别。
3) int *p;
p = (int *) malloc (4);
p = (int *) mailoc (sizeof (int));以上两个等价当心填空题目,inalloc的返回类型是void *
5) 函数的递归调用一定要记得有结束的条
27、件,并且要会算简单的递归 题目。
6) 结构体要掌握最简单的,而且一定要知道如何引用结构体中的各个 变量。
7) scanf和 gets的数据:
如果输入的是good good study!
那么scanf ( "%s”,a);只会接收good.考点:不可以接收空格。
gets (a);会接收good good study!考点:可以接收空格。
8) “文件包含”的考查点:
nol. c
^include” no2. c
mainO
( add(29 , 33);
no2. c
int add(int a,int b)
return a+b;
28、
这里一个C语言程序是有两个文件组成,分别是nol.c, no2.Co那 么nol. c中最开始有个^include” no2. c”,表示把第二个文件的内容 给包含过来,那么nol.c中调用add()函数的时候就可以了把数值传 到no2. c中的被调用函数add () 了。
一个文件必须要有main函数。这句话错了。例如:no2. c就没有。 被包含的文件一定是以.h结束的。 这句话错了。例如:nol.c中就 是^include” no2. c” 以.c 结尾的。
9) 指针迷惑的考点:
char ch[]=" iamhandsome" ; char *p=ch;问你* (p+2)和*
29、p+2的结果是多少?
基''k, 结果是这两个。
10) 数组中放数组一定要看懂:
int a[8] = {l,2, 3,4, 4, 3, 2,2};
int b[5] = {0};
b[a[3]]++ 这个写法要看憧,结果要知道是什么?b[4]++,本身 是0,运行完后,b[4]为1 了。
15) 字符串的赋值:C语言中没有字符串变量,所以用数组和指针存 放字符串:
a) char ch[10]=( "abcdefgh” };对char ch[10]二"abcdefgh” ;对
b) char对
ch[10] = (宕,,b w d,,,/
,'f' , ' g' , '
30、 h' , AO
可以赋值!
d)char *p= "abcdefgh” ;
对
e)char *p; p= "abcdefgh";
对
f)char ch[10];ch="abcdefgh";
错了!数组名不
g) char *p={ "abcdefgh” );
错了!不能够出现大括
号!
16) typedef是取别名,不会产生新的类型,它同时也是关键字
考点一:typedef int qq那么int x就可以写成qq x
考点二:typedef int *qq 那么int *x就可以写成qq xstatic考点是一定会考的!复习相关的习题。
static
31、int x;默认值为 0。
int x:默认值为不定值。
C语言中的卜六进制规定要以Ox开头。
11. 实型常量:
小数的合法写法:C语言小数点两边有一个是零的话,可以不用写。 如:1.0在C语言中可写成1, 0. 1在C语言中可以写成.1。
科学计数法的合法形式:考试口诀:e前e后必有数,e后必为整 数。
如:2. 333e-l就是合法的,且数据是2.333X 10-1。
12. 字符常量:单引号:''注意:转义字符P2601)字符数据的合法形式:
'1'是字符占一个字节,〃 1〃是字符串占两个字节(含有一个结束符 号)。
'0'的ASCII数值表示为48,'a'的ASCI
32、I数值是973 的ASCII数值是65 o
一般考试表示单个字符错误的形式:’65,〃1〃
大写字母和小写字母转换的方法:’A' +32='a'相互之间一般是 相差32。
2)转义字符:
转义字符分为一般转义字符、八进制转义字符、十六进制转义字符。
一般转义字符:背诵\0、\n、\,、\”、Wo
八进制转义字符:是合法的,前导的0是不能写的。
十六进制转义字符:'\x6cT才是合法的,前导的0不能写,并 且x是小写。
3) 字符型和整数是近亲:两个具有很大的相似之处char a = 65 ;
printf ( "%c” , a);得到的输出结果:aprintf (, a);得
33、到的输出结果:65
13. 字符串常量:双引号
注意:有效长度和存储长度。
14. 变量:作用是存储数据,变量名必须是合法的标识符,变量定义 时必须指明类型。变量参与运算时必须有确定的值,包括作函数的实 参。
15. 表达式:用于运算。核心:表达式一定有数值!常考:优先级和 结合性
(1) 算术表达式:+,*, /, %
考试一定要注意:“/”两边都是整型的话,结果就是一个整型。 3/2的结果就是1.
“/”如果有一边是小数,那么结果就是小数。
3/2. 0的结果就是0. 5
“% ”符号请一定要注意是余数,考试最容易算成 了除数。
“%”符号两边要求是整数。不是整数就错了
34、
(2) 赋值表达式:表达式数值是最左边的变量的值(赋值的左边只能 是一个变量)。
如竺b=5;该表达式为5。
注意:int x二y二10;错啦,定义时,不可以连续赋值。
int x, y; x=y=10; 对滴,定义完成后,可以连续 赋值。
(3)复合的赋值表达式:+二、-二、*二、/二、%=等的含义。
int a=2;a*=2+3;运行完成后,a的值是10。
一定要注意,首先要在2+3的上面打上括号。变成(2+3)再运算。
(4)自增、自减表达式:
自加、自减表达式:假设a=5, ++a (表达式的值为6), a++ (表达 式的值为5);
考试「I诀:++在前先加后
35、用,++在后先用后加。
(5)逗号表达式:
优先级别最低。表达式的数值是逗号最右边的那个表达式的数 值。
(2, 3, 4)的表达式的数值就是4。
z=(2, 3, 4)(整个是赋值表达式)这个时候z的值为4。(有 点难度哦!)
z= 2, 3, 4 (整个是逗号表达式)这个时候z的值为2。
(6)关系表达式:
a)表达式的数值只能为1 (表示为真),或0 (表示假)。
如9>8这个关系表达式是真的,所以9>8这个表达式的数值就是lo
如7<6这个关系表达式是假的,所以7<6这个表达式的数值就是
b)考试最容易错的:就是int x=l, y=0, z=2;x36、假?
带入为1<0<2,从数学的角度出发肯定是错的,但是如果是C语 言那么就是正确的!因为要1<0为假得到0,表达式就变成了 0<2那 么运算结果就是1,成为了真的了!
c)等号和赋值的区别! 一定记住“二”就是赋值,才是等号。
(7)逻辑表达式:共有&&||!三种逻辑运算符号。
核心:表达式的数值只能为1 (表示为真),或0 (表示假)。
a)! >&&>| |优先的级别。
b)注意短路现象。如:x&&y中x若为0,不计算y; x||y 中若x为非零值,则也不计算y。
c)表示x小于0大于10的方法:0〈x〈l0是不行的,一定要用 (037、的考查:
总的处理方法:(先把十进制变成二进制,计算出结果后再变成 十进制)。
例 1: char a = 6, b;
b = a«2;这种题目的计算是先要把a的十进制6化成二 进制,再做位运算。
例2:一定要记住,异或的位运算符号” “0异或1得到1。0异或0得到0。两个女的生不出来。
考试记忆方法:一男(1) 一女(0)才可以生个小孩(1) O
例3:在没有舍去数据的时候,《左移一位表示乘以2; >>右移一位表不除以2O
(9) 补充:
a) 空语句不可以随意执行,会导致逻辑错误。
b) 注释:注释不是C语言,不占运行时间,没有分号。不可以 嵌套!
c) 强制类型转换:
38、
一定是(int)a不是int(a),注意类型上一定有括号的。 注意(int) (a+b)和(int) a+b的区别。前是把a+b转型, 后是把a转型再加b。
d) 三种取整丢小数的情况:int a =1. 6; (int)a; 1/2; 3/2;数据输出函数printf
1) 使用printf和scanf函数时,要在最前面加上#includeprintf可以只有一个参数,也可以有多个参数。
2) printf ( “第一部分”,第二部分);把第二部分的变量、表 达式、常量以第一部分的形式展现出来!
3) printf ( "a=%d, b=%d” , 12, 3
39、4)考试重点!
一定要记住是将12和34以第一部分的形式现在在终端也就是黑色的 屏幕上。考试核心为:一模一样。在黑色屏幕上面显示为a=12, b=34 printf ( aa=%d, \n b=%d v , 12, 34)那么输出的结果就是:a= 12,
格式说明表示内容
%c 字符
%s 字符串
%#0带前导
%#x带前导
%%输出一个百分
4) int x=017;一定要弄清楚为什么是这个结果!过程很重要
printf ( "%d” , x);
15
printf (, x);
17
printf ( "%#o" , x);
017
printf ( "%
40、x” , x);
11
printf ( "%#x" , x);
0x11
5) 一定要记住的格式说明表示内容
%d 整型 intchar
%ld长整型 long int
%f浮点型 float doubledouble
%o八进制的八进制
%x十六进制的十六进制
%5d号
举例说明:
printf ( "%2d” , 123 );第二部分有三位,大于指定的两位,原
样输出123printf ( "%5d”,123 );第二部分有三位,小于指定的五位,左
边补两个空格123printf ( "%10f”,1.25 );小数要求补足6位的,没有六位的补
0, o 结
41、果为 1. 250000printf ( “%5.3f” , 125 );小数三位,整个五位,结果为1. 250 (小
数点算一位)printf ( “%3.lf” , 1.25 );小数一位,整个三位,结果为1. 3
16. 数据输入scanf ( "a=%d, b=%d" , &a, &b)考试超级重点!
一定要记住是以第一部分的格式在终端输入数据。考试核心为:一模 一样。
在黑色屏幕上面输入的为a=12, b=34才可以把12和34正确给a和 b o有一点不同也不行。
1) scanf ( a%d, %d” , x, y);这种写法绝对错误,scanf的第二个部分一定要是地址!
scanf ( "%d, %d” , &x, &y);注意写成这样才可以!
2) 特别注意指针在scanf的考察例如:int x=2; int *p=&x;
scanf ( "%d” , x); 错误scanf ( "%d”,p);正确scanf ( "%d”,&p); 错误scanf (, *p)错误