两个关于C语言的问题

问题1:当a=1,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为
if(a>c)
b=a;a=c;c=b;
问题2:若变量已正确定义,以下语句段的输出结果是:
x=0;y=2;z=3;
switch(x)
{ case 0: switch (y=2)
{ case 1 : printf("*");break;
case 2 : printf("%");break;
}
case 1:switch (z)
{ case 1: printf ("$");
case 2: printf("*");break;
default : printf ("#");
}
}

求答案和思路。第一个题我完全不懂。第二个题我的思路是,x等于0,所以执行第一个case 0 ,这里面switch(y=2)所以执行里面的case 2,所以得出%,但答案为何是*#。我不明白,求助大神了!

第一题:应该这样看

if(a>c)
    b=a;
a=c;
c=b;

如果你明白可追问


第二题:

首先,在  switch(x) {} 中,case 0与case 1之间没有break;所以执行完case 0后面的内容后还会执行case 1后面的内容,这就是为什么会输出    #,因为执行了default : printf ("#");

其次,* 这个是得不到的,除非把switch (y=2)改成switch (y==2)才能得到printf("*");

最后,你觉得应该得出%,其实即使满足条件,执行了printf("%");也是得不到%,因为%和\一样,具有转义的作用,要想打印%,应该是printf("%%");

追问

为何y==2了的话就能得出printf("*")?是不是代表着这句话是真,所以是1.

追答

没错,结果为“真”用数字1表示,为“假”用数字0表示。你可以写两句代码验证一下:

int a=2;
printf("%d\n",a==2);
printf("%d\n",a==3);

用数字1和0不是绝对的,不同的编译器会用不同的值来表示真和假,但在这里是这样的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-22
if(a>c)因为a不大于c所以if后的语句b=a;不执行。由于if之后没有大括号,所以只有b=a;这一条语句归if管,后两条语句a=c;和c=b;不受if影响。所以最后的结果是a=3,c=2,b依然为原值2。

case 2,所以得出%,但是并没有退出外面的SWITCH语句,所以继续执行case 1:
Z=3;所以输出了#;所以答案为*#
第2个回答  2014-01-22
问题1:if(a>c)因为a不大于c所以if后的语句b=a;不执行。由于if之后没有大括号,所以只有b=a;这一条语句归if管,后两条语句a=c;和c=b;不受if影响。所以最后的结果是a=3,c=2,b依然为原值2。
源程序相当于if(a>c)
{
b=a;
}
a=c;
c=b;
问题2:输出结果为:*#因为switch(x),其中x=0,跳到case0,执行switch(y=2),因为y=2是正确的,所以switch括号内为1(另外是switch(y==2)吧,表判断),所以执行case 1,输出’*‘,break跳出当前switch语句到switch(z)处,z=3,执行default输出‘#’
第3个回答  2014-01-22
问题1:当a=1,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为
if(a>c)
b=a;a=c;c=b;
选择不成立,直接进行;a=c;c=b;然后就是 a=3 c=2 b=b=2
后面的
switch(y=2)里面的y=2是一个赋值语句,因此其实y=2这个式子所代表的意思是 1.因此进行到下面的case1.而后在跳出到下面一个case1;因为前面的break 只用来跳出switch (y=2) 并没有跳出switch(x),因此会继续下面的case1.如果
x=0;y=2;z=3;
switch(x)
{ case 0: switch (y=2)
{ case 1 : printf("*");break;
case 2 : printf("%");break;
}
break;
case 1:switch (z)
{ case 1: printf ("$");
case 2: printf("*");break;
default : printf ("#");
}
}
如果这样。 则会输出*
如果讲y=2 改成y==2 则还是输出*
第4个回答  2014-01-22
问题一:
if (a > c) {
b = a;

}
a = c;
c = b;
这样就清晰多了,答案是a=3,b=2,c=2
问题二:switch(x)中case 0执行完没有break所以会继续进入case 1执行default,还有printf("%")中%后面没有匹配的东西所以打印不出任何东西的,可以改一下printf("%%")就可以看到%了
第5个回答  2014-01-22
这个问题很有想象力啊,强烈建议先思考一个小时,然后编写代码运行一下子;
谢谢

两个关于C语言的问题。
1、在x=3的状态下进入do循环,第一次运行printf语句,首先使 x -= 2 ,x的内容减掉2,输出x的当前值,所以输出了1。接着进行循环条件判断,先进行 --运算,使x的内容变为0,!0的计算结果为真,循环继续进行。第二次运行printf首先 x-=2 即 x = 0-2,使x的内容变为-2,并被输出。当x...

关于C语言的两个问题
2.(B)*p.num 不正确,因为 . 的优先级更高,*p.num 会被解析为 *(p.num),而 p 是结构指针,应该用 (*p).num 来访问结构成员。

呵呵,问二个c语言的问题。
如果y是2 那么结果就是 x的平方,如果y是0.5 那么结果就是 x的平方根,如果y是1\/3 那么结果就是 x的立方根。参考百度百科 数组的sizeof 数组的sizeof值等于数组所占用的内存字节数,如:char a1[] = "abc";int a2[3];sizeof( a1 ); \/\/ 结果为4,字符 末尾还存在一个NULL终...

两个关于C语言的问题
第一题:应该这样看 if(a>c) b=a;a=c;c=b;如果你明白可追问 第二题:首先,在 switch(x) {} 中,case 0与case 1之间没有break;所以执行完case 0后面的内容后还会执行case 1后面的内容,这就是为什么会输出 #,因为执行了default : printf ("#");其次,* 这个是得不到的,除...

关于数据结构(C语言版)的两个问题
如果为右括号`)`,则检查`stack`是否为空,如果不为空则弹出栈顶元素,将`top`减一。在遍历结束后,检查`stack`是否为空。如果为空,表示所有括号均匹配,返回1;否则表示存在未匹配的括号,返回0。通过上述程序,可以实现对给定字符串中括号匹配性的判断,对于数据结构(C语言版)中的括号匹配问题,...

亲,关于C语言的两个问题,100分悬赏!!!
bccn.net\/thread-316069-1-1.html 第二个问题:对于十六位机器而言,如果是int型,则c是-32768。最高位为符号位。d=32767 说明:32767十六进制0x7fff这是十六位表示的最大有符号正数了 32768十六进制0x8000符号位是1,自然就是负数了 正数和负数换算就是二进制位按位取反再+1 d的解答类似 ...

有关c语言的两道问题
第6题 以下关于数组的描述正确的是 本题2分 C、数组大小固定,所有元素的类型必须相同 第7题 设有变量int x=0,y=1,z=1,则运行表达式:x=y++>z--后,x,y,z的值分别是 本题2分 D、0,2,0

c语言常见问题有哪些?
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:if (a==3)a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“a=...

c语言的几个问题
1:字母只读一个,而数字可以很多个一起读。(我汗,以前都没注意着,C的题目越出越细了)2.空格也是字母的一种如果是10 20 AB,那么10 20 读的没错,但c1=‘_’,c2='A'。先读空格(补充下1的回答)3:那个逗号有,你输数据的时候也要相应的有逗号,D里z是double型,应该用%lf;4:长度...

c语言常见问题有哪些
忽略了大小写字母的区别。2、忽略了变量的类型,进行了不合法的运算。3、将字符常量与字符串常量混淆。4、忽略了等号与双等号的区别。5、忘记加分号。6、输入变量时忘记加地址运算符。7、输入数据的方式与要求不符。8、输入字符的格式与要求不一致。9、输入输出的数据类型与所用格式说明符不一致。

相似回答