【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day12

🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏:************************************************************************************************************************************************************************************************************************************************************《C语言》《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》****************************************************************************************************************************************************************************************************************************************************************

《编程工具入门指南》《C++知识分享》《C/C++知识补充强化合集》

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。

前言:我们距离学习完C语言已经很久了,在数据结构学完后,博主准备通过这16天的强化训练和大家一起回顾C语言的知识,今天依旧是五道选择和两道编程题,希望大家能有所收获。


目录

选择题:

编程题:

1.数字颠倒

2.单词倒排


选择题:

1、请阅读以下程序,其运行结果是( )
A: YES B: NO C: YESNO D: 语句错误

cpp 复制代码
int main()
{
	char c = 'A';
	if ('0' <= c <= '9') printf("YES");
	else printf("NO");
	return 0;
}

答案解析:

正确答案:A

'0'<=c<='9'并非判断x大于等于字符0,小于等于字符9,而是先执行'0'<=c,使用这个表达式的结果再和'9'比较,'0'的ASCII码值是48,'A'的ASCII码值是'65',故'0'<c是真值1,1无疑是小于字符'9'的,最终是真

2、假设编译器规定 int 和 short 类型长度分别为32位和16位,若有下列C语言语句,则 y 的机器数为( )
A: 0000 7FFA B: 0000 FFFA C: FFFF 7FFA D: FFFF FFFA

cpp 复制代码
unsigned short x = 65530;
unsigned int y = x;

答案解析:
正确答案:B

unsigned short类型的x变量2个字节保存了65530,十六进制形式为0xFFFA,x给y赋值时会整型提升,而无符号数在提升时高位补0,其实就相当于把x的值放在了y的低2个字节的空间中,故选B

3、下列程序的输出结果是什么( )
A: -2 B: 0 C: 1 D: 2

cpp 复制代码
#include<stdio.h>
int main()
{
	int n = 1001;
	int ans = 0;
	for (int i = 1; i <= n; ++i)
	{
		ans ^= i % 3;
	}
	printf("%d", ans);
	return 0;
}

答案解析:
正确答案:B

i % 3 的值按1、2、0循环,可推算出ans按1、3、3、2、0、0循环,循环进行1001次,而1001%6=5,也就是ans按规律得到的第5个数为最终结果,故ans=0

4、C 语言中,下列运算符优先级最高的是 ( )

A: ! B: % C: >> D: ==

答案解析:
正确答案:A

单目运算符的优先级通常都比较高,具体情况可查阅运算符优先级表格

5、要使 a 的低四位翻转,需要进行操作是( )

A: a|0xF B: a&0xF C: a^0xF D: ~a

答案解析:
正确答案:C

十六进制数0xF是4位1,参与运算时整型提升,高位都是0。低四位和1异或,0^1是1,1^1是0;高位和0异或,0^0是0,1^0是1。故而可以通过异或F使得a的低四位翻转,并保持高位不变


编程题:

1.数字颠倒

题目链接: 数字颠倒_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

cpp 复制代码
#include <stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    do{
        printf("%d",a % 10);
        a /= 10;
    }while(a);
    return 0;
}

题目解析:

  • 这道题只需要循环取出一个数字的每一位进行单独打印,打印完毕后换行即可。而获取数据的每一位,可以通过取每次对数字模和除以 10 来完成

2.单词倒排

题目链接: 单词倒排_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

cpp 复制代码
#include <stdio.h>
#include <string.h>
int main() {
    char str[10001] = {0};//字符串最长10000
    int row = 0;
    while (gets(str) > 0) {
        char* ptr = str;
        char* word[10000] = {NULL};
        while (*ptr != '\0') {
//如果是个字母字符,则是单词的起始字符
            if (('z' >= *ptr && *ptr >= 'a') || ('Z' >= *ptr && *ptr >= 'A')) {
                word[row++] = ptr;//保存每个单词的起始地址
//把本次的单词字母字符走完,直到遇到非字母字符
                while (*ptr != '\0' &&
                        (('z' >= *ptr && *ptr >= 'a') || ('Z' >= *ptr && *ptr >= 'A'))) {
                    ptr++;
                }
                continue;//不能继续向下,因为下边的ptr++会跳过当前的非字母字符
            }
            *ptr = '\0';//把非字母的数据全部替换为结尾标志
            ptr++;
        }
        for (int i = row - 1; i >= 0; i--) {
            printf("%s ",
                   word[i]);//针对所有单词的起始地址逆序开始打印即可
        }
        printf("\n");
    }
}

题目解析:

  • 这道题的解题思路不难,定义一个字符指针数组,用于保存每个单词的起始字符地址,接下来将非字母字符全部替换成为字符串结尾标志,则单词字符字母遇到结尾就结束了,相当于把一个字符串以非字母字符进行切割成为了多个字符串,最终对字符指针数组进行逆序打印每个单词即可

往期回 顾:

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day8

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day9

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day10

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day11

结语:本篇博客就到此结束了,C 语言的精髓在于对细节的掌控和对底层的理解,这需要持续实践。愿你带着这份训练中获得的思维与习惯,在编程路上走得更稳、更远。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

相关推荐
码匠许师傅7 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
2603_965148118 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
小小龙学IT9 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
SuperByteMaster10 小时前
timer.c 介绍
c语言
知无不研10 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
cfm_291411 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
C++ 老炮儿的技术栈12 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_4480111612 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
小白学大数据12 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
zlinear数据采集卡13 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#