C语言题目 高手请帮忙!!!最佳答案积分送上!!!

1,若有“char c=1025;printf("%d",c);”结果为?
答案为 1
为什么呢?越详细越好!
为什么char型的1025既没有单引号又没有双引号,不是字符型也不是字 符串型的,输出为什么用“%d”,答案1又是哪来的?

2,编写程序,输入两个双精度的数,求它们的平均值,要求小数点后保留两位小数,第三位小数四舍五入
答案 #include<stdio.h>
main()
{
double f1,f2,avg;
scanf("%lf,%lf",&f1,&f2);
avg=(f1+f2)/2;
printf("avg=%3.2lf\n",avg);
}
%3.2lf 的含义是什么?可以实现保留两位小数,并对第三位实现四舍五入吗?

3,邮寄包裹,以每1KG为一个记费单位,每个邮包最多10KG,低于1KG的按一个记费单位算,每件邮包的手续费为3元,从A到B的邮寄费是3元/KG
#include<stdio.h>
main()
{
float postage;
float weight;
scanf("%f",&weight);
if(weight>10)
printf(wrong!);
postage=(int)weight*3.0+3.0;
printf("postage=%f",postage);
}

(int)weight是对重量进行取整处理,但是题目中的不足1KG按最小单位记费怎么办呢?应该怎么把那部分的费用算出来,或者这个答案为什么是对的?

4.执行下面的程序后a b k 的值分别为?
int a=0,b=0,k=0;
for(;a<=5;a++)
if(a%2)
for(;b<=3;b++)
k=a+b;

答案为6.4.4为什么?

5.执行下面程序的输出结果为?
#include<stdio.h>
main()
{
int x=0,y=5,z=3;
while(z-->0&&++x<5)
y=y-1;
printf("%d,%d,%d\n",x,y,z);
}
答案是什么?为什么?

谢谢帮忙!

1.一个char是一个字节,最大值255,你的赋值显然是越址了,1025=1024+1=2^10+1,二进制就是10000000001,截取前8位,即是10000000,在内存中低位高地址,高位低地址,所以实际上就是00000001,就是1.
2.%f 根据需要进行截尾,你可以设置需要几位小数点后面的数字:
printf “%12f\n”, 6*7 + 2/3; #输出为: ○○○42.666667
printf “%12.3f\n”, 6*7 + 2/3; #输出为: ○○○○○○42.667
printf “%12.0f\n”, 6*7 + 2/3; #输出为: ○○○○○○○○○○43
12.3f的意思就是小数总12位,其中小数部分是3位,多余位自动四舍五入
3.这道题的意思是,小数部分不为0就在整数加1,即9.1,9,4,9,9都是按照10计算,这样(int)weight*3.0+3.0,int把小数部分截掉,再加上一个1单位的,这样不就达到那样的效果了。
4.a=1,3,5的时候,执行里面的for,但第一次循环结束后,b的值为4,以后再也不会循环了,因为b不小于3,此时k=1+3=4.最后a=6,b=4,k=4.
5.最后就是考++或--放前面和放后面的区别,自己看去吧。
x=3,y=2,z=-1
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-09-04
没分...

1.
1025会被强制截取最低位字节的值给c.
1025的二进制是00000100 00000001,最低位字节是1.
printf是不会检查参数类型的,只根据控制符来输出,%d就是按有符号整数输出.

2.
建议你仔细看下教材上关于输出语句的控制符部分.

3.
int强制转换就是取浮点数的整数部分.不足1KG的话,weight的值小于1,那么(int)weight的值就是0,算出来的postage是3,正好是正确答案.

4.
if(a%2)表示当a为奇数时,执行后面的语句,所以a=1时执行了b的循环.
循环的最后一步是k=a+b=1+3=4;之后b++,b变成4.
之后,因为b没有重新赋值,所以值始终是4,所以,对于a=3和5的情况,b的循环都没有执行,所以k始终是4
a的循环条件是<=5,所以结束时a=6

5.
第一次:
z-->0,先取z的值3>0,然后--,z变成2,>成立
++x的值为1,1<5,成立
所以y减1变成4

第二次,循环条件依然成立,x变成2,z变成1,y变成3
第三次,x变成3,z变成0,y变成2
第四次,z=0,大于0不成立,如果&&的左边为0,那么结果肯定是0,所以右边的++x没执行,x依然是3,但z--执行了,所以z变成-1.y减1没执行,y是2
所以结果是3,2,-1
第2个回答  2008-09-04
1.
char型和int型可以互换 char型用%d输出时为ascii值,%c输出时为字符

2. %3.2lf 的含义是什么?可以实现保留两位小数,并对第三位实现四舍五入吗?
以浮点形式输出,3表示3位有效数字,但实际长度超出不会截取,.2表示保留小数点后两位
可以的

3.原来的也不对!
#include<stdio.h>
main()
{
float postage;
float weight;
scanf("%f",&weight);
if(weight>10)
{
printf("wrong!"); //少了""
}
else //不加上时,当weight>10时,输出wrong后,还会执行后面的语句
{
if(weight < 1)
postage=6.0;
else
postage=(int)weight*3.0+3.0;
printf("postage=%f",postage);
}
}

4.
for(;a<=5;a++) //a只有这里才改变它的值,所以a++直到a为6时,退出for
if(a%2) // 只在a%2等开1、3、5时进入if
for(;b<=3;b++) //当第一次a等于1时进入,b一直加到为4,在后面b没有改变值,一直没有再执行for循环
k=a+b; // 虽然循环做了四次,但是只有最后一次有效,就是a为1和b为3时有效,所以k为4

最后为6.4.4

5.

3,2,-1
答案是由于z--执行了4次(z为0时退出while循环,但是还要自减1),x++执行了3次(由于第四次比较z-->0不成立,第四次++x<5的比较没有进行,所以只做了3次比较),y=y-1;和原因的x++一样,第四次没有进入
第3个回答  2008-09-04
1。
1025 写成二进制 0100 0000 0001
char 只有8位,高位被舍弃,故 0000 0001
按10进制输出,即为 1

2.
%3.2lf 的含义是什么?
M.Nlf
M:域宽,即对应的输出项在输出设备上所占字符数

若:实际数据宽度>M,按实际数据宽度输出。

实际数据宽度<M,左边补空。

N:精度,说明输出的实型数的小数位数。

3.
(int)weight*3.0+3.0;
注意,后面加了一个3.0, 当你的weight为 0.9时,(int)weight =0
上式结果为3.0

4.
for(;a<=5;a++)

当a=6是退出循环。

if(a%2)
for(;b<=3;b++)
k=a+b;
只有当a=1时该循环才会执行
当b=3时得到最终k值 = 1+3 =4

当 b =4 时退出循环

5.

结果时 3 2 -1
while(z-->0&&++x<5)
y=y-1;
当 z=-1时这个条件不再满足。循环结束。本回答被提问者采纳
相似回答