| 查看: 2156 | 回复: 11 | |||
[求助]
c语言
|
|||
|
1、main() {int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d%d\n",i,j,k,); } 2、mian() {int y=10; while(y--);printf("y=%d\n",y); } 3、main() {int k=5,n=0; while(k>0) {switch(k) {default:break; case 1: n+=k; case 2: case 3:n+=k; }k--; }printf("%d\n",n); } 哪位大侠把这三个程序如何运行详细说明一下?????谢谢!!! |
» 猜你喜欢
导师想让我从独立一作变成了共一第一
已经有9人回复
博士读完未来一定会好吗
已经有23人回复
到新单位后,换了新的研究方向,没有团队,持续积累2区以上论文,能申请到面上吗
已经有11人回复
读博
已经有4人回复
JMPT 期刊投稿流程
已经有4人回复
心脉受损
已经有5人回复
Springer期刊投稿求助
已经有4人回复
小论文投稿
已经有3人回复
申请2026年博士
已经有6人回复
时飞: 回帖置顶 2012-03-24 08:08:29
|
1.#inculd main() {int x=8; for(;x>0;x--) {if(x%3) {printf("%d,',x--);continue;} printf("%d,",--x); } } 该程序如何运行?每一个怎么出来的? 答案8,5,4,2 先x=8,判断x%3=2,为真,输出8,然后x值减1为7,然后做for循环的判断再减1,x=6; 判断x%3=0,为假,然后做for循环的判断再减1,x=5; 判断x%3=2,为真,输出5,然后x值减1为4,然后做for循环的判断再减1,x=3; 判断x%3=0,为假,然后做for循环的判断再减1,x=2; 判断x%3=2,为真,输出2,然后x值减1为1,然后做for循环的判断再减0,x=3; for判断x>0不成立,退出for循环,执行完毕。 2.mian() {int y=10; while(y--);printf("y=%d\n",y); } 循环结构但是循环什么都不做,循环结束后输出y的值,但因为是后--所以可不可以这样理解y==1,y--.当y==1时,依旧成立,y=0,0==1不成立,但是y--还要进行,y=-1 3.for(i=0;i<4;i++) for(k=1;k<3;k++); printf("*"; 我认为该输出8个* 答案只有一个* 为什么??? 这个的原因是你在第二个for玄幻的后面加了“;”,循环结构但是循环什么都不做,所以只输出一个 *。 4.#inculd main() {char s[]={"012xy"};int i, n=0; for(i=0;s!=0;i++) \*我认为i=0时就该结束了*\ if(s>'a'&&s<='z')n++; printf("%d\n",n); } 答案:2 为啥???? 字符串的结束符是“\0”,计算机存储是按ASCII码存的,0的ASCII码是30h,不是0的,要想按你说的,你可将其改为 #include void main() { char s[]="012xy"; int i,n=0; for(i=0;s!='\0';i++) //我认为i=0时就该结束了 if((s>'a')&&(s<='z')) n++; printf("%d\n",n); } |
» 本帖已获得的红花(最新10朵)
11楼2012-03-23 11:04:13
qqhegg
荣誉版主 (文坛精英)
珊瑚小美-----小元家的九妹
- 程序强帖: 2
- 应助: 10 (幼儿园)
- 贵宾: 3.115
- 金币: 23915.9
- 散金: 14806
- 红花: 179
- 沙发: 138
- 帖子: 11542
- 在线: 770.7小时
- 虫号: 1212338
- 注册: 2011-02-24
- 性别: MM
- 管辖: 基金申请交流
【答案】应助回帖
★ ★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+2, 感谢参与 2012-03-21 01:42:22
时飞: 金币+3, ★★★★★最佳答案, 谢谢啊 2012-03-21 12:38:59
感谢参与,应助指数 +1
jjdg: 金币+2, 感谢参与 2012-03-21 01:42:22
时飞: 金币+3, ★★★★★最佳答案, 谢谢啊 2012-03-21 12:38:59
|
1、main() {int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d%d\n",i,j,k,); } 解释:i++后加所以先运算在相加即i==1成立返回1,i+1=2 ++j前加,先加为3,3==3返回1,因为或有1则为1所以后面不用运算即K=3 所以结果2,3,3 2.2、mian() {int y=10; while(y--);printf("y=%d\n",y); } 循环结构但是循环什么都不做,循环结束后输出y的值,但因为是后--所以可不可以这样理解y==1,y--.当y==1时,依旧成立,y=0,0==1不成立,但是y--还要进行,y=-1 3.main() {int k=5,n=0; while(k>0) {switch(k) {default:break; case 1: n+=k; case 2: case 3:n+=k; }k--; }printf("%d\n",n); } 这个是多条case通用相同的语句相当于下面的: main() {int k=5,n=0; while(k>0) {switch(k) {default:break; case 1: n+=k; case 2:n+=k; case 3:n+=k; }k--; }printf("%d\n",n); } 所以最后3+2+1=7n=7 |

2楼2012-03-20 22:21:52
【答案】应助回帖
★ ★
感谢参与,应助指数 +1
时飞: 金币+2, ★★★很有帮助, 谢谢 2012-03-21 12:39:44
感谢参与,应助指数 +1
时飞: 金币+2, ★★★很有帮助, 谢谢 2012-03-21 12:39:44
|
1.&&和||运算符都是短路判断:&&左边的表达式为假的情况下不会判断右边的表达式,||左边的表达式为真的情况下不会判断右边的表达式。i++==1:后缀运算符使得i先进行判断再加1,此时为真;然后进行判断(++j==3||k++==3):前缀表达式使j先加1再使用它的值进行判断,此时++j==3为真,那么表达式(++j==3||k++==3)一定为真,无需判断k++==3,所以结果为2 3 3。 2.while语句后面的是空语句,什么也不做;循环停止的点是(y--)等于0的时候,在后面打印的时候,此时y的值已经减1了,所以最终打印的值为-1。 3.楼主应该能明白循环过程中只有当k等于3、2和1的时候会改变n的值:当k=3的时候,n=0+3=3;k=2时,n=3+2=5;注意当k=1时,此时n改变两次,在case 1:处,n=5+1=6,但是由于语句没有break语句,后面的语句还会继续执行,所以,在case 3:下的语句执行为n=6+1=7。所以最终的结果为7. |
3楼2012-03-21 10:37:08
4楼2012-03-21 10:55:48
hp2012
铜虫 (初入文坛)
- 应助: 2 (幼儿园)
- 金币: 239.5
- 帖子: 36
- 在线: 7.1小时
- 虫号: 1705881
- 注册: 2012-03-21
- 性别: GG
- 专业: 机器人学及机器人技术
【答案】应助回帖
★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2012-03-22 00:31:47
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2012-03-22 00:31:47
|
第一个程序:首先定义了三个有符号的整型变量分别为-i-j-k并进行了初始化如i=1等,下一句是判断语句,其中++j==3表示j先是加上1在与3进行比较,若相等则此语句为真,k++==3则表示先将k与3进行比较,若k等于3则此语句为真,而||是逻辑或运算符号,只要符号两边的语句有一句是真则整条语句(++j==3||k++==3)为真,&&是逻辑与运算符号,只要符号两边有一个是假则整个语句为假,很显然i++==1为真,而++j==3为真。即(++j==3||k++==3)为真,所以i++==1&&(++j==3||k++==3)为真,if语句是括号里面的语句为真的话,就执行最近的下面语句(包括复合语句) 执行printf();语句,此语句是用于输出的功能,printf("%d%d\n",i,j,k,);表示输出当前i,j的值因为只有两个%d,因而无法输出此时i==1;j==3; |
5楼2012-03-21 18:23:37
lurencyj
木虫 (著名写手)
- 应助: 159 (高中生)
- 金币: 2869.2
- 散金: 520
- 红花: 8
- 沙发: 10
- 帖子: 1244
- 在线: 148.3小时
- 虫号: 888093
- 注册: 2009-10-29
- 性别: GG
- 专业: 凝聚态物性I:结构、力学和

6楼2012-03-21 19:16:36
7楼2012-03-21 21:33:33
lurencyj
木虫 (著名写手)
- 应助: 159 (高中生)
- 金币: 2869.2
- 散金: 520
- 红花: 8
- 沙发: 10
- 帖子: 1244
- 在线: 148.3小时
- 虫号: 888093
- 注册: 2009-10-29
- 性别: GG
- 专业: 凝聚态物性I:结构、力学和

8楼2012-03-21 21:53:52
时飞: 回帖置顶 2012-03-23 08:16:53
|
1.#inculd main() {int x=8; for(;x>0;x--) {if(x%3) {printf("%d,',x--);continue;} printf("%d,",--x); } } 该程序如何运行?每一个怎么出来的? 答案8,5,4,2 2.n=10;while(n);{n--;} 这个能构成无限循环吗?该在N=0时结束啊。。答案却不是 。。为什么 3.for(i=0;i<4;i++) for(k=1;k<3;k++); printf("*"; 我认为该输出8个* 答案只有一个* 为什么??? 4.#inculd main() {char s[]={"012xy"};int i, n=0; for(i=0;s!=0;i++) \*我认为i=0时就该结束了*\ if(s>'a'&&s<='z')n++; printf("%d\n",n); } 答案:2 为啥???? 请帮忙解决一下,当然越详细越好!!!! 谢谢!!! |
9楼2012-03-22 14:03:36
lurencyj
木虫 (著名写手)
- 应助: 159 (高中生)
- 金币: 2869.2
- 散金: 520
- 红花: 8
- 沙发: 10
- 帖子: 1244
- 在线: 148.3小时
- 虫号: 888093
- 注册: 2009-10-29
- 性别: GG
- 专业: 凝聚态物性I:结构、力学和

10楼2012-03-22 17:48:58













回复此楼
时飞