1.下面程序中的加注释方式是合法的:
#include <stdio.h>
void main()
{ int x/*x初始化*/=0;
/*打印*/printf("%d",x);
}
这种就不合法:
#incl/* */ude <stdio.h>
这样也不合法:
#include <st/*x初始化*/dio.h>
2.
int a=12;
printf("%d",a+=a-=a*=a);
输出结果是0。
等号表达式从左往右计算。上式等价于((12+12)-24)*0。
3.
以下数组定义不正确的是:
int a[3][]={(1,2), {0,0}};
这里的知识点是,数组的行数可以省,列数不能省。
对于二维数组,如果不用大括号括起来,默认放到第0行。
4.
函数定义不能嵌套,但函数调用可以嵌套。
这个地方我觉得是我理解错了定义的含义,真是不好意思了。
5.
C语言字符串比较不能直接用关系运算符进行正确比较。
所以说,是可以比较的!!!
如果想正确比较的话,可以用字符串比较函数strcmp
strcmp(s1,s2);
它会按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
相等,返回值=0;字符串1>字符串2,返回值1;字符串1<字符串2,返回值-1。
本函数也可用于比较两个字符串常量,或比较数组和字符串常量。
6.
考察宏定义的二义性。顾名思义,二义性就是实际的结果和想得到的结果不一致。
举个栗子:
#define multi(a) a*a
main()
{
int i;
i=multi(2+2);
}
需要的结果是i = 4*4 = 16, 而实际被解析为 i = 2+2*2+2 = 8
解决问题:#define SQ(a) (a)*(a) 则不会产生二义性。
7.
数据在内存中是以二进制形式存放的。数值以补码表示。
整型:一个正数的补码和其原码的形式相同。而负数的补码方式是将其绝对值的二进制形式“按位求反再加1”
实型:在内存中占4个字节,是按照指数形式存储的,实型数据分为小数部分和指数部分,分别存放!计算机用二进制表示小数部分,用2的幂次来表示指数部分!
字符型:在内存中字符的存储实际上是把字符相对应的ASCII代码放到存储单元中的。而这些ASCII代码值在计算机中也是以二进制形式存放的。这个与整型的存储很相似。因此这两类之间的转换也比较方便!
8.在作为函数形参时,int,char,long long等类型可混用……只是要注意范围问题。
9.do while语句中,一旦使用了continue就会跳过后面的循环条件判断……可以达到一直循环的效果。
10.若没有说明函数类型,默认是int型。
11.
char *language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};
printf("%c ",*language[1]);
上面的语句定义了一个字符类型的二维数组。输出结果为B。
如果改为
printf("%s ",language[1]);
输出结果为BASIC。这是因为定义的是指向数组类型的指针……所以language[1]相当于BASIC这个字符串首字母的地址。
12.
设有说明int (*ptr)[M]; 其中ptr是:
一个指向具有M个整形元素的一维数组的指针。
13.
以下是对于指针操作顺序的一些实验:
int x[10]={0,1,2,3,10,5,6,7,8,9},*p1;
p1=x+3;
printf("%d",*p1++);
printf("%d",*p1);
上面的语句会输出310。也就是说是*的优先度很低。
14.fscanf函数的正确调用格式是:文件指针,格式字符串,输入表列。
15.f(x1,x2+x3,x4,x5);函数调用过程中,含有的实参个数是:4。
16.要打开一个已存在的非空文件“file”用于修改,正确的语句是:
fp=fopen(“file”,”r+”);
17.
char ch;
scanf("%3c",&ch);
printf("%c",ch);
如果输入abc<回车>,输出结果是a。实验之后发现是%3c这种语句在输入里没有意义。
18.
下面程序段的运行结果是___3___。
char c[]=" v\ will ";
printf("%d",strlen(c));