C语言习题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言习题相关的知识,希望对你有一定的参考价值。

执行下段程序后,a的值为
A=1;b=0;
If((a++>b++)?a++:b--)a += b;
A.2 B.3 C.4 D.5

答案为A
请给详解,另外问一点,if内是怎么判断真假的

定义:int x,y;语句:if(x<0)y=-1;else if (!x)y=0;else y=1; 等价于
A. y=o;if(x>=0) if(x) y=1; else y=-1;
B. if(x!=0) if(x>0) y=1;else y=-1; else y=0;
C. if(x<0)y=-1;if(x!=0) y=1;else y=0;
D. y=-1;if(x!=0) if (x>0) y=1; else y=0;

答案为B,请给详解。

第1题:if内的条件语句为(a++>b++)?a++:b--其运算是是个三元运算符? :这个运算符的原理是a>b?c:d如果a>b成立则把c的值作为整个表达式的值,反之则把d的值作为整个表达式的值。因为a++>b++的结果为真,反以最后把a++的值作为整个表达式的值,这时a的值为2,在C中,非0的数都表示真,因此执行if语句后面的语句,a+=b结果为a=a+b=2+0=2

第2题
if(x<0)y=-1; else if (!x)y=0; else y=1;
中文的意思是,如果x小于0则y=-1,否则,如果!x的值为非0,则y=0, 否则y=1。执行的顺序是,如果if的条件成立,则执行if后的语句,不再执行后面的else if和else后面的语句。如果第1个if的条件不成立,则判断else if中的语句,如果条件成立,则执行else if后面的语句,不再执行后面的一系列else if条件判断与else语句。如果不成立,则执行最后的else后的语句。

因此如果x<0,则只会执行y=-1,不会执行后面的语句,意思是说,如果x>=0则会执行else if(!x),当然这一句又排除了非0的x的结果,也就是在x=0时才会使y=0。
else是以上两个if中的条件都不成立时才会执行的语句,也就是说在x<0与!x都为假时才会执行else后的语句,终合后的结果是x>=0且x>0且x<0才会执行else后的语句,结果就只有x>0时,才会执行y=1,
那么整个表达式的值就是当x<0时y=-1,当x=0时y=0,当x>0时y=1。你只要找到与这个等价的if语句就行了。

对答案B的解释
if(x!=0) if(x>0) y=1; else y=-1; else y=0;
首先判断出两个条件x!=0且x>0都成立时才执行后面的语句,综合后的结果是x>0也就是只有x>0时才执行y=1,与题设相符。
else的皮配原则是,皮配与else最近的一个if语句,因此第一个else与第2个if皮配,也就是说首先要使if(x!=0)的条件成立,并使if(x>0)的条件不成立,那会执行这个else后的语句,也就是x!=0要为真,而x>0要为假,结果是x!=0且x<=0时才执行这个else,结果就是x<0时才执行else后的y=-1,这也与题设相符。
最后一个else,表示的是当以上两个条件都不成立时才会执行这个else,也就是x<0与x>0都不成立时才会执行,也就是x=0时才会执行y=0,结果与题设相符。
这里要注意,最后一个else并未与第一个if相皮配,而是与if(x!=0)if(x>0)..else三个条件综合后的结果,这与使用大括号时不一样。也就是说如果是这样的话if(x!=0)if(x>0)...else...else...是不相同的,这里的最后一个else才是与第1个if相皮配的,只要x!=0为假就会执行最后一个else中的语句。
参考技术A 一:语句if((a++>b++)?a++:b--)a += b;的执行如下:
1.判断(a++>b++)
A、实际上是先判断a>b,true;
B、然后执行a++,b++;
C、a=2,b=1;
2.执行三目表达式((a++>b++)?a++:b--)
A、由于(a++>b++)为true,故只执行a++:b--中的a++操作
B、a=3,b=1;
3.判断if((a++>b++)?a++:b--)
A、实际是判断a的值
B、a==3,true
4、由于((a++>b++)?a++:b--)==true,执行a+=b,a=4;
结论:答案应该是C,选A的可能只有两个:
1、答案错
2、用了某个不符合基本C/C++规范的奇特编译器
二:首先要明白if(x<0)y=-1;else if (!x)y=0;else y=1;到底是要做什么。这个语句很简单,就是说
当x<0时,使y=-1,即:if(x<0)y=-1;
当x不小于0时,如果x==0(等价于!x),那么令y=0,即:else if (!x)y=0;
如果x既不小于0也不等于0(也就是x>0的情况),那么令y=1,即:else y=1;
这样分析以后,显然只有B的执行结果跟原语句一样

C 语言 习题 1-12

练习 1-12 编写一个程序,以每行一个单词的形式打印其输入。

 1 #include <stdio.h>
 2 
 3 #define IN 1
 4 #define OUT 0
 5 
 6 int main(int argc, char const *argv[])
 7 {
 8     int c, state;
 9 
10     state = OUT;
11 
12     while ((c = getchar()) != EOF) {
13         if (c == \n || c ==   || c == \t) {
14             if (state == IN) {
15                 putchar(\n);
16                 state = OUT;
17             }
18         }
19         else if (state == OUT) {
20             state = IN;
21             putchar(c);
22         }
23         else
24             putchar(c);
25     }
26 
27     return 0;
28 }

 

以上是关于C语言习题的主要内容,如果未能解决你的问题,请参考以下文章

计算机二级C语言公共基础知识,以及习题总结查找和排序

2020夏C语言复习题

推荐 3 个学习C语言算法与习题的平台

最详细数据结构(C语言版 第2版)课后习题答案全集 严蔚敏 等 编著

C语言第一章《程序设计概要》习题

C语言习题练习4