60、下面哪个操作符不能重载()
61、若调用fputc函数输出字符成功,则其返回值是()
fgetc函数——读成功,返回所读的字符,失败返回文件结束标志EOF(-1);
fputc函数——输出成果,返回值就是输出的字符,失败返回EOF;
fgets函数——读成功,返回地址str,失败返回NULL;
fputs函数——输出成果,返回0,失败返回非0;
62、如果有int a=5,b=3,在执行 !a&&b++; 后a和b的值分别是()
&&左边是0 则不运行右边的
a = 5,在逻辑上非0即1,逻辑非之后就是0.
&&运算符具有短路现象,只要出现一个0,那么就全0了,所以后面的b++是没有计算的。
a还是5,b还是3
63、在一个16位的机器,以下结构由于边界对齐浪费了多少空间()
struct{char a;int b;char c;
}
64、使用fseek函数可以实现的操作是( )
int fseek( FILE *stream, long offset, int origin );
1.第一个参数stream为文件指针;2. 第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移;3. 第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR当前位置、 SEEK_END文件结尾 或 SEEK_SET文件开头
65、若变量已正确定义并赋值,下面符合C语言语法的表达式是()
A选项:唯一的三目运算符是A:B?C:D
B选项:将C+2的值赋给b,再将b的值赋给a
C选项:只有整形变量才能用取值运算符
D选项:表达式不能用作赋值运算符的左值,将赋值运算符从右到左看,a+7=c+b a+7是表达式用作了左值,故错误
66、以下叙述中正确的是()
C 语言程序可以不包含三种基本结构 , 也可以包含其中的一种或多种 , 所以 A 错误。三种基本结构可以表示任何复杂的算法 , 所以 C 错误。正确的算法 , 不管是简单算法还是复杂算法都可以在有限的操作步骤之后结束 , 这是算法的有穷性 , 所以 D 错误。
67、a=(b=4)+(c=6) 是一个合法的赋值表达式。请问这句话的说法是正确的吗?
68、在C的文件操作中,可以利用 fseek 函数进行文件指针的随机定位
69、已知 int 占 4 个字节,bool 占 1 个字节。对于下面代码:
#include
using namespace std;int main(int argc, char** argv) {unsigned int value = 1024;bool condition = *((bool*)(&value));if (condition) value += 1; condition = *((bool*)(&value));if (condition) value += 1; condition = *((bool*)(&value));
}
value, condition 的结果为()
value 的十六进制表示为 0x00000400,将其转化为 bool 类型,在大端的情况下取左边的两个 0 赋给 condition,在小段的情况下取右边的两个 0 赋值给 condition,因此 condition 为 false。所以两个 if 条件都不会执行。value, condition 最终为 1024 和 0。D 选项正确。
70、C 语言程序中的基本功能模块为( )?
c语言是借助于函数来实现模块化的
71、在32位操作系统中,我们定义如下变量 int (*n)[10]; 请问调用函数sizeof(n),返回值为()
正确答案:A
n 是指针变量,不论指针变量的类型是什么,在同一个平台下大小都一样。在 32 位操作系统中占 4 个字节,在 64 位操作系统中占 8 个字节。
72、下列程序的输出结果是( )
int main() {int x = 1, y = 0, a = 0, b = 0;switch(x) {case 1:switch(y) {case 0:a++;break;case 1:b++;break;}case 2:a++;b++;break;case 3:a++;b++;break;}printf("a=%d,b=%d\n", a, b);
}
case1:switch(y)内部break后a=1,b=0,但是外部没有break。 于是继续执行case2:a=2,b=1.break结束
72、关于操作系统heap与stack说法中,正确的是()。
在堆上分配内存
可能许多人对内存分配上的“栈 stack ”和“堆 heap ”还不是很明白。包括一些科班出身的人也不明白这两个概念。简单的来讲, stack 上分配的内存系统自动释放, heap 上分配的内存,系统不释放,哪怕程序退出,那一块内存还是在那里。 stack 一般是静态分配内存, heap 上一般是动态分配内存。
由 malloc 系统函数分配的内存就是从堆上分配内存。从堆上分配的内存一定要自己释放。用 free 释放,不然就是术语——“内存泄露”(或是“内存漏洞”)—— Memory Leak 。于是,系统的可分配内存会随 malloc 越来越少,直到系统崩溃。还是来看看“栈内存”和“堆内存”的差别吧。
73、在上下文及头文件均正常的情况下,写出下列程序所有可能的运行结果。
int a;
int b;
int c;void F1(){b = a * 2;a = b;
}void F2(){c = a + 1;a = c;
}int main(){a = 5;// !!! Start F1(),F2() in parallel{F1();F2();}printf("%d\n", a);
}
74、有如下代码,则 z 的结果为()
int a = 5, b = 6, c = 12;
int z = (a * b - c) / a;
(a * b - c) / a; 代码执行如下:
1.先执行 a * b,结果为 30;
2.执行 30 - c,结果为 18;
3.执行 18 / 5,结果为整数,结果为 3。
75、下面代码段的结果为()
int a = 1;
int b = 1;
a += b++;
b += ++a;
第一步,初始化a=1,b=1
第二步,a+=b++,b++是后缀加法,先运算再加,即先执行a = (a+b) =(1+1) = 2,再b = b+1=2,此时a=2,b=2
第三步,b+=++a,++a是前缀加法,先加再运算,即先执行a=a+1=3,再b=b+a=2+3=5,最终a=3,b=5
76、int *p[4] 与选择项中的() 等价
[]优先级比高,因此p先和[]结合,表明p是一个数组,且含有4个元素,然后再和结合,表明数组元素为指针,最后指明指针指向的是int类型的数据,因此等价为int *(p[4])也就是指针数组,而如果是int (*p)[4]那就是数组指针 本题答案C
77、下面选项中关于位运算的叙述正确的是()
b 按位取反一个操作数
c 左移一位才是2倍
d 负数补1
78、在 C 语言中,C99除外,一维数组的定义方式为:元素类型 数组名[E];E 为( )。
79、若有#define S(a,b) a*b,则语句area=S(3,2);,area 的值为6。请问这句话的说法是否正确?
80、在执行以下程序时,为使输出结果为:t=4,则给a和b输入的值应满足的条件是()
int main(void) {int a,b,s,t;scanf("%d,%d",&a,&b);s = 1; t = 1; if(a > 0) s = s + 1;if(a > b) t = s + t;else if(a == b) t = 5;else t = 2 * s;printf("t=%d\n",t);return 0;
}
81、下列语句中,不正确的是( )
字符’1’、‘2’对应的ASCII码为整型数字
82、下列程序的输出结果是
#include
#include
#include
using namespace std;
int main(){char p1[10] = "abcd", *p2, str[10] = "xyz"; p2 = "ABCD";strcpy(str + 2, strcat(p1 + 2, p2 + 1));printf(" %s", str);
}
strcat(p1 + 2, p2 + 1) 表示将p2+1所指字符串"BCD"拼接在"cd"字符串后面形成"cdBCD"; strcpy(str + 2, “cdBCD”); 将字符串拷贝到str +2 的未知形成"xycdBCD"
83、设x、y、t均为int型变量,则执行语句:
t = 3;x = y = 2;t = x++ || ++y;
后,变量t和y的值分别为____
按照优先级原则来说: t=x++||++y; 先执行 x++ 然后执行||,最后执行=。由于x=2 根据逻辑运算符可知x++ 理解为true,根据短路运算符可知++y不会执行了。根据逻辑运算可知x++||++y 返回1,则可知t=1;y没有执行,y=2
84、下列程序段的输出结果为( )
int a = 7, b = 9, t;
t = a *= a > b ? a : b;
printf("%d",t);
85、已知 声明并初始化二维数组
int a[ ][2] = {{1, 2}, {3, 4}, {5, 6}}
则 a[1][1] 的值为()
86、以下程序的输出结果是( )
#include
int main() {unsigned char a = 235;unsigned char b = ~a;unsigned char c = b >> 1;printf(“%d”, c);
};
将10进制转换为2进制,a=1110 1011; b=~a=0001 0100; c=b>>1=0000 1010。最后转成10进制就是c=10
87、printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出按方式( )
1:字符串长度比设定长度大就按字符串实际长度输出;
2:字符串长度比设定长度小就按右对齐输出该字串,左补空格。
3:如果数字之前有-,即%-5s表示左对齐输出
88、()运算符把其操作数中所有值为0和所有值为1的位分别在结果的相应中设置1和0
89、下列程序的输出结果是
#include
using namespace std;
void f() {static int i = 15;i++;cout << "i=" << i << endl;
}
int main(void){for(int k = 0;k < 2;k++) f();
}
static 修饰的变量只初始化一次, 当下一次执行到这一条语句的时候,直接跳过
90、已知程序如下:
int S(int n) {return (n<=0) ? 0 : s(n-1)+n;
}void main() {cout<< S(1);
}
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是 ()
c程序总是从main()函数开始的,然后就开始执行s(1),最后s(0),因为栈是先进后出,所以从栈底到栈顶就是mian()->s(1)->s(0)
91、请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。该程序的功能是将形参n所指变量中,各位上为奇数的数去掉,剩余的数按原来从低位到高位的顺序组成一个新数。
unsigned long fun(unsigned long n)
{unsigned long x = 0; int t;while (n){t = n % 10;/********** found **********/if (t % 2 == _______)/********** found **********/x = _____ + t;/********** found **********/n = _______;}return x;
}
该程序的功能是将形参n所指变量中,各位上为奇数的数去掉,剩余的数按原来从低位到高位的顺序组成一个新数,并通过形参指针n传回所指变量。 例如,若输入一个数27638496,则新数为64862。 1,这里判断是否是偶数,所以判断%2是否为0 2,x为保存的偶数,每次扩大10倍加上个位数 3,数字n每次去掉个位数,继续循环
92、十进制数50表示成符合C语言规定的八进制数为________。
二进制由 0 和 1 两个数字组成,使用时必须以0b或0B(不区分大小写)开头
八进制由 0~7 八个数字组成,使用时必须以0开头
十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x或0X(不区分大小写)开头
93、32位机器上定义如下结构体:
struct xx {long long _x1;char _x2;int _x3;char _x4[2];static int _x5;
};
int xx::_x5;
结构体总的大小要被最大的整除
首先_x5是静态变量可以不用管它,其次是要考虑字节对齐的问题。
此时总长度为(8)+(1+3)+(4)+(2)=18,而最大简单类型为long long长度为8,因此需要在x4之后再填充6字节,使得总长度达到24可被8整除。因此sizeof(xx)的结果为24。
上一篇:vue编程方法
下一篇:Flutter 编译异常问题收集