三个C语言程序,求解答。

main(){intx=10,y=10,i;for(i=0;x>8;++i)printf("%d%d",x--,y);}这道题答案为101091.#include<std... main()
{
int x=10,y=10,i;
for(i=0;x>8;++i)
printf("%d %d",x- -,y);
}
这道题答案为10 10 9 1.

#include <stdio.h>
main()
{
int i;
for(i=1;i<=5;i++)
switch(i%5)
{
case 0:printf("* ",);break;
case 1:printf("#");break;
default:printf("\n");
case 2:printf("&");
}
}
第二题答案为:#&
&
&*

main()
{
int i,j,a=0;
for(i=0,i<2;i++)
{
for(j=0;j<=4;j++)
{
if(j%2) break;
a++;
}
a++;
}
printf("%\n",a);
}

这道题答案为 4

求各位大侠,能解决一道是一道啊。详细点。
展开
 我来答
FrankGaocy
2010-12-30 · TA获得超过778个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:123万
展开全部
main()
{
int x=10,y=10,i;
for(i=0;x>8;++i)
printf("%d %d",x- -,y);
}
这个题目主要考察 前后++,-- 运算符
看例子 a=i++ 和 a=++i 的区别:前一个叫做【后自加】运算,是指先把 i 的值赋给 a 以后,
再把 i 的值增加1。后一个叫做【前自加】运算符,是指先把 i 的值增加1,然后赋给a 。
(--运算符一样)。
所以第一次进入循环体输出 10 10 ,输出完了以后,x的值减少1,再进入第二次循环,
输出 9 10,输出完x的值再减少1(此时x=8),退出循环。
所以结果是 10 10 9 10
----------------------------------------------------------------------------------------------------------
#include <stdio.h>
main()
{
int i;
for(i=1;i<=5;i++)
switch(i%5)
{
case 0:printf("* ",);break;
case 1:printf("#");break;
default:printf("\n");
case 2:printf("&");
}
}
这个题比较恶心,switch在使用的时候不应该像题目中那样用(尽管在语法上是正确的)。
好了,下面我们还是先讲解一下switch的知识:
switch(表达式
{
case 值1:
case 值2:
……
default :
}
上面这个是它的标准形式,在判断表达式的值的时候,程序是这样的:
先判断【表达式的值】与【值1】是否相等,如果不等,就继续判断是否与【值2】相等,直到找到与某个【值k】相等,然后执行该【值k】后面的所有语句,注意是后面的所有语句,
包括【值k+1】,【值k+2】……等后面的语句,直到switch的末尾或者遇到break
才退出switch语句。另外注意,default也可以看成是一个值(有点特殊的值),它是不属于case后面的值的所有值,也就是说如果某个case后面的值与表达式的值相等了,default 就不成立了(虽然它一般在最后),如果没有任何一个case后面的值与表达式的值相等,则default就成立,也就是要从default后面的语句开始执行,同样要执行到switch的末尾或遇到break。
题目中:
i = 1时 ,输出#
i = 2时 ,输出&
i = 3时 ,输出\n和&
i = 4时 ,输出\n和&
i = 5时 ,输出*
退出循环。
------------------------------------------------------------------------------------------
main()
{
int i,j,a=0;
for(i=0,i<2;i++)
{
for(j=0;j<=4;j++)
{
if(j%2) break; // j%2非0(真)的时候 就break 退出内层循环,不然继续执行下面的语句。
a++;
}
a++;
}
printf("%\n",a);
}

首先判断外层循环执行了2遍(i=0和i=1),每一遍都有a++
第二,内层循环当j=0的时候 j%2 == 0 (假),所以break不执行,a++ ;
当j=1时,j%2 == 1(真),执行break,退出了内层循环。
所以内层循环只做了一次a++。
所以总共做了4次a++,结果a = 4。
陈宗权8d804
2010-12-30 · TA获得超过3766个赞
知道小有建树答主
回答量:1159
采纳率:0%
帮助的人:966万
展开全部
main()
{
int x=10,y=10,i;
for(i=0;x>8;++i)
printf("%d %d",x- -,y);
}
这道题答案为10 10 9 10.
循环,x是10时输出10 10并且x变成9,继续循环输出9 10并且x变成8,条件不满足,不再循环,程序结束。

#include <stdio.h>
main()
{
int i;
for(i=1;i<=5;i++)
switch(i%5)
{
case 0:printf("* ",);break;
case 1:printf("#");break;
default:printf("\n");
case 2:printf("&");
}
}
第二题答案为:#&
&
&*
i是1的时候输出#,i是2的时候输出&,i是3的时候进default输出换行,由于没有break,继续向后输出&,i是4的时候进default输出换行,由于没有break,继续向后输出&,i是5的时候进case 0输出*,循环结束,程序结束。

main()
{
int i,j,a=0;
for(i=0,i<2;i++)
{
for(j=0;j<=4;j++)
{
if(j%2) break;
a++;
}
a++;
}
printf("%\n",a);
}

这道题答案为 4
i是0的时候,j是0的时候j%2为假(0)不跳出所以执行内层的a++,a变成1,j是1的时候j%2为真(1)跳出内层for循环执行外层的a++,a变成2.
i是1的时候重复这个过程,j是0的时候j%2为假(0)不跳出所以执行内层的a++,a变成3,j是1的时候j%2为真(1)跳出内层for循环执行外层的a++,a变成4.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szlon
2010-12-30 · TA获得超过762个赞
知道小有建树答主
回答量:353
采纳率:66%
帮助的人:219万
展开全部
第1题要么结果写错了,要么代码写错了,这个代码的结果应该是10 10 9 10

第2题
循环会运行5次,i分别为1到5
前4次i%5 等于 i,第5次i%5 等于0
当i%5为3或4时,都执行default。而default一直会执行到break;或是结束为止,所以为default时,case 2的内容它也会执行,即每次default的输出字符为"\n&"
所以这5次的输出内容为"#&\n&\n&*",也就是你的结果的情况。

第3题
内循环中有
if(j%2)break;只要j%2!=0,该循环就会结束。
那么只有j == 0时,该循环执行了一次,而变为1时它就会结束。所以这个内循环中a++;只执行了一次。
外循环还额外执行了一次a++;所以外循环每循环一次,a++;被执行两次。a的值增加2
由i的变化易知外循环共执行了2次循环,所以a的值总增加4。最终a的值就是4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
畅景彰b5
2010-12-30 · TA获得超过4374个赞
知道小有建树答主
回答量:839
采纳率:0%
帮助的人:1278万
展开全部
1.这题的答案不是10 10 9 1,而是10 10 9 10呢,我用vc6运行过得到的答案
首先第一次是i=0,x=10的时候,因为x>8,所以执行输出语句printf,输出10 10,执行以后x的值减1,变成9,i最后执行i++
第二次是i=1,x=9的时候,就是第一次执行的结果,因为x>8所以执行输出语句printf,输出9 10,执行以后x的值再减1,变成8,i最后执行i++
第三次是i=2,x=8的时候,是第二次执行结果,因为x=8了,所以结束循环
所以最后输出10 10 9 10
2.首先你的程序就有问题,case 0:printf("* ",);应该是case 0:printf("* ");才对,你多了一个逗号
然后第一次执行for循环i=1,i%5也等于1,于是执行case 1:输出一个#
第二次执行for循环i=2,i%5等于2,于是执行case 2:输出一个&
第三次执行for循环i=3,i%5等于3,于是执行default输出一个回车,同时因为printf("\n");后面没有break语句,所以继续执行case 2的那句printf,所以再输出一个&
第四次执行for循环i=4,i%5等于4,也是执行default,同样会顺序执行case 2,所以输出一个回车加上一个&
第五次执行for循环i=5,i%5等于0,所以执行case 0输出一个*
所以最终输出
#&
&
&*
3.你程序又打错了,第一个地方是
for(i=0,i<2;i++)应该是for(i=0;i<2;i++)
还有printf("%\n",a);应该是printf("%d\n",a);
首先i=0的时候执行里面的循环:j=0的时候j%2等于0,所以不执行break而执行a++,a变成1,j=1的时候j%2等于1,所以执行break语句,结束了j循环,执行i循环的那个a++,a变成2
然后i=1的时候执行里面的循环:同理j=0的时候执行a++,a变成3,j=1的时候执行break,执行外面的那个a++,a变成4,
然后i变成2,不满足i<2所以结束循环退出
所以最后输出4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hujkyd
2010-12-30 · TA获得超过103个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:163万
展开全部
第一题的答案应该是10 10 9 10, 这里的x--的意思你可以这么理解 先返回x的值后再将x减1
第二题的答案分析:
i从1到5,所以这5次循环i%5的数值分别是1,2,3,4,0。然后分析switch语句,当i%5为3,4是没有对应的case语句,所以只能进入default,default访问后会向下访问case 2,因为default没有用到 break。所以输出结果就应该为#&\n&\n&*

第三题的答案分析:
第一点要明确的是break语句只会跳出最近的循环。
当内部循环j到1时就会执行break,跳出j循环,此时j循环只执行过一次a++,然后程序会继续执行i循环,所以一次i循环只会执行两次a++,一次在j循环,一次在i循环。然后i循环会执行两次,所以会有4吃a++.所以a为4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘雪烂漫

2010-12-30 · TA获得超过119个赞
知道小有建树答主
回答量:969
采纳率:100%
帮助的人:45.1万
展开全部
第二题:i=1,i对5求余得1 执行case1,case2得 #&,
再执行下去上面的
i=i++=2 i对5求余得2, default:printf("\n")换行 执行
case 2:printf("&")即输出&,
再执行下去上面的 i=i++=3,求余得3不符合,i=4同理不符合,
到i=5对5求余得0执行case 0:printf("* ",)
case 2:printf("&");输出*&
就知道这个一点 其他不知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式