C及C++每日练习(1)
一.选择:
1.以下for循环的执行次数是()
for(int x = 0, y = 0; (y = 123) && (xA.是无限循环 B.循环次数不定 C.4次 D.3次
for(初始化;循环进行条件;调整) { 循环语句// }对于上面给出的循环的循环条件,由于中间用于&&连接,因此,必须左右的条件都为真,循环才能继续进行。因此,当循环进行五次时,此时的,不满足条件,退出循环,因此答案选择:循环四次
2.以下程序的运行结果是()
#include int main(void) { printf("%s , %5.3s\n", "computer", "computer"); return 0; }A.computer , puter
B. computer , com
C. computer , computer
D.computer , compu.ter
此题目的考点主要在于打印的格式,即题目中的%。对于这种%格式的格式。其中表示输出字符串的宽度,表示左起截取字符串中的多少字符,且对齐格式为右对齐,如果字符不足则用空格补足。但是也存在特殊情况:
当字符串长度,此时的作用不再生效。即输出左起截取字符串中的前个字符。
例如本题中,,字符串长度,所以上述的打印格式应该为:打印字符串的长度,从左截取字符串中的个字符,由于截取的字符小于需要打印的字符,因此,用空格补齐,由于存在右对称,所以打印结果为:
computer,空格空格com3.下列main()函数执行后的结果为()
int func(){ int i, j, k = 0; for(i = 0, j = -1;j = 0;i++, j++){ k++; } return k; } int main(){ cout {1}, {3, 2}, {4, 5, 6}, {0}};pA.1 B. 0 C.6 D.2/p p给出的数组是一个二维数组,其行数没有给出,列数为img src="https://latex.csdn.net/eq?4" /,在数组中的数组中,如果给出的数没有达到img src="https://latex.csdn.net/eq?4" /位,则会用img src="https://latex.csdn.net/eq?0" /补齐。因此,题目中给出的二维数组的结构为:/p pre class="brush:python;toolbar:false"{1,0,0,0} {3,2,0,0} {4,5,6,0} {0,0,0,0}/pre p对于二维数组,其行、列数都是从img src="https://latex.csdn.net/eq?0" /开始算起的,因此,img src="https://latex.csdn.net/eq?p%5B1%5D%5B2%5D%3D%3D0" /.,因此答案选择img src="https://latex.csdn.net/eq?B" //p p7.选择表达式 11|10 的结果(本题数值均为十进制):/p pA.11 B. 10 C.8 D.2/p p题目涉及到二进制的运算,将img src="https://latex.csdn.net/eq?11" /转为二进制形式,其后八位为:/p pre class="brush:python;toolbar:false"0000 1011/pre p对于img src="https://latex.csdn.net/eq?10" /,其二进制位数为:/p pre class="brush:python;toolbar:false"0000 1010/pre p对于二者的img src="https://latex.csdn.net/eq?%7C" /运算,规则为二进制位数有img src="https://latex.csdn.net/eq?1" /为img src="https://latex.csdn.net/eq?1" /,全img src="https://latex.csdn.net/eq?0" /则为img src="https://latex.csdn.net/eq?0" /.:/p pre class="brush:python;toolbar:false"11:0000 1011 10:0000 1010 运算结果:0000 1011/pre p因此答案选择img src="https://latex.csdn.net/eq?A" //p p8.fun(21)运行结果是/p pre class="brush:python;toolbar:false" int fun(int a){ a^=(15)-1; return a; }/pre pA.10 B. 5 C.3 D.86/p p在本题目中,涉及到了两个操作符,分别是异或操作符img src="https://latex.csdn.net/eq?" /^,以及位运算操作符img src="https://latex.csdn.net/eq?%3E%3E%20%5C%2C%20%5C%2C%20%5C%2C%20%3C%3C" /。对于异或操作符,其运算规则为两个二进制位相异为img src="https://latex.csdn.net/eq?1" /,相同则为img src="https://latex.csdn.net/eq?0" /。/p p对于本处的位操作符是左移操作符img src="https://latex.csdn.net/eq?%3C%3C" /,其规则是右边二进制位丢弃且补img src="https://latex.csdn.net/eq?0" //p p而对于右移操作符img src="https://latex.csdn.net/eq?%3E%3E" />,则分为算术右移和逻辑右移,对于题目,一般默认采用算术右移,即右边丢弃,左边补上符号位,负数补,正数补.移动前:0000 0001 移动后:0010 0000移动后,此时二进制位数转换为进制,则表示的数为。所以,答案是变量,即与的异或,即:
21的二进制位:0001 0101 31的二进制位:0001 1111 异或结果: 0000 10109.若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是
A.*p+=1;
B. (*p)++;
C.++(*p)
D. *p++
在本题目中,涉及到了操作符结合的优先顺序,在选项中,的优先级大于,因此可以增到。对于存在括号,因此不做解释,可以增到.对于选项由于后置的优先级大于。但是由于是后置,因此选项的整体运行顺序为:解引用指针,在对指针进行,答案选择
10.下面关于"指针"的描述不正确的是
A.当使用free释放掉一个指针内容后,指针变量的值被置为NULL
B. 32位系统下任何类型指针的长度都是4个字节
C.指针的数据类型声明的是指针实际指向内容的数据类型
D.野指针是指向未分配或者已经释放的内存地址
对于选项,当指针被后,指针变量的值不是,而是依旧指向一块空间的地址,但是由于这块空间被释放,因此指针为野指针。
对于选项正确,此处给出避免野指针的措施,即创建指针时即使初始化,掉指针指向的空间后将指针置空,不进行数组的越界访问
二.编程:
2.1 删除公共字符:
题目对于链接如下:
删除公共字符_牛客题霸_牛客网 (nowcoder.com)对于本题,可以利用哈希的思想进行解决,首先创建两个类型的对象,分别命名为,其中,分别用于接收第一行、第二行的输入。
在完成输入后,创建一个数组,用于统计中各个字符出现的次数,如果出现一个字符,则对于数组的位置置为.
最后,从头遍历中的字符,如果位置的值为,即中的字符在数组中在中没有出现过。则输出该字符,具体代码如下:
int main() { string str1,str2; getline(cin,str1); getline(cin,str2); int arr[256] = {0}; for( size_t i = 0; i n; v.resize(3*n); for( size_t i = 0; i > v[i]; } long long sum = 0; sort(v.begin(),v.end()); for( size_t j = 0; j