跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 跨境学堂 > C及C++每日练习(1)

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

时间:2024-04-03 18:45:28 来源:网络cs 作者:康由 栏目:跨境学堂 阅读:

标签: 练习 
阅读本书更多章节>>>>

一.选择:

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

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

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

对于for循环,其组成部分可以四个部分:
%20 

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

对于上面给出的循环的循环条件,由于中间用于&&连接,因此,必须左右的条件都为真,循环才能继续进行。因此,当循环进行五次时,此时的,不满足条件,退出循环,因此答案选择:循环四次

%20

%20

2.以下程序的运行结果是()

%20
%20#include%20<stdio.h>%20int%20main(void)%20{%20%20%20%20%20printf("%s%20,%20%5.3s\n",%20"computer",%20"computer");%20%20%20%20%20return%200;%20}
%20

A.computer%20,%20puter%20

%20

B.%20computer%20,%20com%20

%20

C.%20computer%20,%20computer%20

%20

D.computer%20,%20compu.ter

%20

此题目的考点主要在于打印的格式,即题目中的%对于这种%格式的格式。其中表示输出字符串的宽度,表示左起截取字符串中的多少字符,且对齐格式为右对齐,如果字符不足则用空格补足。但是也存在特殊情况:

%20

当字符串长度,此时的作用不再生效。即输出左起截取字符串中的前个字符。

%20

字符串长度时,直接从头打印至尾部。

%20

例如本题中,,字符串长度,所以上述的打印格式应该为:打印字符串的长度,从左截取字符串中的个字符,由于截取的字符小于需要打印的字符,因此,用空格补齐,由于存在右对称,所以打印结果为:

%20
computer,空格空格com
%20

答案选择,不过此处的答案并没有体现右对齐和补齐空格。

%20

%20

%20

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

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

A.-1%20

%20

B.%200

%20

C.1%20

%20

D.2 

%20

在上面给出的代码中,调用了函数,结果打印函数的返回值。在函数的循环中,由于,因此,并不符合循环的判断条件,因此不会进入循环,所以直接返回.。答案选择

%20

%20

%20

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

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

A.1,2,3%20

%20

B.%201,3,2%20

%20

C.3,2,1%20

%20

D.1,3,3

%20

在本题给出的代码中,由于并没有搭配相应的括号,因此会有些混乱,下面将题目的格式进行一定的更改,即:

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

在第一个判断中,第一个条件判断为真,第二个条件由于是后置,即:先使用,后,因此也满足条件。但是在判断结束后,

%20

在第二个判断中,需要注意,此时的操作符存在短路机制,即如果第一个条件满足,则结果直接判断为真,不再判断第二个条件,哟与为真,因此不再运行。直接进行打印,此时的值分别是,因此答案选择

%20

%20

%20

5.若有定义语句:

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

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

%20

针对此题目,需要注意,不同类型的变量在进行运算时,会出现自动提升的机制,即表示数据范围小的类型会自动提升到表示范围大的类型,在题目给出的类型中,占用一个字节,占用字节,占用字节,因此,运算结果在最后会转换为。因此答案选择

%20

%20

%20

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

%20
int%20p[][4]%20=%20{{1},%20{3,%202},%20{4,%205,%206},%20{0}};
%20

A.1%20B.%200%20C.6%20D.2

%20

给出的数组是一个二维数组,其行数没有给出,列数为,在数组中的数组中,如果给出的数没有达到位,则会用补齐。因此,题目中给出的二维数组的结构为:

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

对于二维数组,其行、列数都是从开始算起的,因此,.,因此答案选择

%20

%20

%20

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

%20

A.11%20B.%2010%20C.8%20D.2

%20

题目涉及到二进制的运算,将转为二进制形式,其后八位为:

%20
0000%201011
%20

对于,其二进制位数为:

%20
0000%201010
%20

对于二者的运算,规则为二进制位数有,全则为.:

%20
11:0000%20101110:0000%201010%20运算结果:0000%201011
%20

因此答案选择

%20

%20

%20

8.fun(21)运行结果是

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

A.10%20B.%205%20C.3%20D.86

%20

在本题目中,涉及到了两个操作符,分别是异或操作符^,以及位运算操作符。对于异或操作符,其运算规则为两个二进制位相异为,相同则为

%20

对于本处的位操作符是左移操作符,其规则是右边二进制位丢弃且补

%20

而对于右移操作符,则分为算术右移和逻辑右移,对于题目,一般默认采用算术右移,即右边丢弃,左边补上符号位,负数补,正数补.

%20

在本题中,,其位移后为:

%20
移动前:0000%200001移动后:0010%200000
%20

移动后,此时二进制位数转换为进制,则表示的数为。所以,答案是变量,即的异或,即:

%20
21的二进制位:0001%20010131的二进制位:0001%201111异或结果:%20%20%20%200000%201010
%20

所以答案选择

%20

%20

%20

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

%20

A.*p+=1;

%20

B.%20(*p)++;%20

%20

C.++(*p)%20

%20

D.%20*p++

%20

在本题目中,涉及到了操作符结合的优先顺序,在选项中,的优先级大于,因此可以增到。对于存在括号,因此不做解释,可以增到.对于选项由于后置的优先级大于。但是由于是后置,因此选项的整体运行顺序为:解引用指针,在对指针进行,答案选择

%20

%20

%20

%20

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

%20

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

%20

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

%20

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

%20

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

%20

对于选项,当指针被后,指针变量的值不是,而是依旧指向一块空间的地址,但是由于这块空间被释放,因此指针为野指针。

%20

对于选项,指针的定义,正确

%20

对于选项正确,此处给出避免野指针的措施,即创建指针时即使初始化,掉指针指向的空间后将指针置空,不进行数组的越界访问

%20

%20

二.编程:

%20

2.1%20删除公共字符:

%20


题目对于链接如下:
删除公共字符_牛客题霸_牛客网 (nowcoder.com)

对于本题,可以利用哈希的思想进行解决,首先创建两个string类型的对象,分别命名为,其中,分别用于接收第一行、第二行的输入。

%20

在完成输入后,创建一个数组,用于统计中各个字符出现的次数,如果出现一个字符,则对于数组的位置置为.

%20

最后,从头遍历中的字符,如果位置的值为,即中的字符在数组中在中没有出现过。则输出该字符,具体代码如下:

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


2.2%20组队竞赛:

%20

题目分析:

本题题目较长,看起来较为复杂,其实原理并不难,具体如下:
题目会给定n个队伍,每个队伍均有三名选手,对于每个选手都定义了一个水平值,为了方便表示,这里将水平值定义为

%20

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

%20

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

%20

所以,解决题目的重点有两个,一是将选手的水平值排列成升序序列,此问题比较简单,直接调用函数即可。

%20

第二个问题,是如何取到第二大的值:

对于上面给出的图:蓝色方框表示需要选中的数,下面的蓝色数字表示数组的下标。对于数组的长度设为n,不难看出,蓝色方框选出的数的下标可以通过下面给出的式子表示,即:
                                n-2*(i+1) \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, i==0,1,2,......

因此,代码为:

#include <iostream>#include<vector>#include<algorithm>using namespace std;int main(){   vector<int> v;   int n = 0;   cin >> n;   v.resize(3*n);   for( size_t i = 0; i < 3*n; i++)   {    cin >> 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;    }

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/xuetang/2024-04-03/153503.html,文章来源:网络cs,作者:康由,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论