C复习资料1版.docx

上传人:b****7 文档编号:10377198 上传时间:2023-02-10 格式:DOCX 页数:23 大小:727.54KB
下载 相关 举报
C复习资料1版.docx_第1页
第1页 / 共23页
C复习资料1版.docx_第2页
第2页 / 共23页
C复习资料1版.docx_第3页
第3页 / 共23页
C复习资料1版.docx_第4页
第4页 / 共23页
C复习资料1版.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C复习资料1版.docx

《C复习资料1版.docx》由会员分享,可在线阅读,更多相关《C复习资料1版.docx(23页珍藏版)》请在冰豆网上搜索。

C复习资料1版.docx

C复习资料1版

 

《C程序设计》复习资料1

 

一、基础知识

计算机工作原理、应用

计算机工作原理:

存储程序

应用方面:

最早应用是科学计算,现在最普遍的应用是数据信息处理。

例:

1、用计算机进行论文检索,属于计算机在______方面的应用。

A.科学计算B.实时控制

C.信息处理D.人工智能

进制转换:

利用计算器

例:

2、下列四个二进制数中,______与十进制数73等值

A.01110111B.01001100

C.01110110D.01001001

计算机系统

例3、计算机软件主要分为______。

A.数据库软件和网络软件

B.系统软件和应用软件

C.客户端软件和服务器端软件

D.应用软件和网络软件

例4、微型计算机的微处理器芯片上集成的主要组件包括______。

A.控制器和运算器

B.内存和控制器

C.控制器和存储器

D.运算器和I/O接口

Windows操作

网络、多媒体、病毒

二、C语言基本概念题

一)C语言程序程序组成

1)C语言程序由一个或多个函数组成

2)C语言程序中有且仅有一个main()函数,位置任意。

3)C语言程序总是从main()函数开始执行,最后也在main()函数结束

4)C语言属于高级语言,编写的代码为源程序,需要编译为目标程序再连接后形成可执行文件程序才可以执行。

二)C语言程序书写

1)C语言区分大小写字母

2)一行能写多条语句、一条语句可分成几行书写

3)C语言程序中的语句必须以分号结束

4)C程序在书写时,没有严格的缩进要求

5)语言本身没有输入输出语句

6)C语言有两类注释语句,注释语句不参加编译

/**/、//

例题:

1、C语言程序总是从______开始执行。

A.第一条语句B.第一个函数

C.main函数D.#include

答案C

2、下列关于C语言程序书写规则的说法中正确的是______。

A.不区分大小写字母

B.一行只能写一条语句

C.一条语句可分成几行书写

D.每行必须有行号

答案C

3、以下叙述错误的是______。

A.一个C程序可以包含多个函数

B.一个C程序只能有一个主函数

C.C程序在书写时,有严格的缩进要求,否则不能编译通过

D.C程序的主函数必须用main作为函数名

答案C

4、以下叙述正确的是_______。

A.在C程序中,main函数必须位于程序的最前面

B.C语言本身没有输入输出语句

C.C语言的每一行中只能写一条语句

D.在对一个C语言程序进行编译的过程中,可发现注释中的拼写错误

答案B

5、一个C程序的执行是从______。

A.本程序的main函数开始,到main函数结束

B.本文件的第一个函数开始,到本文件的最后一个函数结束

C.本程序的main函数开始,到本文件的最后一个函数结束

D.本文件的第一个函数开始,到本文件的main结束

答案A

6、计算机能直接执行的程序是_______。

A.可执行程序B.目标程序

C.源程序D.汇编程序

答案A

三、类型及表达式

一)合法的标志符:

命名规则

(1)有效字符:

只能由字母、数字和下划线组成,且以字母或下划线开头。

(2)有效长度:

随系统而异,但至少前8个字符有效。

(3)C语言的关键字不能用作变量名。

例题:

1.是合法的用户自定义标识符的()

A)ah-spksB)doubleC)D)_myapple

注解:

A)用了不合法的-;B)是关键字;C)用了不合法的<>,所以答案为D

2.以下正确的C语言标识符是()

A)%xB)a+bC)a123D)test!

注解:

A)用了不合法的%;B)用了不合法的+;D)用了不合法的!

,所以答案为C

3.以下不能定义为用户标识符的是()

A)VoidB)b_2C)intD)name

注解:

A)是大写的V,所不是关键字void,合法;B)和D)肯定合法;C)int是关键字,所以答案为C

二)合法的整型常量

(1)十进制。

例如10、36。

(2)八进制(以数字0开头)。

例如012。

(注意0后的数字不能>=8)

(3)十六进制(以数字0+小写字母x开头)。

例如0x36。

例题:

1.以下选项中可作为C语言合法整数的是()

A)11010BB)0583C)x2b2D)0xafb

注解:

A)C语言没用二进制,不对;B)以0开头则是8进制,不能用8和9这两个数字符号;C)十六进制应用0x开头,所以答案为D

三)合法的实型常量

(1)十进制小数形式。

例如3.14、9.8。

(小数点后数字可省略)

(2)指数形式:

<尾数>E(e)<整型指数>。

字母e或E前后必须有数字,且后面指数必须为整数

例题:

1.以下选项中可作为C语言合法常量的是(  )

A)-80.B)-080C)-8e1.0D)-80.0e

注解:

B)以0开头则是8进制,不能用8和9这两个数字符号;C)e后面要跟整数,1.0不是D)e前后必须有数字所以答案为A

四)合法的字符型常量

(1)用一对单引号括起来的单个字符,称为字符常量。

(2)以“\”开头的转义字符(常见的’\n’、’\t’、’\\’、’\ddd’(1-3位八进制)、’\xdd’(1-2位十六制),这些都代表1个字符)

例题:

1.设有说明语句:

chara=’\123’;则变量a()

A)包含1个字符B)包含2个字符C)3个字符D)说明不合法

注解:

’\123’是指ASCII码八进制值为123的那一个字符,所以答案为A

2.下列______是不合法的常量。

A)'xabcde'B)"x1f"C)0x12D)2.1e3

注解:

A)单引号只能括起一个字符,不能括起多个字符;B)是字符串常量,C)0x12是十六进制为12的整型常量,D)2.1e3是指数形式的实数,为2.1*103所以答案为A

五)合法的字符串常量

(1)以一对双引号括起来的多个字符,称为字符串常量。

(2)字符串常量的串末尾默认有一个’\0’

例题:

1.C语言中,“\x5d”在内存中占用的字节数是(  )

A)2B)5C)4D)1

注解:

A)“\x5d”是字符串常量,存放了一个转义字符\x5d,另外存储时会在末尾加一个’\0’,所以答案为A

2.字符串“\t\x42\\bcd\n”的长度是(  )。

A)7B)10C)12D)13

注解:

\t一个\x42一个\\一个b一个c一个d一个\n一个,共7个,注意,讲长度时不算\0,是指第一个\0前面的字符个数。

所以答案为A

六)各种基本类型变量所占的字节数

int4short2unsigned4

float4double8char1

例题:

1.下列式中,值不为4的表达式是()

A)sizeof(unsignedlong)B)sizeof(long)C)sizeof(short)D)sizeof(float)

注解:

sizeof()是求()中变量或类型的所占字节数,short为2,所以答案为C

七)合法的表达式

(1)%两边操作数必须是整型

(2)赋值的左边一定是变量

例题:

1.设变量a、b、c已定义并赋值,则下列表达式中符合C语言语法规则的是()

A)a=5++B)a=b=c++C)a%=2.5D)b=a+1=2

注解:

A)常量不能++;C)%两边必须是整型;D)=左边是a+1不允许。

所以答案为B

八)表达式的值

每个表达式都有值

(1)算术表达式的值就是计算结果(注意整除和取余运算)

(2)赋值表达式的值被赋值变量的值

(3)逗号表达式的值是最后一个表达式的值

(4)注意两个表达式的意义:

令a是数字字符,则a-‘0’就是对应的数字

令a是字母字符,则a-32就是小写变为大写,a+32就是大写变为小写

例题:

1.设整型变量a的值为2,下列表达式值为1的是()

A)a%3B)a/3C)--aD)a--

注解:

A)2%3=2B)2/3=0C)a=a-1,表达式为1D)表达式为2,a=a-1=1

所以答案是C(注意表达式是指除去++、--的式子)

2.下列表达式的值为0的是(  )

A)7/8B)7%8C)7/8.0D)7<8

注解:

A)7/8=0B)7%8=7C)7/8.0=0.875D)7<8=1

所以答案是A

3.设floatm=4.0,n=4.0;使m为10.0的表达式是(  )

A)m-=n*2.5B)m/=n+9C)m*=n-6D)m+=n+2

注解:

A)等价为m=m-(n*2.5)=6.0;B)等价m=m/(n+9)=0.31;C)等价m=m*(n-6)=8

D)等价为m=m+(n+2)=10.0所以答案是D

4.逗号表达式(a=4*5,a*2),a+15的值是(  )

A)35B)40C)55D)20

注解:

逗号表达式的值为最后一项的值,所以a=20(=的优先级比逗号高),所以表达式为20+15=35,所以答案是A

九)++、--运算

1)先将表达式中++、--去掉

2)再将前置型的写在表达式上方

3)最后将后置型的写在表达式下方

例题:

当i=4,j=5时,表达式3-(i++)*4+(--j)的值如何,i,j的值多少?

按上面的做法表达式改为下面的三步,自上向下算,中间表达式值为9

j=j-1;

3-i*4+j;

i=i+1;

十)表达式的类型

自动转换:

表达式中有整型和字符型,结果一定为整型

表达式中有实型,结果一定为double类型

强制转换:

可以强制转换为指定的类型

例题:

1.下列式中,最终运算结果的数据类型不是双精度的表达式的是()

A)(int)(3+3.0)B)1e-3C)(double)(3)D)(int)3.0+3.0

注解:

A已强制转化为整型。

而D则将第一个3.0强制整型,再+3.0自动转换为double类型。

所以选A

2.设有定义intx;floaty;doublez;,则表达式x+z-y值的数据类型为______。

A.floatB.char

C.intD.double

注解:

一般表达式中有double或float类型的,若没有强制转换,最终一定是double类型,所以选D。

三、顺序结构

一)putchar和getchar:

一次只能输入输出一个字符

例题:

1.putchar函数可以向终端输出一个(   )

A)整数  B)实数  C)字符串  D)字符

二)printf和scanf语句的使用方法:

scanf注意数据输入时的分隔符(“”中有的要原样输入,没有的数值数据以空格、回车、Tab键为默认分隔符,字符数据没有分隔符)

例题:

1.设有语句scanf(%d,%d”,&m,&n);要使m、n的值依次是2、3,正确是输入是()

A)23B)2,3C)2;3D)2、3

注解:

对数值型和字符串型scanf中有任何分隔符,都要原样输入,若没有以空格、回车、Tab键分隔。

所以选B

2.设变量定义为inta,b;执行下列语句时,输入(),则a和b的值都是10

scanf(“%d,%d”,&a,&b);

A)1010B)10,10C)a=10b=10D)a=10,b=10

注解:

同上。

所以选B

3.有以下程序

#include

voidmain()

{intm,n,p;

  scanf("m=%dn=%dp=%d",&m,&n,&p);

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

}

若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是(  )

A)123,456,789  B)m=123n=456p=789

C)m=123,n=456,p=789  D)123456789

注解:

scanf中任何非格式字符(%d%c%f%s),都要原样输入。

所以选B

printf注意输出形式%m.n形式,m代表输出的数据占的列宽,不够的在前面补上空格,n代表小数的显示位数

例题:

1.有如下程序段:

inta=3,b=15;

floatf=7.5;

printf(“%.1f”,(float)a+b/2+(int)f%3);

执行该程序段后,运算结果为:

()

A)11.5B)11.0C)11D)12.0

注解:

(float)a为3.0,b/2为整除值是7,(int)f为7,7%3=1,再相加值=3.0+7+1=11.0。

所以选B

三)算法

1.两数交换:

t=a;a=b;b=t;(三步曲)

2.大小写字母互换

ch=ch+32;//大写字母转换为小写字母

ch=ch-32;//小写字母转换为大写字母

3.数字字符转换为对应数值

x=ch-48;//或x=ch-‘0’;

三、选择结构

一)关系表达式、逻辑表达式和条件表达式

(1)C中结果为真时值用1表示,结果为假时值用0表示;

(2)C中的操作数是以非0认为是真,以0认为是假;

(3)数学中表示10

10

(4)逻辑运算中的短路原则(对于&&前假则右边表达式不运算,右边变量值不发生任何改变;对于||前真则右边表达式不运算,右边变量值不发生任何改变)

例题:

1.在C程序中,用()表示逻辑”真”。

A)1B)非0的数C)非1的数D)大于0的数

注解:

选B

2.若有定义:

intx=2,y=3,z=4;则表达式!

(x+y)+z-1&&y+z%2的值为(  )

 A)4B)0C)1D)2

注解:

先做!

(x+y)为0再加z减1为3,则&&左边为真,右边y+z%2为3也为真,真&&真,结果为真值为1。

所以选C

3.设有inta=1,b=0;,则表达式a<2||++b的值是______。

A.0B.1

C.TD.F

注解:

先做a<2,则||左边为真,右边为任何情况结果都肯定为真值为1,故短路,b没改变。

该题问表达式值所以选B

4.执行语句:

inta=1,b=0,c;c=a>0||++b;后,b的值为()

A)0B)1C)2D)不确定

注解:

先做a>0,则||左边为真,右边为任何情况结果都肯定为真值为1赋给c,另短路,b没改变。

该题问b值所以选A

5.已知:

inta=1,b=2,c=3,d=4;,则执行语句a>b&&++c>=d;后,变量c的值是______。

A.4B.3

C.1D.不确定

注解:

先做a>b,则&&左边为假,右边为任何情况结果都肯定为假值为0,故短路,c没改变。

该题问c值所以选B

6.设intx,y,z=4;x=y=++z;x=(y>z)?

x+2:

x++;则x的值是()

A)4B)5C)6D)7

注解:

先执行x=y=++z;则x=y=z=5。

再x=(y>z)?

x+2:

x++;三目运算先完成y>z假,执行x++,x为6。

所以选C

7.为表示关系x>y>=z,则正确的c语言表达方式为(  )。

A)(x>y>=z)B)(x>y)and(y>=z)

C)(y=z)D)(x>y)&(y>=z)

注解:

要描述三个数之间的关系一定要用到逻辑运算。

所以选C

运算符的优先级和结合性记忆方法

优先级

单目>双目>三目>特殊双目(赋值>逗号)

结合性

单目、三目自右向左

双目自左向右

特殊双目(赋值)自右向左

例题:

8、执行语句inta=8;a+=a-=a*a;后,变量a的值是______。

A.-240B.64C.112D.-112

解释:

赋值的结合性为自右向左,则先做右边a-=a*a得到a为-56,再做左边a+=a得到a=-112,选D

二)if语句

(1)条件

if(a)等价if(a!

=0)if(!

a)等价if(a==0)

(2)else的匹配原则:

与上方最近的且没被匹配的if匹配

(3)满足if条件的只执行if下方的一条语句,若有多条语句一定要用{}括起来。

例题:

1.有以下程序

main()

{inta=0,b=0,c=0,d=0;

if(a==1)b=1;c=2;

elsed=3;

printf(%d,%d,%d,%d\n,a,b,c,d);

}

程序输出(   )

A)0,1,2,0  B)0,0,0,3  C)1,1,2,0  D)编译有错

注解:

满足if条件后有两条语句,没有用{},马上又跟else,语法出错。

所以选D

2.以下程序运行后的输出结果是  

#include

voidmain()

{

  inta=3,b=4,c=5,t=99;

  if(b

  if(a

  printf("%d%d%d\n",a,b,c);

}

注解:

注意也是没{},可正确匹配为

  if(b

a=c;c=t;//a=5;c=99

  if(a

b=a;a=t;//b=5;a=4

所以结果为4599

三)switch语句

(1)switch的执行过程(根据switch后面的表达式的值找到case的入口,从入口处执行直到遇到break。

(2)break的用法

例题:

1.#include

voidmain()

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

switch(x)

{case0:

b++;

case1:

a++;

case2:

a++;b++;break;

case3:

a++;b++;

}

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

}

输出结果:

a=2,b=1

四)算法

1.分段函数

输入出租车里程S,输出应付车费F。

S和F的关系如下:

2.奇偶判断

if(x%2==0)//偶数条件

3.整除判断

if(x%n==0)//表示x能被n整除

4.大写字母字符的判断

if(ch>=’A’&&ch<=’Z’)//表示ch是大写字母字符的条件

5.小写字母字符的判断

if(ch>=’a’&&ch<=’z’)//表示ch是小写字母字符的条件

6.字母字符的判断

if((ch>=’A’&&ch<=’Z’)||(ch>=’a’&&ch<=’z’))//表示ch是字母字符的条件

7.数字字符的判断

if(ch>=’0’&&ch<=’9’)//表示ch是数字字符的条件

四、循环结构

一)循环条件均以条件为真(非0)进行循环,以条件为假(0)结束循环)

例题:

1.以下叙述正确的是()

A)do-while语句构成的循环不能用其它语句构成的循环来代替

B)do-while语句构成的循环只能用break语句退出

C)do-while语句构成的循环,在while后的表达式为非零时结束循环

D)do-while语句构成的循环,在while后的表达式为零时结束循环

解答:

D

2.设有程序段:

    intk=10;

while(k=0)k=k-1;

则循环体执行的次数为( )

A)10次  B)9次  C)0次  D)1次

解答:

注意条件为k=0,一个等号,这是将0赋值给k,故表达式为0,结束循环,所以选C

二)三种循环的执行流程

例题:

1.设变量y值为3,执行下列循环语句后,变量y的值的是()

doy++;while(y<4);

A)3B)4C)5D)6

解答:

++,--独立书写时不用管是后置还是先置,就认为是y=y+1,所以选B

2.执行语句for(I=1;I<4;I=I+2);后变量I的值是()

A)3B)4C)5D)0

解答:

I=1,1<4y

I=3,3<4y

I=5,5<4n,所以选C

3.已知:

intx=0,y=10;while(x

A.是无限循环B.执行次数不定

C.执行6次D.执行5次

解答:

x=0,y=100<10yx=1,y=9

x=1,y=91<9yx=2,y=8

x=2,y=82<8yx=3,y=7

x=3,y=73<7yx=4,y=6

x=4,y=64<6yx=5,y=5

x=5,y=55<5n结束循环

所以选D

4.设有inti;,则执行for(i=1;i++<=4;);后变量i的值为______。

A.4B.5

C.6D.7

解答:

注意i++<=4是后置++则改为i<=4i=i+1

i=1,1<=4i=2y

i=2,2<=4i=3y

i=3,3<=4i=4y

i=4,4<=4i=5y

i=5,5<=4i=6n结束循环

所以选C

三)循环嵌套的执行次数

例题:

1.#include“stdio.h”

voidmain()

{intI,j;

for(I=0;I<=3;I++)

{for(j=0;j

printf(”%d”,I);

printf(“*\n”);

}

}

输出结果:

解答:

I=0I<=3yj=0j<0n结束第二个for循环,执行printf(“*\n”);

I=1I<=3yj=0j<1yprintf(”%d”,1);

j=1j<1n结束第二个for循环,执行printf(“*\n”);

I=2I<=3yj=0j<2yprintf(”%d”,2);

j=1j<2yprintf(”%d”,2);

j=2j<2n结束第二个for循环,执行printf(“*\n”);

I=3I<=3yj=0j<3yprintf(”%d”,3);

j=1j<3yprintf(”%d”,3);

j=2j<3yprintf(”%d”,3);

j=3j<3n结束第二个for循环,执行printf(“*\n”);

I=3I<=3n结束外层循环。

所以结果是:

*

1*

22*

333*

四)break和continue的用法

例题:

1.有以下程序

#include

voidmain()

{inta=1,b;

for(b=1;b<=10;b++)

{if(a

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

当前位置:首页 > 总结汇报 > 学习总结

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

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