c语言的一些题(2024_1_7)

发布时间:2024年01月07日

变种水仙花数?

#include <stdio.h>

int main() {
    int a = 10000;

    for (; a < 100000; a++)
    {
        if ((a / 10000) * (a % 10000) + (a / 1000) * (a % 1000) + (a / 100) * (a % 100) + (a / 10) * (a % 10) == a)
            printf("%d ", a);
    }
    return 0;
}
//变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461), (14和61), (146和1), 如果所有拆分后的乘积之和等于自身,则是一个Lily Number。
//
//例如:
//
//655 = 6 * 55 + 65 * 5
//
//1461 = 1 * 461 + 14 * 61 + 146 * 1
//
//求出 5位数中的所有 Lily Number。

?该题太简单,不叙述,展示下代码就行。

序列中删除指定数字

#include <stdio.h>

int main() {
    int arr[50] = { 0 };
    int a;
    scanf("%d", &a);
    for (int b = 0; b < a; b++)
    {
        scanf("%d", &arr[b]);
    }
    int c = 0;
    scanf("%d", &c);
    for (int b = 0; b < 50; b++) {
        if (arr[b] == c)
            arr[b] = 0;
    }
    for (int b = 0; b < 50; b++)
    {
        if (arr[b] != 0)
            printf("%d ", arr[b]);
    }
    return 0;
}
//有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
//
//数据范围:序列长度和序列中的值都满足 1≤n≤50
//输入描述:
//第一行输入一个整数(0≤N≤50)。
//
//第二行输入N个整数,输入用空格分隔的N个整数。
//
//第三行输入想要进行删除的一个整数。
//
//输出描述:
//输出为一行,删除指定数字之后的序列。

其过程较简单,不叙述,就展示代码?。?

?联合体判断大小端

union act{
	short a;
	char  b;
}c = {0};

int main() {
	c.a = 1;
	printf("%d", c.b);//小端就是1,大端就是0

}

其过程较简单,不叙述,就展示代码?

?我们用的是vs系统,所以vs系统是小端存储模式(大部分系统都是小端存储模式)

求结构体内存 (define的认知引发错误)

?这题之所以错误是对#define认知的不清楚,define执行的是查找替换,并不会计算2+3,单纯是把2+3换成max_size,而不是max_size为5.所以在最后计算时max_size换回原来的2+3就变为3*2+3=9,答案为D.

?该题struct为位段类型,其中的:和数字之所以没显示其实是把 :8隐藏了。(之前一篇文章结构体位段中讲过)

数据在内存中的存储(位段题)

?

其中涉及了位段,但重点不是这,是当我们将位段中的数修改为其他数时,要注意一个字节内部的比特位永远是高进制在左边,低进制在右边。所以在修改时方向不要弄反,高进制比特位本该在左边,却在右边,所以一个字节内部比特位顺序一定不能变(两个字节之间顺序可以改变)

对于这个知识点,之前在结构体文章中的数据在内存中的存放额外知识点里讲过(更详细)。

对于这个求结果其实挺简单的,上面有解析,就不说了

?枚举的题

?

?

在之前枚举的知识点中讲过 在枚举常量赋完初值后它的下一个枚举常量的值则是以上一个枚举常量的值为基础加一的。(切记要记住)?所以答案应该为 1,257.

?

?

文章来源:https://blog.csdn.net/Easonmax/article/details/135440991
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。