C语言习题集(100题)+ 下载本文

内容发布更新时间 : 2024/9/19 17:03:35星期一 下面是文章的全部内容请认真阅读。

1. i=2;printf(\打印出来的数字为? 答案:2

解:i++和++i均为自增表达式,执行完后,i都会加1,均会有i+=1,也就是i=2+1=3的效果。不过,两个表达式的值不同。i++表达式的值为自增1之前i的值。这里也就是2。++i为只增1之后的i的值,也就是3。 因此,i=2;printf(\打印出来的数字为2; i=2;printf(\打印出来的数字为3。

2. unsigned char i=0;i--;i为? 答案:255

unsigned char的为1个字节,数据范围从0~255。

i=0已经位于数据范围的下边界,如果再-1,会发生负溢出,溢出至255。 如果i=255,再加1,则会发生正溢出,溢出至0。

类似的情况参考下表

表1 类型说明符 数的范围 字节数 字符型 signed char 无符号 字符型 短整量 short[ int] 无符号 短整型 -128~127 即-27~(27-1) 0~255 即0~(28-1) -32768~32767 即-215~(215-1) 1 unsigned char 1 2 unsigned short 0~65535 即0~(216-1) 2 长整型 整型 long 或 int -~ 即-231~(231-1) 4 无符号长整型 无符号整型 unsigned long unsigned int 0~ 即0~(232-1) 4

3. signed char i=0;i--;此时i为? 答案:-1

解:参考表1

signed char数据范围从-128~127。 当i=0,i自减1,不会发生溢出。 因此,i=0-1=-1

4. int i;for(i=0;i<100;i--);循环次数为?100

5. int i;for(i=0;i<100;i++);循环结束后,i=?100

解:参考表1

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

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

循环次数计算考虑i的值的变化,i从0变到99,都满足i<100循环执行条件。 当i=99+1的时候,条件被打破,循环推出。 因此,循环推出后i=100

如果没有溢出,则通过以下公式计算 for(i=start;i

循环次数为(end-1)-start+1=end-start(使用等比数列公式:项数=(an-a0)/delta+1 循环结束后i=end

如果没有溢出,则通过以下公式计算 for(i=start;i<=end;i++) 循环次数为end-start+1 循环结束后i=end+1

6. unsigned short i;for(i=0;i<40000;i++);循环次数为?A.40000 B.无穷大 答案:选A 参考表1

unsigned short范围为0~65535, 该循环不会溢出。 等差数列公式 an=a0+(n-1)*delta

n为项数,也就是循环次数 an=39999,a0=0 delta=1

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

7. signed short i;for(i=0;i<40000;i++);循环次数为? A.40000 B.无穷大 答案为B

参见表1

signed short数据范围从-32768~32767 循环会溢出

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

8. float i;for(i=0.0F;i<.0F;i+=1.0F);循环次数为A. B.无穷大,答案A 9.float i;for(i=0.0F;i<.0F;i+=1.0F);循环次数为A. B.无穷大,答案B

表2 比特数 (字节数) 类型说明符 有效数字 数的范围 单精度 双精度 float double 32(4) 64(8) 7 16 10-38~1038 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对应哪种数据类型? %lf double %f float %d int %ld long %c char %s char s[]

%x 整数以十六进制显示(小写的abcdef) %X 整数以十六进制显示(大写的ABCDEF) %u unsigned int

%o 整数以八进制显示