本人是C语言初学者,可惜啊,刚开始学习不久,就遇到了一大堆问题,用“出师不利”来形容是再合适不过的了。以下是我从开始学C语言到现在的所有的问题,希望各位高手多多指导,小弟我在这里感激不尽!
1.以下程序的输出结果是______。
#include <stdio.h> /*以下我这里就有所省略了哈*/
main()
{
int x;
(x=4*5,x*5),x+25;
printf("x=%d\n",x);
}
给的正确答案是x=20,为什么呢,括号里面,先算x=4*5,x=20,再算x*5,这样x最后等于100啊,为什么是20呢?
2.以下程序的输出结果是______。
#include <stdio.h>
main()
{
int a=15,b=240;
printf("%d\n",(a&b));
}
答案为什么是0呢,15求余240不是等于15么。
3.关于格式数据输出的,对于单精度和双精度类型的实型数可以用“整数1.整数2”的形式在指定宽度的同时来指定小数位的位数,这里的“整数1”和“整数2”分别指的是什么?
“对于整数,用来指定必须输出的数字个数,若输出的数字少于整数2指定的个数,则在数字前面加0补足;若输出的数字多于整数2指定的个数时,按数字的实际宽度输出”这句话对么,为什么是“整数2”而不是“整数1”呢?“整数2”不是只针对小数么?指总体的不是“整数1”么?“整数2”为什么也影响到总体?
4.已知unsigned int x=65535;则执行下列语句后的x的值是?
printf(“%d\n”,x);
答案是-1,怎么算的?
5.以下程序的输出结果是?
#~~~~~~
main()
{
int w=3,x=10,z=7;
printf(“%d”,x>10?x+100:x-10”);
printf(“%d”,w++||z++);
printf(“%d”,!w>z);
printf(“%d\n”,w && z);
}
答案是0101,可我算的是0111,问题出在这句printf(“%d”,!w>z);
这句代码最后的结果不是1么,为什么是0呢?
6.以下程序的输出结果是?
~~~~~~
unsigned int a=3,b=10;
printf(“%d\n”,a<<2 | b>>1);
~~~~~~
答案是13,但是我的不一样,我的计算过程是这样的:
3用二进制表示是11,左移两位,是00,10用二进制表示是1010,右移一位是0101,那么它们两个进行位或运算,结果是0111,转换成十进制之后是7,哪里出错了呢?
7.直接简写了哈
float f=3.1415927;
printf(“%f,%5.4f,%3.3f”,f,f,f);
答案是:3.141593,3.1416,3.142
如果没有指定小数位的宽度,那么默认补足6位么?第三个结果,不是用“3.3”限定结果了么,限制了总宽度是3个,那么3.142是4位,超了啊。
8.
float f=31.41592;
printf (“%f,%e”,f,f);
答案是:31.415920,3.14159e+01
最后一个结果的指数形式是怎么化的?
9.
float f=3.5;
printf(“%f,%g”,f,f);
答案是:3.500000,3.5
第一个答案没什么,第二个不是让系统决定用%f还是%e么,为什么是3.5而不是3.500000?不是默认自动补齐6位小数么?
我总觉得我这本教材有点问题,我发现问题之后,翻遍了书,但是还是没有解决,然后就是更加的一头雾水~~~希望高手讲解。
第六个:3是左移位,不是右移位,10是右移位。
第七个:我说的3位是总共的3位,包括整数部分和小数部分。
二楼的第4、6个是错的。