目录
1. ACM编程题 标题:组队竞赛 | 时间限制:1秒 | 内存限制:32768K
2. ACM编程题 标题:删除公共字符 | 时间限制:1秒 | 内存限制:32768K
一. 单选
1. 以下for循环的执行次数是()
for(int x = 0, y = 0; (y = 123) && (x < 4); x++);
A 是无限循环
B 循环次数不定
C 4次
D 3次
for(初始化部分;条件判断部分;调整部分){}
其条件判断部分(y=123)&&(x<4)中,y=123,是赋值语句,恒为真.x<4是判断语句,循环执行4次(0,1,2,3)
2. 以下程序的运行结果是()
#include <stdio.h>
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
B computer , com
C computer , computer
D computer , compu.ter
%s 是输出字符串,那%5.3s呢?%X.Ys的格式化输出,X是总长度,Y是从字符串中从左边取Y位,剩下的补空格,右对齐
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());
return 0;
}
A -1
B 0
C 1
D 2
for(初始化部分;条件判断部分;调整部分){}j=0,赋值语句,恒为假.所以此for循环一次也不执行 0表示假,非0表示真所以k=0
4.
#include <stdio.h>
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
else的匹配:else总是和它最近的if配对第一个if语句: if(a == 1 && b++==2), &&与运算,两个表达式结构都为真,结果为真. b++==2,后置++,先判断再加加,所以b++==2为真
第二个if语句: if(b!=2||c--!=3), || 或运算,一个表达式为真,即为真.第一个if语句执行完以后b=3,所以第一个表达式为真,不会再执行判断第二个表达式,而是直接进入下一条语句.所以最后的输出结果就是 1 3 3
5. 若有定义语句:
int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是()
A char
B int
C double
D float
表示范围小的会自动提升为表示范围大的类型char 占一个字节,范围大小:-128---+127如果是无符号 unsigned char,范围大小:0---255int 占四个字节,范围大小:-2^31-1---+2^31-1double 占八个字节,范围大小: 1.7 x 10^(-308)~ 1.7 x 10^(+308)float 占四个字节,范围大小:3.4 x 10^(-38)~ 3.4 x 10^(+38)
6. 在 int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}}; 中,p[1][2]的值是()
A 1
B 0
C 6
D 2
二维数组 intarr[行][列] 数组的下标是从0开始的1 0 0 03 2 0 04 5 6 00 0 0 0
7. 选择表达式 11|10 的结果(本题数值均为十进制)()
A 11
B 10
C 8
D 2
按位或 | 有1出1 ,无1出011: 0000 101110: 0000 1010ret: 0000 1011-->11
8.
int fun(int a){
a^=(1<<5)-1;
return a;
}
fun(21)运行结果是()
A 10
B 5
C 3
D 8
1<<5 <<左移运算符1: 0000 00011<<5: 0010 0000-->32a=21^31 ^按位异或 相同出0,相异出121:0001 010131:0001 111121^31:0000 1010-->10
9. 若有定义语句:
int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()
A *p+=1;
B (*p)++;
C ++(*p)
D *p++
++的优先级大于*.*p++,先对指针p进行++,但此++为后置++,在真正++前先对p变量进行解引用获得year变量值,再对指针p进行++,最后并没有进行对year变量的值++
10. 下面关于"指针"的描述不正确的是()
A 当使用free释放掉一个指针内容后,指针变量的值被置为NULL
B 32位系统下任何类型指针的长度都是4个字节
C 指针的数据类型声明的是指针实际指向内容的数据类型
D 野指针是指向未分配或者已经释放的内存地址
当使用free释放掉一个指针内容后,指针变量指向一个被销毁的空间并未被置空,需要手动置空
二. 编程
1. ACM编程题 标题:组队竞赛 | 时间限制:1秒 | 内存限制:32768K
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
long long sum=0;//后台测试用例过大,超出int范围
vector<int> arr;
arr.resize(n*3);//扩容
for(int i=0;i<n*3;i++)
{
cin>>arr[i];
}
sort(arr.begin(),arr.end());//先排序
/*for(int i=0;i<n;i++)//两种for循环都可以
{
sum+=arr[arr.size()-2*(i+1)];
}*/
for(int i=n;i<=3*n-2;i+=2)
{
sum+=arr[i];
}
cout<<sum<<endl;
}
return 0;
}
2. ACM编程题 标题:删除公共字符 | 时间限制:1秒 | 内存限制:32768K
#include <iostream>
#include<string>
using namespace std;
int main()
{
string s1,s2;
getline(cin,s1);
getline(cin,s2);
int hash[256]={0};
//遍历第二个字符串
for(size_t i=0;i<s2.length();i++)
{
hash[s2[i]]++;//把s2字符串中对应的字符放在hash中对应的下标,并使其值变成1
}
string ret="";
//遍历第一个字符串
for(size_t i=0;i<s1.length();i++)
{
if(hash[s1[i]]==0)//未重复的字符
ret+=s1[i];
}
cout<<ret<<endl;
return 0;
}