C语言习题集100题+Word下载.docx

上传人:b****3 文档编号:6537103 上传时间:2023-05-06 格式:DOCX 页数:29 大小:26.64KB
下载 相关 举报
C语言习题集100题+Word下载.docx_第1页
第1页 / 共29页
C语言习题集100题+Word下载.docx_第2页
第2页 / 共29页
C语言习题集100题+Word下载.docx_第3页
第3页 / 共29页
C语言习题集100题+Word下载.docx_第4页
第4页 / 共29页
C语言习题集100题+Word下载.docx_第5页
第5页 / 共29页
C语言习题集100题+Word下载.docx_第6页
第6页 / 共29页
C语言习题集100题+Word下载.docx_第7页
第7页 / 共29页
C语言习题集100题+Word下载.docx_第8页
第8页 / 共29页
C语言习题集100题+Word下载.docx_第9页
第9页 / 共29页
C语言习题集100题+Word下载.docx_第10页
第10页 / 共29页
C语言习题集100题+Word下载.docx_第11页
第11页 / 共29页
C语言习题集100题+Word下载.docx_第12页
第12页 / 共29页
C语言习题集100题+Word下载.docx_第13页
第13页 / 共29页
C语言习题集100题+Word下载.docx_第14页
第14页 / 共29页
C语言习题集100题+Word下载.docx_第15页
第15页 / 共29页
C语言习题集100题+Word下载.docx_第16页
第16页 / 共29页
C语言习题集100题+Word下载.docx_第17页
第17页 / 共29页
C语言习题集100题+Word下载.docx_第18页
第18页 / 共29页
C语言习题集100题+Word下载.docx_第19页
第19页 / 共29页
C语言习题集100题+Word下载.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言习题集100题+Word下载.docx

《C语言习题集100题+Word下载.docx》由会员分享,可在线阅读,更多相关《C语言习题集100题+Word下载.docx(29页珍藏版)》请在冰点文库上搜索。

C语言习题集100题+Word下载.docx

unsignedint

0~

即0~(232-1)

 

3.signedchari=0;

此时i为?

答案:

-1

参考表1

signedchar数据范围从-128~127。

当i=0,i自减1,不会发生溢出。

因此,i=0-1=-1

4.inti;

for(i=0;

i<

100;

i--);

循环次数为?

100

5.inti;

i++);

循环结束后,i=?

int的范围为-21亿~+21亿

因此,i在0~100的范围内的自增1操作,不会发生溢出。

循环次数计算考虑i的值的变化,i从0变到99,都满足i<

100循环执行条件。

当i=99+1的时候,条件被打破,循环推出。

因此,循环推出后i=100

如果没有溢出,则通过以下公式计算

for(i=start;

end;

i++)

循环次数为(end-1)-start+1=end-start(使用等比数列公式:

项数=(an-a0)/delta+1

循环结束后i=end

=end;

循环次数为end-start+1

循环结束后i=end+1

6.unsignedshorti;

40000;

A.40000B.无穷大

选A

unsignedshort范围为0~65535,

该循环不会溢出。

等差数列公式

an=a0+(n-1)*delta

n为项数,也就是循环次数

an=39999,a0=0

delta=1

循环次数=(an-a0)/detla+1=(39999-0)/1+1=40000

7.signedshorti;

A.40000B.无穷大

答案为B

参见表1

signedshort数据范围从-32768~32767

循环会溢出

当i=32767的时候,i++使得i溢出到-32768,因此,i永远不可能达到40000。

该循环为死循环。

8.floati;

for(i=0.0F;

.0F;

i+=1.0F);

循环次数为A.B.无穷大,答案A

9.floati;

循环次数为A.B.无穷大,答案B

表2

比特数

(字节数)

有效数字

单精度

float

32(4)

7

10-38~1038

双精度

double

64(8)

16

10-308~10308

float有效位数为7,当i=的时候,执行i++

+1

----------------------------

1加在第6位有效数字上,在7位以内,则不会出现精度不够的情况。

如果是i=.0F,同样执行i+=1.0F

1是加到第9位有效数字上的,会出现精度不够的情况。

具体表现为x+deltax==x

也就是i+=1.0F将不再使i能够继续增大

此时,i永远不会达到.0F,循环成为死循环。

10.printf函数中,%lf对应哪种数据类型?

%lfdouble

%ffloat

%dint

%ldlong

%cchar

%schars[]

%x整数以十六进制显示(小写的abcdef)

%X整数以十六进制显示(大写的ABCDEF)

%uunsignedint

%o整数以八进制显示

11.a的ASCII码是?

97

12.A的ASCII码是?

65

13.0的ASCII码是?

48

14.\n的ASCII码是?

10

15.chars[]="

123"

;

strlen(s)的值为?

3

strlen是string.h中声明的库函数,用于显示字符串中除’\0’以外的字符个数。

16.chars[]="

sizeof(s)的值为?

sizeof是关键字,用于显示变量或数据类型的字节数。

inta;

sizeof(a)为4

sizeof(int)为4

chars[]="

sizeof(s)的值为数组元素个数*每个元素的字节数=4*1=4

这里数组元素个数应包含末尾的’\0’

17.提前退出循环的关键字是?

break;

inti;

10;

{

if(i==5)

break;

printf(“%d,”,i);

}

屏幕输出为0,1,2,3,4,

18.提前结束本次循环的关键字是?

continue;

continue;

屏幕输出为0,1,2,3,4,6,7,8,9,

19.有一个关键字可以构造出while循环,该关键字是?

答案可以是goto,也可以是for

以下三个循环的作用是一样的,

都是在屏幕上输出0,1,2,3,4,5,6,7,8,9,

i=0;

while(i<

10)

i++;

LOOP:

if(i<

{

gotoLOOP;

20.请用宏定义给unsignedint一个别名UINT

#defineUINTunsignedint

21.请用typedef给unsignedint一个别名uint

typedefunsignedintUINT;

注意typedef后面有;

而且两者在别名和原名的顺序上是相反的。

22.如果要用到printf,需要include哪个头文件?

23.如果需要用到sqrt,需要include哪个头文件?

printf,scanf,getchar,putchar使用之前都得#include<

stdio.h>

sqrt,sin,cos使用之前都得#include<

math.h>

strlen使用之前都得#include<

string.h>

24.0x22转化为十进制为___34

0x22=2*161+2*160=34

25.22转化为十六进制

22/16=122%16=6

1/16=01%16=1

22转化为16进制为0x16

222转化为16进制

222/16=13222%16=14

13/16=013%16=13

14转化为十六进制为E

13转化为十六进制为D

222转化为16进制为0xDE

26.22转化为二进制数为______(前面的0不要省略,总共写出8位数字)

思路:

先转化为16进制,再由16进制转化为2进制。

22转化为16进制为0x16,0x16转化为二进制为

0x22转化为二进制为_____(前面的0不要省略,总共写出8位数字)

0x22转化为二进制为

对于十六进制到二进制的转化

可以现先在草稿纸上写出如下表格,然后查表

表3

十进制

5

6

十六进制

二进制

0000

0001

0010

0011

0100

0101

0110

0111

8

9

10

11

12

13

14

15

A

B

C

D

E

F

1000

1001

1010

1011

1100

1101

1110

1111

27.0x22转化为二进制为____(前面的0不要省略,总共写出8位数字)

直接查表

0x22=

28.int的上限为多少亿?

(写出数字即可,不要带单位)

int范围-21亿~21亿,见表1

29.编译程序程序总共有四部,第一步是?

A.预处理B.链接

编译程序程序总共有四部:

预处理-》编译-》汇编-》链接

30.预处理指令前通常有什么符号?

#

#define

#include

#ifdef

#endif

31.void是否为合法的变量名?

(填T或F)F

32._123是否是合法的变量名?

(填T或F)T

合法变量名以下划线_和字母开头,中间可以有数字。

不能用关键字。

void为关键字,不能作为合法变量名。

但是Void可以,因为C语言区分大小写

33.chara[]该数组的定义是否正确?

sizeof(a)=*sizeof(a[0])=<

1024*1024=1MBytes

因此在运行的时候,不会发生栈溢出错误。

34.inta[]该数组的定义是否正确?

sizeof(a)=*sizeof(a[0])=*4>

编译的时候不会报错,运行的时候,会报栈溢出错误。

提示,定义函数中的数组有字节限制,最大不能超过1MBytes

35.inta[3];

请问sizeof(a)=?

sizeof(a)=sizeof(a[0])*3=4*3=12

36.inta[3][4];

sizeof(a)=sizeof(a[0][0])*(3*4)=4*12=48

37.inta[3];

请问最后一个元素为?

(填写a[x])

inta[N];

a数组中最后一个元素为a[N-1]

第一个元素为a[0]

38.inta[3][4];

(填写a[x][y])

inta[M][N];

a的最后一个元素为a[M-1][N-1]

a的第一个元素为a[0][0]

39.定义在函数体外的变量称之为全局变量。

(填写T或F)T

40.局部变量只能在定义该变量的函数内使用。

(填写是或否)T

#include<

inti=10;

//i为全局变量

voidprint()

printf(“i=%d”,i);

//正确,全局变量可以被定义在它下面的所有函数引用,这里包括print和main//都可以使用i

printf(“j=%d”,j);

//正确,局部变量只能在定义它的函数内使用,这里j只能在main中使用

intmain()

intj=5;

//j为定义在main中的局部变量,只能在main中使用

//正确,局部变量只能在定义它的函数内使用

41.charc='

\123'

%c\n"

c);

打印输出为_____

‘\123’这是八进制,先转化成10进制

1238=1*82+2*81+3*80=64+16+3=83

因65为A的ASCII码,可以推出83为S

42.intb=3;

inta=(b<

2?

0:

1);

printf("

%d\n"

a);

为三目运算符

表达式1?

表达式2:

表达式3

如果表达式1为真,这返回表达式2的值,否者返回表达式3的值。

b<

2的值为假,所以需要返回表达式3也就是1

因此a=1

43.intb=3;

inta=(b=2?

因为=的优先级,小于三目运算符,所以先看?

前面的常量表达式2,

表达式的值就是2

2不等于0,?

前面的表达式为真。

因此a=表达式2的值=0

44.unsignedchari=0xFF;

i&

=~(unsignedchar)(1<

<

5);

求i(答案以0x开头)

整数常量在C语言中,默认是int型的,因此1在内存中总共占用4字节,32位

00000000000000000000000000000001

1<

5表示1左移5位,后面补0

00000000000000000000000000100000

(unsignedchar)(1<

5)将32位转化为8位

00100000

~((unsignedchar)(1<

5))是按位取反操作

11011111

i+=1i=i+1

i&

=~((unsignedchar)(1<

5))也就是i&

=11011111,

等价于i=i&

=11111111&

11011111=11011111=0xDF

&

为按位与操作,有0为0,全1才为1

45.unsignedchari=0x11;

i|=(unsignedchar)(1<

5)=001000002

|为按位或操作,有1为1,全0才为0

i=0x11=

5)也就是i|=001000002

等价于i=i|001000002=|001000002=0011=0x31

四位二进制数可以转化为一位十六进制数,从低位(右边)向左数位数,四位一组,不足四位的可以补0.

46.写出与printf相对应的输入函数的名称为scanf

printf用于格式输出,scanf用于格式输入

47.写出读取一个字符的输入函数的名称

putchar用于向屏幕输出一个字符

与putchar相对应的输入函数为getchar,getchar用于从键盘输入读取一个字符

48.inti=1,j=2;

if(i==1||j++)i++;

请问j=?

if后的i++时候执行取决于表达式i==1||j++是否为真

因为||为逻辑或操作,有真为真,全假才为假

因此,对于表达式1||表达式2,如果表达式1为真,则无论表达式2的取值,整个表达式都为真。

因此,计算机在这种情况下,会跳过表达式2的计算。

i==1成立,因此i==1||j++必定为真,因此计算机跳过j++的计算,直接计算if后的语句i++。

因此,j++不会被执行。

j=2

49.inti=1,j=2;

if(i==1&

j++)i++;

为逻辑与操作,有假为假,全真才为真

对于表达式1&

表达式2,如果表达式1为假,则无论表达式2的取值如何,整个表达式都为假。

因此,这种情况下,计算机会跳过表达式2。

i==1成立,因此系统将计算表达式2也就是j++的值,j++将被执行,j=3

50.inti=0,j=2;

i==1不成立,因此系统跳过计算表达式2,j++将不被执行,j=2

51.#defineMAX(a,b)((a)>

(b)?

(a):

(b)),给a,b加括号是为了避免_____问题(三个字)优先级

如果不使用小括号,#defineMAX(a,b)a>

b?

a:

b

inta=1,b=2,c=3;

intd;

d=MAX(MAX(a,b),c);

//求a,b,c三个数的最大值

等价于d=MAX(a,b)>

c?

MAX(a,b):

c=a>

b>

a>

b:

c;

很可能会出现优先级问题。

52.intn=5;

inta[n];

该数组定义是否正确?

(T或F)F

数组定义时候,[]中应为整形常量表达式。

53.数组名右边的方括号中必须为常量表达式?

inta[5]={1,2,3,4,5};

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

//这里的4是常量表达式

反例:

引用数组——整形

inti=4;

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

//这里i是变量

54.floati;

for(i=.0F;

是一个死循环,如要改错,可修改i为____型(英文)double

因为double精度为15,所以,可避免精度不够的情况。

(见题8和9,表2)

55.#defineDIM(a)sizeof(a)/sizeof(a[0]),该宏定义用于求数组的___A.元素个数B.数组字节数

sizeof(a)为整个数组所有元素的字节数之和,sizeof(a[0])为第一个元素的字节数,由于对于一个数组,其中每一元素的类型和字节数都相等,因此,sizeof(a[0])又表示数组a中每个元素的字节数。

DIM(a)=sizeof(a)/sizeof(a[0])=所有元素的总字节数/单个元素字节数=元素个数

56.switch-case语句中,每个case通常都搭配关键字_______

break

57.所有的ifelse语句都可以用switch-case语句表示?

(T或F)

以下switchcase语句将1,2,3,分别映射成5,7,12

intx=1;

inty;

switch(x)

case1:

y=5;

case2:

y=7;

case3:

y=12;

对应的ifelse语句是

if(x==1)

y=5;

elseif(x==2)

y=7;

elseif(x==3)

y=12;

如果需要将(1.54,2.32),(2.4567,3.5498)映射成1,2,则只能用ifelse实现

doublex,y;

if(x>

1.54&

x<

2.32)

y=1;

elseif(x>

2.4567&

3.5498)

y=2;

switchcase适用于点对点映射,ifelse既可以实线点对点映射,也可以将某区间映射到点。

58.最大的float型数的数量级是____38

查表2

59.冒泡法用于____(答案为两个字)

排序

60.编译器在编译过程中可以检查源代码的哪一类错误?

A.功能错误B.语法错误

编译器只能检查出语法错误,比如没有加分号,使用了没有定义的变量名等等。

61.如果源码中有一个死循环,那么能否通过顺利编译?

死循环不属于语法错误,所以编译器是检测不到的,可以顺利通过编译。

62.升序指的是由小到大?

升序是由小到大,降序是由大到小

63.C程序的每行中只能写一条语句?

每行可以写多条语句。

比如以下情况是允许的

inti=0;

i++;

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

64.简单变量做实参时,数据传递方式是由实参传给形参,再由形参传回给实参?

简单变量是指的除去数组和指针的情况。

intadd(inta,intb)//a,b为形式参数

这里隐含了a=1,b=2

相当于实参被隐含传递给了形参

returna+b;

intc;

c=add(1,2);

//1,2为实际参数

65.stdlib.h中有个库函数可以用于排序,函数名为____

qsort——快速排序函数

66.如果头文件是位于工程目录下,#include后面用哪种方式A.<

>

B."

"

C.A和B均可——B

67.如果头文件位于编译器安装目录下,#include后面用哪种方式A.<

C.A和B均可——C

告诉编译器,*.h文件位于编译器目录下。

“”告诉编译器,*.h文件位于工程目录或编译器目录下。

采用这种方式的时候,编译器会先搜索工程目录有没有*.h文件,如果没有才回去编译器目录下找。

因此,对于编译器自带的*.h文件,比如stdio.h,位于编译器目录下,

两种方式都是可以的。

不过,采用<

会加快编译速度,因为编译器不会去工程目录搜索*.h

而对于自己定义.h文件通常都位于工程目录下,所以只能采用””方式

68.已知main函数中有如下语句inta;

a=5;

intb=6;

试问在C编译器能否编译通过?

不能通过。

因为声明变量语句中间,不能插入其它语句。

可以改为

inta=5;

69.如果函数定义在main函数的后面,一般会在main前面添加函数的A.函数体B.函数声明

函数体就是指的函数定义中的花括号部分。

intadd(inta,intb);

//因为函数定于main函数之后,所以必须在main前面先声明,否则编译器会报错。

}

intadd(inta,intb)//这里为函数定义,申明和定义的区别在于是否有函数体,也就是花括号部分

70.头文件中,通常是存放A.函数声明B.函数体

大家可以自己打开编译器目录下的stdio.h文件

71.逗号表达式的值等于最后那个逗号后的表达式的值?

(1,2,3)的值为3

72.inta=7,b=4;

a&

b=?

为逻辑与,有假为假,全真才为真

a=7,不为0,就是真(作为输入的时候,非0为真,作为结果的时候,1为真)

b=4,也是真

因此真&

真=真

C语言中1表示真,0表示假

所以,结果为1

73.inta=7,b=4;

a&

为按位与,有0为0,全1才为1

将7和4化为二进制,分别是0111和0

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

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2