笔试强训day1

目录

一. 单选

二. 编程

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
%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---255
int    占四个字节,范围大小:-2^31-1---+2^31-1
double 占八个字节,范围大小: 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 0 
3 2 0
4 5 6 0
0 0 0 0 
7. 选择表达式 11|10 的结果(本题数值均为十进制)()
A 11
B 10
C 8
D 2
按位或 | 有1出1 ,无1出0
11: 0000 1011
10: 0000 1010
ret: 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 0001
1<<5: 0010 0000-->32
a=21^31 ^按位异或 相同出0,相异出1
      21:0001 0101
      31:0001 1111
21^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;
}
               

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值