当前位置: 首页 > news >正文

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

🔥个人主页:@草莓熊Lotso

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

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

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

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


目录

选择题:

编程题:

1.打印从1到最大的n位数

2.计算日期到天数转换


选择题:

1.执行下面程序,正确的输出是( )

A: 5,7 B: 7,5 C: 3,8 D: 8,3

int x = 5, y = 7;
void swap()
{int z;z = x;x = y;y = z;
} 
int main()
{int x = 3, y = 8;swap();printf("%d,%d\n",x, y);return 0;
}

答案解析:

正确答案:C

swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平行关系;输出语句这里,考虑局部优先的原则,故选C

2.以下不正确的定义语句是( )

A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};

B: char c2[] = {'\x10', '\xa', '\8'};

C: char c1[] = {'1','2','3','4','5'};

D: int y[5+3]={0, 1, 3, 5, 7, 9};

答案解析:

正确答案:B
本题B选项考查转义字符,有如下格式,但八进制数字是0-7,没有8,故B选项中'\8'是错误的\ddd ddd表示1到3个八进制数 如:\130 转义为 字符X

\xhh hh表示1到2位十六进制数 如:\x30 转义为 字符0

3.test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】( )

A: a B: b C: c D: d

#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;

答案解析:

正确答案:ACD
因为#define是宏定义,仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的:int *a, b;这里的int *是a的类型,b的类型是int,故此次b只是int类型。而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。

所以 a,c,d才是指针类型

4.若给定条件表达式 (M)?(a++):(a--) ,则其中表达式 M ()
A: 和(M==0)等价 B: 和(M==1)等价 C: 和(M!=0)等价 D: 和(M!=1)等价

答案解析:

正确答案:C
给定条件表达式(M)?(a++):(a--)。 (表达式1)? (表达式2): (表达式3)为三目运算符。

计算规则为:先判断表达式1是否为真,若为真,则计算表达式2,并将表达式2的结果作为整个表达式最终的结果,表达式3不计算;否则,表达式3的结果为最终结果,表达式2不计算。 在此表达式中,若M=0,为假,计算a--; 若M≠0,为真,计算a++; 若要求与M等价,则要满足M取0时为假,取非0数值时为真。 c选项中:假定M取0,则M表示假,当M是0时,表达式M!=0不成立,为假,计算a--; 当M取非0数值时,M为真,表达式M!=0成立,为真,计算a++; 符合题意,选C

5.有如下定义语句,则正确的输入语句是【多选】( )

int b;
char c[10];

A: scanf("%d%s",&b,&c); B: scanf("%d%s",&b,c);

C: scanf("%d%s",b,c); D: scanf("%d%s",b,&c);

答案解析:

正确答案:AB

&c和c两个地址值是一样的,程序的效果相同,也没错,但同时也必须把变量b的地址给scanf,故CD错误,AB正确


编程题:

1.打印从1到最大的n位数

题目链接:打印从1到最大的n位数_牛客题霸_牛客网

题目描述:

题目样例:

代码演示:

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param n int整型 最大位数* @return int整型一维数组* @return int* returnSize 返回数组行数*/
int* printNumbers(int n, int* returnSize ) {// write code here*returnSize=pow(10,n)-1;int *arr=(int*)malloc(*returnSize*sizeof(int));for(int i=0;i<*returnSize;i++){arr[i]=i+1;}return arr;
}

题目解析:

  • 这里首先要清楚n位数中最大的数字,实际上就是 10^n - 1,这个清楚后动态申请空间,将数值填入就可以了,需要注意的是数组下标从0开始,而数值从1开始

2.计算日期到天数转换

题目链接:计算日期到天数转换_牛客题霸_牛客网

题目描述:

题目样例:

代码演示:

#include <stdio.h>int main() {int y, m,d;scanf("%d%d%d",&y,&m,&d);int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int days=0;if((y%4==0&&y%100!=0)||(y%400==0)&&m==2){day[2]+=1;}for(int i=1;i<m;i++){days+=day[i];}days+=d;printf("%d",days);return 0;
}

题目解析:

这道题简单解法其实将每个月的天数枚举出来,然后根据当前月份向前累加满月的天数,然后再加上当前月所在的天数。最终考虑平闰年的 2 月份区别是否增加一天。 其中需要注意的是平年和闰年的判断,而且是闰年的月份大于 2 的时候,也就是 2 月走完,总天数才能加1(比如 2000218,虽然是闰年,但是 2都没走完那是不能加上闰年多出的一天的).

往期回顾:

《解锁 C++ 起源与核心:命名空间用法 + 版本演进全知道》

《解锁 C++ 基础密码:输入输出、缺省参数,函数重载与引用的精髓》

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

http://www.dtcms.com/a/326029.html

相关文章:

  • 【12-激活函数】
  • 【PRML】分类
  • 普通大学本科生如何入门强化学习?
  • 算法73. 矩阵置零
  • MySQL权限管理和MySQL备份
  • 银行客户经营:用企业微信精准破解触达断层、效率瓶颈、数据孤岛三个痛点
  • GPT-5 全面解析与最佳实践指南
  • 容器 K8S Docker Kata 学习(一)
  • idea三个环境变量设置
  • Spring Boot Excel数据导入数据库实现详解
  • Spring-Security-5.7.11升级6.5.2
  • Socket(套接字)网络编程
  • Scala异步任务编排与弹性容错机制
  • [特殊字符]走进标杆工厂参观研学| 破茧成蝶的感悟之旅
  • Spring Boot 中 @Transactional 解析
  • Spring Boot启动事件详解:类型、监听与实战应用
  • PyCharm(2025.1.3.1)绑定 Conda 环境
  • SoftCnKiller:绿色小巧,流氓软件一键扫描!
  • 得物,三七互娱,游卡快手26秋招内推
  • 麒麟系统使用-PATH设置
  • 【Figma】Figma基础笔记二,常用快捷键和操作
  • 集成电路学习:什么是URDF Model统一机器人描述格式模型
  • 红队快速打包,通过 Sharp4CompressArchive 一键定制化压缩文件
  • “一车一码一池一充”:GB 17761-2024新国标下电动自行车的安全革命
  • gophis钓鱼流程
  • 企业内外网物理隔离时文件怎么传输更安全
  • 算法基础 1
  • 【排序算法】⑦归并排序
  • 模拟多重循环解决逻辑问题
  • Mysql系列--6、内置函数