PS:机器运行环境32位系统。
一、 填空题:
1、 执行一下程序,while循环执行次数()(1分)。 int k = 0; while (!(k = 1)) {k++}
!(k=1)结果为0,不进入循环
2、 有定义:char p[] = {‘a’, ‘b’, ‘c’}, *q = p; 在下面找出一个不能计算出char型数据所占字节数的表达式是()(1分)。
sizeof(p) sizeof(char) sizeof(*q) sizeof(p[0])
sizeof(p)是数组的大小
3、 若定义:int a[9], *p = a; 不能表示a[1]地址表达式的是()(1分)。
p + 1 a + 1 a++ ++p
数组名a不能做左值
4、 (2分)改错:从指定的字符串中删除指定的字符,同一字母的大小写按不同的字符处理。
void func(char p[], char c)
{
int i , j;
for (i=0; p[i]==’\0’; i++)
{
if (c != p[i])
{
p[j++] = p[i];
}
}
}
j未初始化
p[j]=’\0’;
p[i]!=’\0’
5、 (4分)在一个32位的计算机中,计算下面的值。
void main(void)
{
struct
{
char c;
int a;
char b;
}B;
char *s1 = “0123456789”;
char s2[] = “0123456789”;
char s3[100] = “0123456789”;
int s4[100];
char q1[] = “abc”;
char q2[] = “a\n”;
char *q3 = “a\n”;
int len1 = sizeof(s1); //4,指针
int len2 = sizeof(s2);//11
int len3 = sizeof(s3);//100
int len4 = sizeof(s4);//400
int len5 = sizeof(q1);//4
int len6 = sizeof(q2);//3
int len7 = sizeof(q3);//4
int len8= sizeof(B);//12
}
6 (2分)int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
假定x = 9999。写出下面程序的运算结果().
每次置一个二进制的一为零,9999的二进制是0010 1110 0000 1111,所以一共执行八次
7、(4分)int a[5] = {1, 3, 5, 7, 9};
int *p1 = a + 1;
int p2 = (int )(&a + 2);
printf(“%d.\n”, *(p1+1));//5
printf(“%d.\n”, *p1++);//3
printf(“%d.\n”, ++(*p1));//6
printf(“%d.\n”, *(p2-8)); //6
8、(3分)(1)、func(char *a){} 解释:传递的是字符串首元素的地址。
(2)、func(char a[]){} 解释:传递的是数组首元素的地址。
(3)、func(char a[8]){} 解释:传递的是数组首元素的地址。
9、(3分)分别写出int,float,指针类型的变量a 与“零”的比较语句。
int a ==0;
float if(a>-0.000001&&a<0.000001)
int *a == NULL;
10、(2分)下面代码输出什么,为什么?
void func(void)
{
unsigned int a = 6;
char b = -20;
if (a + b > 6)
{
printf(“