C及C++每日练习(1)

一.选择:

1.以下for循环的执行次数是()

 for(int x = 0, y = 0; (y = 123) && (x < 4); x++);

A.是无限循环 B.循环次数不定 C.4次 D.3次

对于图片[1] - C及C++每日练习(1) - MaxSSL循环,其组成部分可以四个部分:

for(初始化;循环进行条件;调整){ 循环语句//}

对于上面给出的图片[1] - C及C++每日练习(1) - MaxSSL循环的循环条件,由于中间用于&&连接,因此,必须左右的条件都为真,循环才能继续进行。因此,当循环进行五次时,此时的图片[1] - C及C++每日练习(1) - MaxSSL,不满足条件,退出循环,因此答案选择:图片[1] - C及C++每日练习(1) - MaxSSL循环四次

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

此题目的考点主要在于打印的格式,即题目中的%图片[1] - C及C++每日练习(1) - MaxSSL对于这种%图片[1] - C及C++每日练习(1) - MaxSSL格式的格式。其中图片[1] - C及C++每日练习(1) - MaxSSL表示输出字符串的宽度,图片[1] - C及C++每日练习(1) - MaxSSL表示左起截取字符串中的多少字符,且对齐格式为右对齐,如果字符不足则用空格补足。但是也存在特殊情况:

当字符串长度图片[1] - C及C++每日练习(1) - MaxSSL,此时图片[1] - C及C++每日练习(1) - MaxSSL的作用不再生效。即输出左起截取字符串中的前图片[1] - C及C++每日练习(1) - MaxSSL个字符。

图片[1] - C及C++每日练习(1) - MaxSSL字符串长度时,直接从头打印至尾部。

例如本题中,图片[1] - C及C++每日练习(1) - MaxSSL,字符串长度图片[1] - C及C++每日练习(1) - MaxSSL,所以上述的打印格式应该为:打印字符串的长度图片[1] - C及C++每日练习(1) - MaxSSL,从左截取字符串中的图片[1] - C及C++每日练习(1) - MaxSSL个字符,由于截取的字符小于需要打印的字符,因此,用空格补齐,由于存在右对称,所以打印结果为:

computer,空格空格com

答案选择图片[1] - C及C++每日练习(1) - MaxSSL,不过此处的答案并没有体现右对齐和补齐空格。

3.下列main()函数执行后的结果为()

int func(){ int i, j, k = 0;for(i = 0, j = -1;j = 0;i++, j++){ k++;}return k; } int main(){ cout << (func()); 

A.-1

B. 0

C.1

D.2

在上面给出的代码中,调用了图片[1] - C及C++每日练习(1) - MaxSSL函数,结果打印图片[1] - C及C++每日练习(1) - MaxSSL函数的返回值。在图片[1] - C及C++每日练习(1) - MaxSSL函数的循环中,由于图片[1] - C及C++每日练习(1) - MaxSSL,因此,并不符合循环的判断条件,因此不会进入循环,所以直接返回图片[1] - C及C++每日练习(1) - MaxSSL.。答案选择图片[1] - C及C++每日练习(1) - MaxSSL

4.下面程序输出是什么?

#include  int main() {int a=1,b=2,c=3,d=0;if(a == 1 && b++==2)if(b!=2||c--!=3)printf("%d,%d,%d\n" ,a,b,c); else printf("%d,%d,%d\n" ,a,b,c); else printf("%d,%d,%d\n" ,a,b,c); return 0; }

A.1,2,3

B. 1,3,2

C.3,2,1

D.1,3,3

在本题给出的代码中,由于图片[1] - C及C++每日练习(1) - MaxSSL并没有搭配相应的括号,因此会有些混乱,下面将题目的格式进行一定的更改,即:

#include  int main() {int a=1,b=2,c=3,d=0;if(a == 1 && b++==2) { if(b!=2||c--!=3) { printf("%d,%d,%d\n" ,a,b,c);}else{ printf("%d,%d,%d\n" ,a,b,c);} else printf("%d,%d,%d\n" ,a,b,c); } return 0; }

在第一个图片[1] - C及C++每日练习(1) - MaxSSL判断中,第一个条件图片[1] - C及C++每日练习(1) - MaxSSL判断为真,第二个条件由于是后置图片[1] - C及C++每日练习(1) - MaxSSL,即:先使用,后图片[1] - C及C++每日练习(1) - MaxSSL,因此也满足条件。但是在判断结束后,图片[1] - C及C++每日练习(1) - MaxSSL

在第二个图片[1] - C及C++每日练习(1) - MaxSSL判断中,需要注意,此时的操作符图片[1] - C及C++每日练习(1) - MaxSSL存在短路机制,即如果第一个条件满足,则结果直接判断为真,不再判断第二个条件,哟与图片[1] - C及C++每日练习(1) - MaxSSL为真,因此不再运行图片[1] - C及C++每日练习(1) - MaxSSL。直接进行打印,此时图片[1] - C及C++每日练习(1) - MaxSSL的值分别是图片[1] - C及C++每日练习(1) - MaxSSL,因此答案选择图片[1] - C及C++每日练习(1) - MaxSSL

5.若有定义语句:

 int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是()

A.char B. int C.double D. float

针对此题目,需要注意,不同类型的变量在进行运算时,会出现自动提升的机制,即表示数据范围小的类型会自动提升到表示范围大的类型,在题目给出的类型中,图片[1] - C及C++每日练习(1) - MaxSSL占用一个字节,图片[1] - C及C++每日练习(1) - MaxSSL占用图片[1] - C及C++每日练习(1) - MaxSSL字节,图片[1] - C及C++每日练习(1) - MaxSSL占用图片[1] - C及C++每日练习(1) - MaxSSL字节,因此,运算结果在最后会转换为图片[1] - C及C++每日练习(1) - MaxSSL。因此答案选择图片[1] - C及C++每日练习(1) - MaxSSL

6.在下面给出的数组中中,p[1][2]的值是():

int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};

A.1 B. 0 C.6 D.2

给出的数组是一个二维数组,其行数没有给出,列数为图片[1] - C及C++每日练习(1) - MaxSSL,在数组中的数组中,如果给出的数没有达到图片[1] - C及C++每日练习(1) - MaxSSL位,则会用图片[1] - C及C++每日练习(1) - MaxSSL补齐。因此,题目中给出的二维数组的结构为:

{1,0,0,0}{3,2,0,0}{4,5,6,0}{0,0,0,0}

对于二维数组,其行、列数都是从图片[1] - C及C++每日练习(1) - MaxSSL开始算起的,因此,图片[1] - C及C++每日练习(1) - MaxSSL.,因此答案选择图片[1] - C及C++每日练习(1) - MaxSSL

7.选择表达式 11|10 的结果(本题数值均为十进制):

A.11 B. 10 C.8 D.2

题目涉及到二进制的运算,将图片[1] - C及C++每日练习(1) - MaxSSL转为二进制形式,其后八位为:

0000 1011

对于图片[1] - C及C++每日练习(1) - MaxSSL,其二进制位数为:

0000 1010

对于二者的图片[1] - C及C++每日练习(1) - MaxSSL运算,规则为二进制位数有图片[1] - C及C++每日练习(1) - MaxSSL图片[1] - C及C++每日练习(1) - MaxSSL,全图片[1] - C及C++每日练习(1) - MaxSSL则为图片[1] - C及C++每日练习(1) - MaxSSL.:

11:0000 101110:0000 1010 运算结果:0000 1011

因此答案选择图片[1] - C及C++每日练习(1) - MaxSSL

8.fun(21)运行结果是

 int fun(int a){a^=(1<<5)-1;return a; }

A.10 B. 5 C.3 D.86

在本题目中,涉及到了两个操作符,分别是异或操作符图片[1] - C及C++每日练习(1) - MaxSSL^,以及位运算操作符图片[1] - C及C++每日练习(1) - MaxSSL。对于异或操作符,其运算规则为两个二进制位相异为图片[1] - C及C++每日练习(1) - MaxSSL,相同则为图片[1] - C及C++每日练习(1) - MaxSSL

对于本处的位操作符是左移操作符图片[1] - C及C++每日练习(1) - MaxSSL,其规则是右边二进制位丢弃且补图片[1] - C及C++每日练习(1) - MaxSSL

而对于右移操作符图片[1] - C及C++每日练习(1) - MaxSSL,则分为算术右移和逻辑右移,对于题目,一般默认采用算术右移,即右边丢弃,左边补上符号位,负数补图片[1] - C及C++每日练习(1) - MaxSSL,正数补图片[1] - C及C++每日练习(1) - MaxSSL.

在本题中,图片[1] - C及C++每日练习(1) - MaxSSL,其位移后为:

移动前:0000 0001移动后:0010 0000

移动后,此时二进制位数转换为图片[1] - C及C++每日练习(1) - MaxSSL进制,则表示的数为图片[1] - C及C++每日练习(1) - MaxSSL。所以,答案是变量图片[1] - C及C++每日练习(1) - MaxSSL,即图片[1] - C及C++每日练习(1) - MaxSSL图片[1] - C及C++每日练习(1) - MaxSSL的异或,即:

21的二进制位:0001 010131的二进制位:0001 1111异或结果:0000 1010

所以答案选择图片[1] - C及C++每日练习(1) - MaxSSL

9.若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是

A.*p+=1;

B. (*p)++;

C.++(*p)

D. *p++

在本题目中,涉及到了操作符结合的优先顺序,在选项图片[1] - C及C++每日练习(1) - MaxSSL中,图片[1] - C及C++每日练习(1) - MaxSSL的优先级大于图片[1] - C及C++每日练习(1) - MaxSSL,因此可以增到图片[1] - C及C++每日练习(1) - MaxSSL。对于图片[1] - C及C++每日练习(1) - MaxSSL存在括号,因此不做解释,可以增到图片[1] - C及C++每日练习(1) - MaxSSL.对于选项图片[1] - C及C++每日练习(1) - MaxSSL由于后置图片[1] - C及C++每日练习(1) - MaxSSL的优先级大于图片[1] - C及C++每日练习(1) - MaxSSL。但是由于是后置图片[1] - C及C++每日练习(1) - MaxSSL,因此图片[1] - C及C++每日练习(1) - MaxSSL选项的整体运行顺序为:解引用指针,在对指针进行图片[1] - C及C++每日练习(1) - MaxSSL,答案选择图片[1] - C及C++每日练习(1) - MaxSSL

10.下面关于”指针”的描述不正确的是

A.当使用free释放掉一个指针内容后,指针变量的值被置为NULL

B. 32位系统下任何类型指针的长度都是4个字节

C.指针的数据类型声明的是指针实际指向内容的数据类型

D.野指针是指向未分配或者已经释放的内存地址

对于图片[1] - C及C++每日练习(1) - MaxSSL选项,当指针被图片[1] - C及C++每日练习(1) - MaxSSL后,指针变量的值不是图片[1] - C及C++每日练习(1) - MaxSSL,而是依旧指向一块空间的地址,但是由于这块空间被释放,因此指针为野指针。

对于图片[1] - C及C++每日练习(1) - MaxSSL选项,指针的定义,正确

对于图片[1] - C及C++每日练习(1) - MaxSSL选项正确,此处给出避免野指针的措施,即创建指针时即使初始化,图片[1] - C及C++每日练习(1) - MaxSSL掉指针指向的空间后将指针置空,不进行数组的越界访问

二.编程:

2.1 删除公共字符:

图片[93] - C及C++每日练习(1) - MaxSSL
题目对于链接如下:
删除公共字符_牛客题霸_牛客网 (nowcoder.com)

对于本题,可以利用哈希的思想进行解决,首先创建两个图片[1] - C及C++每日练习(1) - MaxSSL类型的对象,分别命名为图片[1] - C及C++每日练习(1) - MaxSSL,其中,图片[1] - C及C++每日练习(1) - MaxSSL分别用于接收第一行、第二行的输入。

在完成输入后,创建一个数组图片[1] - C及C++每日练习(1) - MaxSSL,用于统计图片[1] - C及C++每日练习(1) - MaxSSL中各个字符出现的次数,如果出现一个字符,则对于数组的位置置为图片[1] - C及C++每日练习(1) - MaxSSL.

最后,从头遍历图片[1] - C及C++每日练习(1) - MaxSSL中的字符,如果图片[1] - C及C++每日练习(1) - MaxSSL位置的值为图片[1] - C及C++每日练习(1) - MaxSSL,即图片[1] - C及C++每日练习(1) - MaxSSL中的字符在数组中在图片[1] - C及C++每日练习(1) - MaxSSL中没有出现过。则输出该字符,具体代码如下:

int main(){string str1,str2;getline(cin,str1);getline(cin,str2);int arr[256] = {0};for( size_t i = 0; i < str2.size(); i++){arr[str2[i]] = 1;}for(size_t j = 0; j < str1.size(); j++){if(arr[str1[j]] == 0){cout << str1[j];}}return 0;}

2.2 组队竞赛:

图片[105] - C及C++每日练习(1) - MaxSSL

题目分析:

本题题目较长,看起来较为复杂,其实原理并不难,具体如下:
题目会给定图片[106] - C及C++每日练习(1) - MaxSSL个队伍,每个队伍均有三名选手,对于每个选手都定义了一个水平值,为了方便表示,这里将水平值定义为图片[1] - C及C++每日练习(1) - MaxSSL

对于一个队伍整体的水平值等于队伍中第二高的水平值。

对于题目的要求,是需要图片[1] - C及C++每日练习(1) - MaxSSL个队伍的整体水平值达到最大。例如题目中给出的例子:图片[1] - C及C++每日练习(1) - MaxSSL。最大水平值的组合应该是图片[1] - C及C++每日练习(1) - MaxSSL图片[1] - C及C++每日练习(1) - MaxSSL.不难看出,在本题目中,最大的水平值永远无法取到。如果想要让两个队伍的水平值之和为最大。最优情况,是在每组中,均能取到所有人水平值的第二高。具体如下:
假如对于图片[1] - C及C++每日练习(1) - MaxSSL的组,其每个人的水平值为:图片[1] - C及C++每日练习(1) - MaxSSL。对于最优的水平值上面说到了,是取总体水平值的第二高。因此,也就是图片[1] - C及C++每日练习(1) - MaxSSL,而为了能取到图片[1] - C及C++每日练习(1) - MaxSSL,队伍中需要一个比图片[1] - C及C++每日练习(1) - MaxSSL大的值,一个最小的值,也就是图片[1] - C及C++每日练习(1) - MaxSSL.所以第一组分组为图片[1] - C及C++每日练习(1) - MaxSSL。同理,第二组的分组为图片[1] - C及C++每日练习(1) - MaxSSL。第三组为图片[1] - C及C++每日练习(1) - MaxSSL

所以,解决题目的重点有两个,一是将选手的水平值排列成升序序列,此问题比较简单,直接调用图片[1] - C及C++每日练习(1) - MaxSSL函数即可。

第二个问题,是如何取到第二大的值:
图片[122] - C及C++每日练习(1) - MaxSSL

对于上面给出的图:蓝色方框表示需要选中的数,下面的蓝色数字表示数组的下标。对于数组的长度设为图片[106] - C及C++每日练习(1) - MaxSSL,不难看出,蓝色方框选出的数的下标可以通过下面给出的式子表示,即:
图片[1] - C及C++每日练习(1) - MaxSSL

因此,代码为:

#include #include#includeusing namespace std;int main(){ vector v; int n = 0; cin >> 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 < n; j++) {sum += v[v.size()-2*(j+1)]; } cout << sum; return 0;}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享