关于C语言的问题
1.输入以下程序:#include"stdio.h"main(){inti;charj;for(i=1;i<10;i++){scanf("%c",&j);printf("...
1.输入以下程序:
#include "stdio.h"
main()
{
int i;
char j;
for(i=1;i<10;i++)
{
scanf("%c",&j);
printf("%c",j);
}
}
(1)运行程序,输入a↙b↙c↙d↙e↙f↙g↙h↙i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。为什么?
我在输入到f一按f时突然那个黑黑的窗口就没了,为啥啊。。 展开
#include "stdio.h"
main()
{
int i;
char j;
for(i=1;i<10;i++)
{
scanf("%c",&j);
printf("%c",j);
}
}
(1)运行程序,输入a↙b↙c↙d↙e↙f↙g↙h↙i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。为什么?
我在输入到f一按f时突然那个黑黑的窗口就没了,为啥啊。。 展开
展开全部
首先要说明一下,在逻辑表达式中,只有真假两个值,真就是非0的数,假即为0。
第1题,d=(a>b) || (++a==5) && ( c > b--)。
首先看(a>b),由a=4,b=7,可知,(a>b)为假,也就是说,值为0。
然后看(++a==5),先计算++a,由a=4,得++a的值为5,所以(++a==5)为真,值为1。
此时a=5。
再看(c<b--),先计算b--,可得b=6,由c=5,可知c<b--,所以(c<b--)为真,值为1。
最后看(a>b) || (++a==5) && ( c > b--)整体的值,由运算符优先级可知,&&的优先级要高于||,所以,应先计算(++a==5)&& ( c > b--)的值,经过之前的计算可以知道,该式值为真。
所以(a>b) || (++a==5) && ( c > b--)等于(a>b) || 1,也为真。于是d=1。如果此时再输出a,b,c,d的结果的话,应为a=5,b=6,c=5,d=1。
第2题 temp=!a+b*c-b/a&&b-a*!(c-a)。
先看(!a),由a=10即a为真,可知(!a)为假,值为0。
由(b*c-b/a)可知,(15*14 -15/10)不可能为0,所以为真,值为1。
再看(b-a*!(c-a)),(c-a)=4,为真,所以!(c-a)为假,值为0,
a*!(c-a)=a*0=0,b-a*!(c-a)=b-0=b=15,由b=15可知,值为真。
由(b*c-b/a)=1, ( b - a * !(c-a) )=1,可知( b*c - b/a ) && ( b - a * !(c-a) )=1。
由( !a )可知, ( !a ) + ( b*c - b/a ) && ( b - a * !(c-a) )=1,所以temp=1
第1题,d=(a>b) || (++a==5) && ( c > b--)。
首先看(a>b),由a=4,b=7,可知,(a>b)为假,也就是说,值为0。
然后看(++a==5),先计算++a,由a=4,得++a的值为5,所以(++a==5)为真,值为1。
此时a=5。
再看(c<b--),先计算b--,可得b=6,由c=5,可知c<b--,所以(c<b--)为真,值为1。
最后看(a>b) || (++a==5) && ( c > b--)整体的值,由运算符优先级可知,&&的优先级要高于||,所以,应先计算(++a==5)&& ( c > b--)的值,经过之前的计算可以知道,该式值为真。
所以(a>b) || (++a==5) && ( c > b--)等于(a>b) || 1,也为真。于是d=1。如果此时再输出a,b,c,d的结果的话,应为a=5,b=6,c=5,d=1。
第2题 temp=!a+b*c-b/a&&b-a*!(c-a)。
先看(!a),由a=10即a为真,可知(!a)为假,值为0。
由(b*c-b/a)可知,(15*14 -15/10)不可能为0,所以为真,值为1。
再看(b-a*!(c-a)),(c-a)=4,为真,所以!(c-a)为假,值为0,
a*!(c-a)=a*0=0,b-a*!(c-a)=b-0=b=15,由b=15可知,值为真。
由(b*c-b/a)=1, ( b - a * !(c-a) )=1,可知( b*c - b/a ) && ( b - a * !(c-a) )=1。
由( !a )可知, ( !a ) + ( b*c - b/a ) && ( b - a * !(c-a) )=1,所以temp=1
展开全部
首先你的循环只循环10次,只可能循环到f后边的循环不到。其次,当计算机执行完程序后就会关闭,而计算机执行的速度又极其快,所以你刚一输入f他瞬间输出f并关闭程序。解决方法,在开头添加#include<conio.h>在程序末尾添加getchar();这样程序在执行完成以后会等待你再输入一个字符进去才会结束关闭。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的不对啊,不是getchar()
在程序末尾处加个getch();或者在头文件加#include<stdlib.h>,然后在程序末尾加system("pause");语句,这两个语句都可以使你的程序在所有语句运行完后停留住,直到你按下任意键
在程序末尾处加个getch();或者在头文件加#include<stdlib.h>,然后在程序末尾加system("pause");语句,这两个语句都可以使你的程序在所有语句运行完后停留住,直到你按下任意键
更多追问追答
追问
已经加了,看图片
追答
你在输入字母的时候发现没有,程序中printf()函数并没要求换行,而你在输入一个字母并回车时,程序却输出一个字母并且换行,这说明scanf 连换行符一起接受了,因此当你输入了abcde时实际上已经完成了十个字符的输入。看下最后一个e显示出来并没有换行,说明已经循环到第九次,也就是最后一次,当把程序改成for(i=1;i<=10;i++)的时候,最后的换行符就会看出来了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf函数中得 %c可以接受空格和回车作为字符
所以实际上也接受了回车
所以实际上也接受了回车
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在程序后面加一句
getchar();
因为程序没有停留,直接结束了
getchar();
因为程序没有停留,直接结束了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询