c语言菜鸟不懂就问!!!

1.数字字符0的ASCII值为48,若有以下程序main(){chara='1',b='2';printf("%c,",b++);printf("%d\n",b-a);}... 1.数字字符0的ASCII值为48,若有以下程序
main()
{
char a='1',b='2';
printf("%c,",b++);
printf("%d\n",b-a);
}

程序运行后的输出结果是?
答案是:2,2
问:在这里的printf中输出的%c和%d,有什么区别???(第一个输出的为什么不是50?)

2.char c=32 和 char c='32' 有什么区别???

3.有以下程序
main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
程序运行后的输出结果是?
答案是:2 3 3
问:这样的程序要怎么读?(i为什么不是1 ?or k为什么不是4?)

4.已定义ch为字符型变量,为什么 ch='\xaa'是正确的赋值语句?
问:在' '中不是只能放一个字符吗???

5.以下不能正确计算代数式值的c语言表达式是( )
a. 1/3*sin(1/2)*sin(1/2)
b. sin(0.5)*sin(0.5)/3
c. pow(sin(0.5),2)/3
d. 1/3.0*pow(sin(1.0/2),2)
答案是:a
看不懂!!!什么意思?

6.有以下程序段
int k=0,a=1,b=2,c=3;
k=ac ? c:k;
执行该程序段后,k 的值是?
答案是:2
问:这里面的 k=ac ? c:k; 是什么意思???

7.下列程序的输出结果是?
main()
{
double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d\n", d*y);
}
答案是: 0
问:为什么不是3???

8.以下程序的输出结果是?
#include<stdio.h>
main()
{
int a=2,c=5;
printf("a=%%d,b=%%d\n",a,c);
}
答案是: a=%d,b=%d
问:为什么不是 a=%2,b=%5???
展开
 我来答
never715
推荐于2016-09-21 · TA获得超过942个赞
知道小有建树答主
回答量:1010
采纳率:84%
帮助的人:447万
展开全部
1.printf中输出的%c和%d一个是输出字符。一个是输出整型值,所以第一个输出肯定不是50勒,而是字符'2'.
2.还是数据类型的问题,char c=32 :是将32这个整型值赋给字符变量c,编译系统会自动将数值32强制转换成对应的字符赋给c,而char c='32' 则是将字符串'32'赋给变量c
3.主要理解if(i++==1&&(++j==3||k++==3))语句i++==1是先使用i,再增益,所以这一句为真,i=2,后面的(++j==3||k++==3))也为真,因为前面的++j==3,先使j的值增一,j=3,这句也为真,所以||后面的编译器就跳过不执行了,所以k还是3,自然输出2,3,3勒
4. ch='\xaa',该赋值语句编译可以通过,但是输出的内容就不是你预想的那样了,因为ch只能存放一个字符,编译器在编译时会截取一个字符存放在其中。
5.这一题就是在考验C语言中除号“/”的用法了,1/3最后会被编译器计算成0,而不是0.33,只有改成1/3.0才行。
6. k=ac ? c:k; 是值表达式ac如果为真,就将c的值赋给k,否则就把k的值赋给k,我想这句话应该印错了,应该是k=a?b:c,最后结果才是k=2,
7.这里的x,y都定义的是整型变量,所以在赋值过程中他们只能被赋值成整数,y=(x+3.8)/5.0;结果应该是y=0.98,但是编译系统会做一个强制转换,也就是x=1,y=0.所以最后结果为0,而不是3
8.输出控制里面的“%”后面的内容才是要输出的内容,所以系统不认识%d只是把他们当作字符输出了,%后面再跟个%d,系统是不会将%d转换成后面的变量的.
建议你多注意一些基本概念和规则,这些都是考试时候老师最好下手的地方,也是他们最拿手的钻牛角尖的,其实真正编程时这些错误也可能就是致命的错误点。
希望我的回答对你有所帮助!
yahu_heihei
2011-01-03
知道答主
回答量:31
采纳率:0%
帮助的人:29.9万
展开全部
首先需要弄明白的是 i++和++i的区别,如果开始i=2,那么i++=2,i=3;如果开始i仍旧=2,++i=3,i=3,这一点老师应该有强调过吧?另外一点就是,字符型和整形变量是可以互相转化的,如果进行加减运算,则是用对应的ASCII码进行运算,如果用%d输出,意思就是说用整形输出,也就是出书对应的ASCII码,如果是%c输出,就是用字符型输出,对应输出那个字符。
下边回答你的问题:

1。b开始为字符‘2’,对应ASCII值为50,b++作为一个整体仍是50,以字符型输出就是‘2’,但在此之后b的ASCII的值已经为51了,那么b-a,也就是51-49=2,输出是以整形输出的,所以就是2,如果你将第二个printf改成%c输出,应该是对应输出ASCII值为2的字符了

2。char c=32,意思是将ASCII值为32的对应字符给c,而后者应该不会编译通过吧,如果是字符,应该是’3‘或者’2‘,如果是’32‘,应该为“32”,因为“32”已经不再是一个字符了,而是一个字符串

3。i=1,i++就=1,所以“i++==1”这一句真值为1,而后i就=2了,而j开始为2。++j=3.,(此后j=3)所以"++j==3"这句真值也为1,对于(1&&(1||x)),这个x真值不管是几都整个式子的真值都为1,所以k++这句话根本没有执行,所以看还是原来的3,所以输出结果是2,3,3了

4。这是16进制的转义字符,而非是’\‘ ’x‘ ’a‘ ’a‘四个字符

5。如果是1/3,那么它会认为是整形的除法,只会取结果的整数部分,也就是0了,所以要想精确计算,要写成1/3.0,这样它就会进行浮点型的除法,精度就高了,不再是0
至于这些函数的用法,课本后边因该有写吧!

6。第六题没看懂你的意思啊?ac是个什么东西啊?

7。因为你之前定义了x,y是整形的了,而后也没有强制转换,所以x=1.2实际上只是把整数部分1赋给了x,而后的(x+3.8)/5.0,虽然它的值是0点几,但是依旧是把整数部分给了整型变量y,所以y=0。所以d*y=0了

8。在%%d中编译器将%%认为是一起的了,第二个%取代了平时%d中d的位置,而后面的d就认为了是普通的字符了,总之编译器没有那么聪明啦,你要是在两个%中加一个空格它就不会那么认为了

打了好久的字哦,我是新手,多多支持啊~~~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
徐光猪
2011-01-02 · TA获得超过4167个赞
知道大有可为答主
回答量:1299
采纳率:50%
帮助的人:1710万
展开全部
答:
1、%d输出的是整形数据,%c输出的是字符型数据,第一个输出,因为是%c所以输出字符,而b++是先用b在自加,所以输出b,如果++b就输出c

2、char c=32;是字符c等于ASCII码为32的字符,char c='32'是一种错误写法

3、 if(i++==1&&(++j==3||k++==3))中先用i再自加,i==1是真值,之后i=i+1 i=2之后再判断,先j=j+1 j=3再判断 j==3 也为真值 最后先用k,k==3再自加1 k=4 所以输出 2 3 3

4、这是一种16进制的表示方法,'\xaa'表示的是一个转义字符 a在16进制中为10的意思

5、整型变量是没有小数的 A 1/3=0不能正确计算

6、k=a>c? c:k;是一个三目运算符,意思是,a>c吗?如果是将c的值给k如果不是将k的值给k,输出的结果应该是 0 不是2

7、由于你定义的x y是整型变量 x=1.2实际上 x=1 y= (1+3.8)/5.0=4.8/5.0=0.96 其实y=0小数部分没有了,上面已经说了

8、由于你加了%在%d前面,编译器认为你输出的字符,后面的a,c被编译器忽略了如:
int a=0;
printf("\n",a);
a就被忽略了因为""里面没有了输出格式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun2hu
2011-01-02
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
第一题:b='2',这里的2的类型是字符型,%c输出是2,如果%d输出则是50
第二题,'32',加单引号的数字就是表示以字符形式存在。
第三题,如果i=1; ++i是加1再计算,i++是先计算再加1; i++==1;就是说先计算i=1的,最后计算完再加1,所以i=2; ++j==3; j=2,先计算j的值,++j=3;再计算,所以++j==3;
......

我也是初学C语言的,可以一起讨论。QQ253448834
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式