c语言的一些题(2024_1_7)

文章介绍了C语言编程中的几个概念,包括如何检测变种水仙花数(LilyNumber)、从整数序列中删除指定数字、联合体的内存表示以及小端存储模式的应用。还讨论了结构体内存分配、位段的处理和枚举常量的自动增量规则。
摘要由CSDN通过智能技术生成

变种水仙花数 

#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.

 

 

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值