有3到C语言程序设计题目不懂,帮帮忙解释一下。。谢谢!!

1,以下程序段的输出结果是:(选B,为什么?)
for(i=4;i>1;i++)
for(j=1;j<i;j++)
putchar('#')
A # B ##### C ## D ###
2,若给定条件表达式(M)?(a++):(a--),则其中表达式M:(选C,为什么?)
A和(M==0)等价 B和(M==1)等价 C和(M!=0)等价 D和(M!=1)等价
在执行胰腺癌程序段时,不能出现的运行结果是:(选C,为什么?解释一下D什么情况出现)
int x;
scanf("%d",&x);
if(x>250) putchar('X');
if(x<250) putchar('Y');
else putchar('X');
A显示X B显示Y C显示XY D显示XX
第一个问题是我打错了.
for(i=4;i>1;i--)
for(j=1;j<i;j++)
putchar('#')
最后选B,就是输出5个#,为什么??解释一下,谢谢!!

1、我估计这题要么是本身有毛病,要么就是你不小心写错了,你再核对一下。
for(i=4;i>1;i++)
for(j=1;j<i;j++)
putchar('#')
这个程序是个死循环,因为外层循环中i>1这个循环终止条件是终止不了程
序的.或者将其改为以下程序就可以了:
for(i=4;i>1;i--)
for(j=1;j<i;j++)
putchar('#')
如果是for循环的嵌套使用不清楚的话,我想最好还是好好看看课本。在此
我强烈推荐你看的书是十分通俗易懂的《C程序设计》(清华大学出版社谭
浩强著)
2、 如果是问号表达式的用法自己不清楚的话,还是好好看看书吧,书上讲的
更严谨些。我觉得你的问题应该不是在问号表达式本身,而是一个很小的
细节。
在说明这道题之前,现让你看两个小程序。
1、#include<stdio.h>
int main()
{
int a;
printf("Please enter the value of a:\n");
scanf("%d",&a);
if(a) printf("Yes!\n");
else printf("No!\n");
}
这个程序的功能是判断输入的数字是否为非零数。如果是,则输出Yes
否则,输出No。
这个程序看得懂吗?
如果不懂,我更改一个地方,你看看怎么样。
if(a) printf("Yes!\n");
改为:
if(a!=0) printf("Yes!\n");
其实改前改后,结果是一样的!应为在C语言中,非零值即为真,零为假
程序中if语句判断的时候a的值如果是非零值,则执行相应的操作。也
可以认为a是a!=0的简写形式。
选C你应该是理解了吧
3、 还是像前两题一样,知识点自己看书。我只在此说明一些可能出现的
细节上的问题:
下面的代码是题目中的代码:
int x;
scanf("%d",&x);
if(x>250) putchar('X');
if(x<250) putchar('Y');
else putchar('X');
将上面的程序和下面的做一对比:
int x;
scanf("%d",&x);
if(x>250) putchar('X');
else if(x<250) putchar('Y');
else putchar('X');
有没有发现不同???
在第二个程序中多了一个else!
在第一个程序中,“if(x>250) putchar('X');”是一个“独立的”
if语句,“if(x<250) putchar('Y');else putchar('X');”在
一起是一个“独立的”if语句。
在第二个程序中,
“if(x>250) putchar('X');
else if(x<250) putchar('Y');
else putchar('X');”在一起作为一个整体是一个if语句。
--------------------------------------------------
下面分别说明两个程序的执行结果:
输入值设为x
程序一:
输入 相应输出
251 ------> XX
250 ------> X
249 ------> Y
* * * * * * * * * * * * * *
程序二:
输入 相应输出
251 ------> X
250 ------> X
249 ------> Y

学习C语言,上机操作很重要的,不要只看书,硬记语法,只有多上机多实践才能学好!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-08
你第一个好像错了 for(i=4;i>1;i++)是无限循环 应该是i--
第一个 第一次循环i=4 内层j循环在j=1 =2 =3时输出###
第二次i=3 内层j循环在j=1 =2 时输出##
第二次i=2 内层j循环在j=1 时输出#
第二次i=2 内层j循环不输出
第二个

第三个 当x=250 时输出X在第二个if里
当x>250 时输出XX
当x<250 时输出Y
第2个回答  2010-09-08
1.i++改成i--,不然就是无限循环了
main()
{
int i,j;
for(i=4;i>1;i--)
for(j=1;j<i;j++)
putchar('#');
printf("\n");
}

2.
M = 0 时。 m ? (a++) :(a--) 条件为:false,返回 a--
M != 0 时。 m ? (a++) :(a--) 条件为:true,返回 a++

条件 (M != 0) ,
M==0时, M!=0 为 false;
M!=0时, M!=0 为 true;
所以 M 与 M != 0 等价

3.同时显示XY 的条件永远不可能出现,即没有一个整数即大于250又小于250.
D 出现为输入大于250的数。即输入 >=251 时。就出现XX
第3个回答  2010-09-08
1 。无限循环 哪个都不对。 要不是你程序打错了,要不就是题有问题。
2. 选择C 正确。分析如下:
M = 0 时。 m ? (a++) :(a--) 条件为:false,返回 a--
M != 0 时。m ? (a++) :(a--) 条件为:true,返回 a++
这个不用多说了吧。
条件 (M != 0) ,
M=0 时 , M!=0 为 false;
M!=0时, M!=0 为 true;
所以 M 与 M != 0 等价
3.同时显示XY 的条件永远不可能出现,即没有一个整数即大于250又小于250.
D 出现为输入大于250的数。即输入 >=251 时。就出现XX
相似回答