C语言知识点总结.docx

上传人:b****6 文档编号:8666513 上传时间:2023-02-01 格式:DOCX 页数:14 大小:22.56KB
下载 相关 举报
C语言知识点总结.docx_第1页
第1页 / 共14页
C语言知识点总结.docx_第2页
第2页 / 共14页
C语言知识点总结.docx_第3页
第3页 / 共14页
C语言知识点总结.docx_第4页
第4页 / 共14页
C语言知识点总结.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言知识点总结.docx

《C语言知识点总结.docx》由会员分享,可在线阅读,更多相关《C语言知识点总结.docx(14页珍藏版)》请在冰豆网上搜索。

C语言知识点总结.docx

C语言知识点总结

6)算术运算符号的优先级别:

同级别的有的是从左到右,有的是从右到左。

7)强制类型转换:

一定是(int)a不是int(a),注意类型上一定有括号的。

注意(int)(a+b)和(int)a+b的区别。

前是把a+b转型,后是把a转型再加b。

8)表达式的考查:

是表达式就一定有数值。

赋值表达式:

表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。

自加、自减表达式:

假设a=5,++a(是为6),a++(为5);运行的机理:

++a是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,再放到变量a中。

进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。

考试口诀:

++在前先加后用,++在后先用后加。

逗号表达式:

优先级别最低;表达式的数值逗号最右边的那个表达式的数值。

(2,3,4)的表达式的数值就是4。

例题:

main()

{intx,y,z;

x=y=1;

z=x++,y++,++y;

printf(“%d,%d,%d\n”,x,y,z);

}

程序运行后的输出结果是

A)2,3,3B)2,3,2C)2,3,1D)2,2,1

9)位运算的考查:

 会有一到二题考试题目。

总的处理方法:

几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。

例1:

 chara=6,b;b=a<<2;这种题目的计算是先要把a的十进制6化成二进制,再做位运算。

例2:

 一定要记住,异或的位运算符号。

0异或1得到1。

0异或0得到0。

两个女的生不出来。

1异或1得到0。

两个男的生不出来。

考试记忆方法:

一男

(1)一女(0)才可以生个小孩

(1)。

例3:

 在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。

10)018的数值是非法的,八进制是没有8的,逢8进1。

11)%符号两边要求是整数。

不是整数就错了。

12) 三种取整丢小数的情况:

       1、inta=1.6;

2、(int)a;  

3、1/2;3/2;    

13)字符型和整数是近亲:

  chara=65; 

printf(“%c”,a);得到的输出结果:

a

      printf(“%d”,a); 得到的输出结果:

65

2、输入和输出

1)printf函数的格式考查:

%d对应整型;%c对应字符;%f对应单精度等等。

宽度的,左对齐等修饰。

%ld对应longint;%lf对应double。

2)scanf函数的格式考察:

注意该函数的第二个部分是&a这样的地址,不是a;

scanf(“%d%d%*d%d”,&a,&b,&c);跳过输入的第三个数据。

3)putchar,getchar函数的考查:

chara=getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。

putchar(‘y’)把字符y输出到屏幕中。

4)如何实现两个变量x,y中数值的互换(要求背下来)

不可以把x=y,y=x;要用中间变量t=x;x=y;y=t。

5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)

这个有推广的意义,注意x=(int)x这样是把小数部分去掉。

main()

{doublehui;intxy;

scanf(“%f”,&hui);scanf(“%d”,&xy);

printf(“%f,%d”,hui,xy);

}

如果从键盘上输入的数据的值是:

23回车34.789回车,则最后的输出结果是:

3、选择结构

特别要注意:

c语言中是用非0表示逻辑真的,用0表示逻辑假的。

1)关系表达式:

表达式的数值只能为1(表示为真),或0(表示假)

当关系的表达是为真的时候得到1。

如9>8这个是真的,所以表达式的数值就是1;

2)逻辑表达式:

只能为1(表示为真),或0(表示假)

a)共有&&||!

三种逻辑运算符号。

b)!

>&&>||优先的级别。

c)注意短路现象。

考试经常考到。

d)要表示x是比0大,比10小的方法。

0

是先计算0

所以一定要用(0

3)if语句

else是与最接近的if且没有else的相组合的。

嵌套的if….else语句的配对的原则:

else总是和之前的最近的没有和其他的else成对的if成对。

main()

{inta=5,b=4,c=3,d=2;

if(a>b>c)

printf("%d\n",d);

elseif((c-1>=d)==1)

printf("%d\n",d+1);

else

printf("%d\n",d+2);

}

执行后输出结果是( )。

 A)2 B)3C)4D)编译时有错,无结果

4)条件表达式:

 表达式1?

表达式2:

表达式3

 注意是当表达式1的值为:

非0时候是表达式2的数值,当为0是就是表达式2的数值。

  考试口诀:

真前假后。

5)switch语句:

  a)一定要注意有break和没有break的差别,书上(54页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。

  b)switch只可以和break一起用,不可以和continue用。

  c)switch(x)x:

是整型常量,字符型常量,枚举型数据。

     {case1:

….case后面的只能是常量不能是变量。

case2:

….

}

注意:

break可以用在循环语句中,也可以用在switch语句中。

但是continue语句只能用在循环语句中。

例题:

main()

{intx=1,y=0,a=0,b=0;

switch(x)

{

case1:

switch(y)

{case0:

a++;break;

case1:

b++;break;

}

case2:

a++;b++;break;

}

printf(“a=%d,b=%d\n”,a,b);

}

4、循环结构

1)三种循环结构:

a)for();while();do-while()三种。

b)for循环当中必须是两个分号,千万不要忘记。

c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。

d)do-while()循环的最后一个while();的分号一定不能够丢。

(当心上机改错),do-while循环是至少执行一次循环。

复习:

三个循环结构的执行过程。

while是先判断后执行。

do….while是先执行后判断。

for()先执行表达式1,判断表达式2,执行循环体中的内容,在执行表达式3.

例题:

2)break和continue的差别

记忆方法:

break:

是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。

continue:

是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。

3)嵌套循环

就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。

4)while((c=getchar())!

=’\n’)和while(c=getchar()!

=’\n’)的差别

  先看a=3!

=2和(a=3)!

=2的区别:

  (!

=号的级别高于=号所以第一个先计算3!

=2)第一个a的数值是得到的1;第二个a的数值是3。

  考试注意点:

括号在这里的重要性。

main()

{inti=0,s=0;

for(;;)

{if(i==0||i==5)continue;

if(i==6)break;

i++;s+=i;

}

printf(“%d”,s);

}

A、10B、13C、21D、程序进入死循环

5、函数

函数:

是具有一定功能的一个程序块;是C语言的基本组成单位。

1)函数的参数,返回数值

voidf(intv,intw)

{intt;

t=v;v=w;w=t

}

main()

{intx=1,y=3,z=2;

if(x>y)f(x,y);

elseif(y>z)f(y,z);

elsef(x,z);

printf(“%d,%d,%d\n”,x,y,z);

}

2)函数的调用:

实参和形参之间传数值,和传地址的差别。

(考试的重点)

按数值传替,形参的变化不会改变实参的变化。

(单向传替)

按地址传替,形参的变化就会有可能改变实参的变化。

(双向传替)

3)函数声明的考查:

  一定要有:

函数名,函数的返回类型,函数的参数类型。

  不一定要有:

形参的名称。

4)要求掌握的库函数:

  sqrt()fabs()pow()sin()其中pow(a,b)是重点。

23为pow(2,3)。

以及sqrt()表示的是一个表达式或者是一个数值的开方。

5)函数最后返回值的类型决定于函数的定义类型。

6、指针

1)、指针变量的本质是用来放地址,而一般的变量是放数值的。

int*p中*p和p的差别:

      *p可以当做变量来用;*的作用是取后面地址p里面的数值

      p是当作地址来使用。

*p++和(*p)++的之间的差别:

改错题目中很重要

*p++是地址会变化。

(*p)++是数值会要变化。

若有说明:

intn=2,*p=&n,*q=p;则以下的非法的赋值语句是:

()

A、p=qB、*p=*qC、n=*q;D、p=n

2)、三名主义:

(考试的重点)

数组名:

表示第一个元素的地址。

数组名不可以自加,他是地址常量名。

(考了很多次)

函数名:

表示该函数的入口地址。

字符串常量名:

表示第一个字符的地址。

考试重要的话语:

  指针变量是存放地址的。

并且指向哪个就等价哪个,所有出现*p的地方都可以用它等价的代替。

  例如:

inta=2,*p=&a;

     *p=*p+2;

(由于*p指向变量a,所以指向哪个就等价哪个,这里*p等价于a,可以相当于是a=a+2) 

指针变量两种初始化

  方法一:

inta=2,*p=&a;(定义的同时初始化)

  方法二:

inta=2,*p;  (定义之后初始化)

      p=&a;

3)、给指针变量赋空值之后,不能对该变量进行指针运算。

#include“stdio.h”

main()

{intn,*p=NULL;

*p=&n;

printf(“请输入数据:

”);

scanf(“%d”,&p);printf(“结果是:

”);

printf(“%d\n”,p);

}

该程序试图通过指针p为变量n读入数据并输出数据,但是程序中有多处错误,以下语句正确的是:

()

A、intn,*p=NULL;B、*p=&n;C、scanf(“%d”,&p);D、printf(“%d\n”,p);

4)返回指针的函数:

格式:

函数返回值类型*函数名(形式参数列表)

int*f(int*x,int*y)

{if(*x<*y)

returnx;

else

returny;

}

main()

{inta=7,b=8,*p,*q,*r;

p=&a;q=&b;

r=f(p,q);

printf(“%d,%d,%d”,*p,*q,*r);

}

执行后输出结果是( )

A)7,8,8 B)7,8,7 C)8,7,7 D)8,7,8

7、数组

1)一维数组的重要概念:

对a[10]这个数组的讨论。

1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。

3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。

 

对a[3][3]的讨论。

1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。

3、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。

4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。

5、注意a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的。

前者是一行元素,后三者是一列元素。

重点复习:

定义的格式和排序

例题:

一下能正确定义一维数组的是:

A、intnum[];B、#defineN100intnum[0….100]D、intN=100

intnum[N];intnum[N]

#include“stdio.h”

main()

{inti,j,t;a[5]={2,1,4,3,5};

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(a[i]

{t=a[i];a[i]=a[j];a[j]=t;}

for(i=0;i<5;i++)

printf(“%4d”,a[i]);

}

则程序执行后的结果是:

2)二维数组做题目的技巧:

如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。

步骤一:

把他们写成:

      第一列 第二列 第三列  

a[0]--> 1  2  3->第一行

a[1]-->4  5  6 —>第二行

a[2]-->7  8  9 ->第三行

步骤二:

这样作题目间很简单:

    

  *(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。

  *(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。

那么这里就是a[1][2]元素,所以是6。

一定记住:

只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。

3)数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写

inta[]={1,2}合法。

inta[][4]={2,3,4}合法。

但inta[4][]={2,3,4}非法。

4)二维数组中的行指针

inta[1][2];

其中a现在就是一个行指针,a+1跳一行数组元素。

搭配(*)p[2]指针

a[0],a[1]现在就是一个列指针。

a[0]+1跳一个数组元素。

搭配*p[2]指针数组使用

5)还有记住脱衣服法则:

a[2]变成*(a+2)a[2][3]变成*(a+2)[3]再可以变成*(*(a+2)+3)

以下错误的定义语句是

A)intx[][3]={{0},{1},{1,2,3}};

B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

C)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

D)intx[][3]={1,2,3,4};

 

8、字符串

1)、字符串的概念:

由双引号括起来的若干个字符所组成的序列。

每一个字符串都有一个‘\0’做为结束的标识。

2)字符串的存储形式:

两种存储

①数组存储用数组来存储字符串。

A、将每一个字符分别赋值给数组中的每一个元素。

 B、定义字符数组的时候就给数组中的每一个元素赋初值。

但是最后必须有一个结束符。

  

C、直接把一个字符串赋值给一个数组。

D、当把字符串中的内容赋值给数组时,当数组中的元素的个数多余数组字符个数的时候,可以不用加最后的结束符。

E、在定义数组的时候,省略了数组的长度的时候,如果没有结束符,那么这个数组时不能构成一个字符串的。

②指针存储用指针来存储字符串。

在定义指针变量的同时将一个字符数组赋值给一个指针变量。

以下不能正确进行字符串赋值的语句时:

()

A、charstr[5]=”good!

”;B、charstr[]=”good!

C、char*str=”good!

”D、charstr[5]={‘g’,’o’,’o’,’d’};

3)、字符串的输入和输出

输出:

A、printf函数输出字符串是,格式控制说明符是%s,其中的输出项为:

地址。

输出时不带有字符串的定界符。

B、puts函数输出的一个字符串,同样的括号中的内容只能是一个字符串或者是一个地址。

输出时不带有字符串的定界符。

输入:

A、scanf函数,在输入的时候,格式控制说明符任然为%s,输入项中的内容仍然为:

地址。

在输入的时候不输入字符串的定界符。

但是使用scanf函数在输入数据的时候,不能接受回车符和空格符。

B、gets()函数接受的仍然是一个字符串,输入项中的内容仍然为:

地址。

在输入的时候不输入字符串的定界符。

但是使用scanf函数在输入数据的时候,能接受回车符和空格符。

例题:

当用户要求输入的字符串中含有空格时,应使用的输入函数是:

A、scanf()B、getchar()C、gets()D、getc()

4)、字符串处理函数

掌握字符串的处理函数:

strcpy()strcmp()strlen()strcat()

其中括号中的内容均是地址。

掌握每一个函数的含义和功能。

#include”stdio.h”

main()

{

charp[20]=”abcd”,q[]=”abc”,r[]=”abcde”;

strcat(p,r);

strcpy(p+strlen(q),q);

printf(“%d\n”sizeof(p));

}

9、文件

1)、文件指针的定义的格式:

FILE*文件指针。

2)、打开文件的格式:

fopen(“文件名”,“打开方式”);

重点看打开方式为r和w的形式。

3)、关闭文件:

fclose(文件指针)。

文件的操作:

1)、feof函数的格式以及函数的功能。

返回的是文件指针的位置.如果在文件的末尾,则返回的是一个非0值,若是不在文件末尾,返回的是0值。

2)、fseek函数(定位函数)

掌握定位的原则。

例如:

与fseek(fp,0L,seek_set)有相同作用的是:

A、feof()B、ftell()C、fgetc()Drewind()

哈哈哈:

最后给大家看个大学挂科经典名言,轻松一下,不要学得太累了,注意劳逸结合,明天就要降温了,大家注意保暖,最重要的是希望大家明天的考试都能过,永不挂科,过个好年。

 

美特斯邦威:

不挂寻常科

特步:

挂科,死一般的感觉

百事:

今天你挂了吗?

森马:

考什么,挂什么

脑白金:

今年过节不挂科,挂科只挂专业科

汇仁肾宝:

他挂我也挂

李宁:

挂科,一切皆有可能

旺旺:

你挂,我挂,大家挂,挂挂

鼎湖山泉:

你挂过科吗?

好迪:

大家挂,才是真的挂!

白加黑:

白天挂一科,不瞌睡;晚上再挂一科,睡得香

联想:

学生不挂科,学校会怎么样?

娃哈哈:

妈妈~~我也要挂科!

清嘴:

你知道挂科的味道吗?

安踏:

我挂科,我喜欢!

NIKE:

Just挂it!

钙中钙:

现在的挂科啊,它含金量高,挂一科顶过去五科,方便!

你瞧我,一口气挂上五科,不费劲!

自从挂了科,腰不疼,腿不软,跳楼也有劲了

上了大学才知道,玩游戏是要通宵的;

上了大学才知道,手机是用来追女生的;

上了大学才知道,人渣都是大学培养的;

上了大学才知道,原来大学和养老院是差不多的;

上了大学才知道,馒头一捏就能变汤圆的;

上了大学才知道,所有的课都能跷,只有体育课是不能跷的;

上了大学才知道,打水是用来泡面的;

上了大学才知道,开学校原来是那么赚钱的;

上了大学才知道,二锅头是用来干的;

上了大学才知道,一门课一学期可以就考试那天去一次的;

上了大学才知道,一头猪是可以供食堂吃几天的;

上了大学才知道,原来理想只是高中以前才有的;

上了大学才知道,大学里是学不到东西的;

上了大学才知道,自习室是用来谈恋爱的.

大学生=吃饭+睡觉+谈恋爱

《人在大学》

大门是雄伟的

进去会后悔的

宿舍是简陋的

价格是不菲的

上课是很闲的

社团是骗钱的

恋爱是常见的

生活是贫贱的

学习是无奈的

睡觉是最爽的

理想是奇怪的

未来是实在的

考好是意外的

重修是常在的

作弊是被迫的

开卷是不错的

昼夜是不分的

精神是不振地

废话是没完的

发疯是常有的

自杀是勇敢的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1