假期刷题day1

假期刷题day1

1、下面输出的是什么(D)

char a=101;
int sum=200;
a+=27;sum+=a;
printf("%d\n",sum);
A: 327 B: 99 C: 328 D: 72

解析:D

a是char类型,有符号,a+27=128,但由于a是有符号的char,范围为
-128~127,故输出a为-128,sum=72
说明一下为什么
01111111+1–>10000000(最高位变成1,成为负数)
正数怎么存怎么取,负数存进去,取出的是补码

2、对于下面代码执行后输出的是(D)

int value = 1024;
char condition = *((char*)(&value));
if(condition) value += 1; condition = *((char*)(&value));
if(condition) value += 1; condition = *((char*)(&value));
printf("%d %d", value, condition);

A: 1026 1 B: 1025 0 C: 1025 1 D: 1024 0

解析D

((char)(&value)) 强转解引用后得到的是0;
后两句不执行,直接打印出答案

3、假设在32位机器上,读代码选结果( A)

void func(char para[100])
{
void *p = malloc(100);
printf("%d, %d\n", sizeof(para), sizeof(p));
}

A: 4,4 B: 100,4 C: 4,100 D: 100,100

解析:

传入的数组会被默认转成指针,4个字节,p申请的空间是100,但p指针本身4个字节,指向开辟的空间首地址
所以答案是4,4

4、以下程序执行后的输出结果为( C)

#include <stdio.h>
void func(char *p) { p = p + 1; }
int main()
{
char s[] = {'1', '2', '3', '4'};
func(s);
printf("%c", *s);
return 0;
}

A: 2 B: 编译错误 C: 1 D: 无法确定

解析:

形参的改变不影响实参,s指向1,调用func函数,改变了p指向2,调用结束就销毁了,s没改变,仍旧指向1

5、已知数组D的定义是 int D[4][8]; 现在需要把这个数组作为实参传递给一个函数进行处理。下列可以作为对应的形
参变量说明的是【多选】( CD)

A: int D[4][] B: int *s[8] C: int(*s)[8] D: int D[][8]

解析:

A错,只有行没有列,不行,D对
B是8个int*类型的一维数组,不行
C的(*s)可以变成s[ ],最后变成int s[ ][ 8 ],可以

二、编程题
1、自守数是指一个数的平方的尾数等于该数自身的自然数。请求出n(包括n)以内的自守数的个数
例如: 25^2 = 625 , 76^2 = 5776 , 9376^2 = 87909376 。
输入描述:int型整数
输出描述:n以内自守数的数量。
OJ链接【牛客网题号: HJ99 自守数】【难度:中等】

示例:
输入:5
2000
输出:3
8
说明:对于样例一,有0,1,5,这三个自守数

2、返回小于 N 的质数个数
输入描述:一个整数N
输出描述:小于N的质数数量
备注:0、1 不属于质数。
OJ链接【牛客网题号: OR86 返回小于 N 的质数个数】【难度:简单】

示例:
输入:10
输出:4
说明:N=10,质数有 [2, 3, 5, 7]

答案
自守数

#include <stdio.h>

int main() {
    int n=0;
    int count=0;
    int num=10;
    scanf("%d",&n);
    for(int i=0;i<=n;i++)
    {
        if(i>=num)
            num*=10;
        if((i*i-i)%num==0)
            count++;  
    }
    printf("%d",count);
}

质数

#include <stdio.h>
#include<stdbool.h>>

bool is_prime(int n){
    for(int i=2;i<n;i++){
        if(n%i==0)
            return false;
    }
    return true;
}
int main() {
    int n=0;
    scanf("%d",&n);
    int count=0;
    for(int i=2;i<n;i++){
        if(is_prime(i))
            count++;
    }
    printf("%d",count);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翻转的乌龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值