习题练习 C语言(暑期)
编程能力小提升!
- 前言
- 一、转义字符
- 二、重命名与宏定义
- 三、三目运算符
- 四、计算日期到天数转换
- 五、计算字符串长度
- 六、宏定义应用
- 七、const常量
- 八、C语言基础
- 九、const常量(二)
- 十、符号运算
- 十一、记负均正
- 十二、SWITCH,CASE
- 十三、错误的集合
- 十四、密码检查
- 总结
前言
今天为大家分享我暑假期间所练习的一些小题目!
相信大家看完之后都会有所提升的!
加油!
一、转义字符
以下不正确的定义语句是( )
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};
题目解析:
八进制数字是0-7,没有8,故B选项中’\8’是错误的
题目答案:
B
知识点记忆:
\ddd ddd表示1到3个八进制数 如:\130 转义为 字符X
\xhh hh表示1到2位十六进制数 如:\x30 转义为 字符0
\ddd 最多只支持三位数字,并且三位数字也不是任意的,一旦大于等于八进制数 '/400 '(十进制256=8进制400)就超过了ascall码的范围,编译器就会报错。另外大于三位,或者遇到非八进制数字时则转换结束,直接取末尾数字。
如果具体不清楚的话,可以看看这位大佬的详细解析:
转义字符
二、重命名与宏定义
test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】( )
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;
A: a B: b C: c D: d
题目解析:
因为#define是宏定义,仅仅是直接替换,INT_PTR a, b;
进行宏替换后代码是这样的:int *a, b;这里的int *是a的类型,b的类型是int,故此次b只是int类型。
而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。
#define INT_PTR int*
typedef int* int_ptr;
int* a, b;//但是不会与后面的b结合成为整形指针
int* c, d;//c,d都是重命名之后的类型
所以 a,c,d才是指针类型
题目答案:
ACD
三、三目运算符
若给定条件表达式 (M)?(a++):(a–) ,则其中表达式 M ( )
A: 和(M0)等价
B: 和(M1)等价
C:和(M!=0)等价
D: 和(M!=1)等价
题目解析:
在此表达式中,若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
题目答案:
C
知识点记忆:
(表达式1)? (表达式2): (表达式3)为三目运算符。
计算规则为:先判断表达式1是否为真,若为真,则计算表达式2,并将表达式2的结果作为整个表达式最终的结果,表达式3不计算;
否则,表达式3的结果为最终结果,表达式2不计算
四、计算日期到天数转换
题目链接:OJ链接
题目解析:
此题可以先通过输入的年份判断是否为闰年;
再用switch函数依次相加输入月份之前的天数;
最后加上本月已过天数,就是最终的天数;
题目答案:
#include <stdio.h>
int main() {int a, b, c;while (scanf("%d %d %d", &a, &b, &c) != EOF) { int days=0;//统计天数switch(b-1){//相加输入月份之前的天数case 11:days+=30;case 10:days+=31;case 9:days+=30;case 8:days+=31;case 7:days+=31;case 6:days+=30;case 5:days+=31;case 4:days+=30;case 3:days+=31;case 2:if((a%4==0&&a%100!=0)||a%400==0){days+=29;}else{days+=28;}case 1:days+=31;case 0:days+=c;//加上本月已过天数}printf("%d",days);}
return 0;
}
知识点记忆:
闰年判断:
可以被4整除但不能被100整除;
或者可以被400整除;
五、计算字符串长度
以下程序段的输出结果是( )
#include<stdio.h>
int main()
{
char s[] = "\\123456\123456\t";
printf("%d\n", strlen(s));
return 0;
}
A: 12 B: 13 C: 16 D: 以上都不对
题目解析:
\\ 表示字符’‘,\123表示字符’{',\t表示制表符,这些都是一个字符;
所以有效字符串长度为12
题目答案:
A
六、宏定义应用
若有以下程序,则运行后的输出结果是( )
#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
printf("%d\n", NUM);
return 0;
}
A: 4 B: 8 C: 9 D: 6
题目解析:
宏只是替换,替换后NUM的样子是(2+1+1)*2+1/2,计算得8
题目答案:
B
七、const常量
下面3段程序代码的效果一样吗( )
int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;
A: (2)=(3) B: (1)=(2) C: 都不一样 D: 都一样
题目解析:
const在的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在的右边,则指针的指向不可变。
简记为"左定值,右定向",(1)和(2)const都在的左边,(3)中const在的右边,所以应该选择B。
题目答案:
B
八、C语言基础
5、对于下面的说法,正确的是( )
A: 对于 struct X{short s;int i;charc;},sizeof( X )等于sizeof(s) + sizeof( i ) + sizeof( c )
B: 对于某个double变量a,可以使用 a == 0.0 来判断其是否为零
C: 初始化方式 char a[14] = “Hello, world!”; 和chara[14]; a = “Hello, world!”;的效果相同
D: 以上说法都不对
题目解析:
A选项,没有考虑内存对齐。B选项,考察double类型的比较,由于浮点数存在误差不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。C选项,a为数组首地址是常量不能改变,所以A,B,C都是错的,选择D
题目答案:
D
九、const常量(二)
请问下列表达式哪些会被编译器禁止【多选】( )
int a = 248, b = 4;
int const *c = 21;
const int *d = &a;
int *const e = &b;
int const * const f = &a;
A: *c = 32; B: *d = 43 C: e=&a D: f=0x321f
题目解析:
如果 const 位于 * 的左侧,则 const 就是用来修饰指针所指向的变量,即指针指向常量;
*c 和 *d不能变。
如果 const 位于 * 的右侧,则 const 就是修饰指针本身,即指针本身是常量;
e 和f 不能变。
题目答案:
ABCD
十、符号运算
下面代码段的输出是( )
int main()
{
int a=3;
printf("%d\n",(a+=a-=a*a));
return 0;
}
A: -6 B: 12 C: 0 D: -12
题目解析:
a+=a-=aa等价于a=a+(a=a-aa),即先计算a=a-aa,所以此时a的值为3-33=-6,再计算-6+(-6)=-12赋值给a,所以a的值为-12,也就是整个表达式的值,所以应选择D
题目答案:
D
知识点记忆:
十一、记负均正
题目链接:OJ链接
题目解析:
其实这道题不难,记录两个变量用来记录正负整数个数,再用一个变量来计算整数总和,最后再通过计算就可以得到记负均正;
但是这道题目有一个大坑,那就是数据全为0时,0不能作为除数使用,会出现-NAN;
所以要区分情况计算!
题目答案:
#include <stdio.h>
int main() {int n = 0;while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 caseint count1 = 0, count2 = 0, tmp;float sum = 0;for (int i = 0; i < n; i++) {scanf("%d", &tmp);if (tmp < 0) {count1++; } else if (tmp > 0) {sum += tmp; count2++; }}if(count2==0){printf("%d %.1f",count1,0.0);}else{printf("%d %.1f",count1,sum/count2);}}return 0;
}
十二、SWITCH,CASE
若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是
#include <stdio.h>
int main()
{
char c;
int v0=0,v1=0,v2=0;
do
{
switch(c=getchar())
{
case'a':case'A':
case'e':case'E':
case'i':case'I':
case'o':case'O':
case'u':case'U':v1 += 1;
default:v0+= 1;v2+=1;
}
}while(c!='\n');
printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
return 0;
}
A: v0=7,v1=4,v2=7 B: v0=8,v1=4,V2=8 C: v0=11,v1=4,v2=11 D:v0=12,v1=4,v2=12
题目解析:
代码switch语句中没有break,则每次找到入口进入后,顺序执行到代码块结束为止。例如当c为’A’时,从case 'A’进入,先后执行v1+=1;v0+=1;v2+=1;,而当c为’p’时,从default进入,先后执行v0+=1;v2+=1;,容易看出最终v0和v2是相等的;
所以程序中v0、v2计算的是字符串长度;
而v1统计的是aeiouAEIOU字符出现的次数;
题目答案
D
十三、错误的集合
题目链接:OJ链接
提示:
2 <= nums.length <= 10^4 ;
1 <= nums[i] <= 10^4;
题目解析:
使用标记的方式就可以找出重复的数字,数组中出现过哪个数字就把对应数字作为下标在对应位置1,表示已经标记出现过,如果哪个数据对应位已经置1,则表示就是重复的数字。有了重复的数字,拿 [1, n] 的总和减去去掉重复数据的数组总和就是丢失的数据。 其实使用标记法时出现的数字对应位每次 ++ ,则最后出现0次的就是丢失,出现2次的就是重复的,这样的方式也可以,不过需要多次遍历。
图例解析:
题目答案:
int* findErrorNums(int* nums, int numsSize, int* returnSize){*returnSize = 2;//遍历nums数组,将其中数据对应的位置1, 哪一位如果已经重置过则意味着数据重复了int *arr = (int *)calloc(numsSize + 1, sizeof(int));//申请numsSize个整形空间,并初始化为0int *ret = (int *)calloc(*returnSize, sizeof(int));//申请2个整形空间,并初始化为0int cur_sum = 0, old_sum = 0;for (int i = 0; i < numsSize; i++) {if (arr[nums[i]] == 1) { //这个数字在上边数组的对应位置已经置过1了,则重复ret[0] = nums[i];//找到重复的数字}arr[nums[i]] = 1; //将标记数组的对应数据位置1old_sum += i + 1; // 1~n的求和cur_sum += nums[i]; //当前数组中的数据求和(多了一个重复的,少了一个丢失的)}ret[1] = old_sum - (cur_sum - ret[0]);//原始总和,减去去掉重复后的当前总和就是丢失的数字free(arr);return ret;
}
十四、密码检查
题目链接:OJ链接
题目解析:
这道题只需要将字符串从头到尾的每种字符(大写字符,小写字符,数字,其他字符)分别统计出来后。然后逐个判断是否符合条件即可。而条件的判断包含有:
. 长度不小于8
. 不能以数字开头
. 只能包含字母和数字
. 大小写和字符必须具备两种以上
题目答案:
#include <stdio.h>
int main() {int n;while (scanf("%d", &n)!=EOF) { for(int i=0;i<n;i++){char arr[101]={0};scanf("%s",arr);//捕捉输入的密码if(strlen(arr)<8){//密码长度小于8printf("NO\n");continue;}if(arr[0]>='0'&&arr[0]<='9'){//密码以数字开头printf("NO\n");continue;}int upper = 0, lower = 0, digit = 0, other = 0;char*p=arr;while(*p!='\0'){//统计各种字符个数if(*p>='a'&&*p<='z')lower++;else if(*p>='A'&&*p<='Z')upper++;else if(*p>='0'&&*p<='9')digit++;else other++;p++;}if(other>0){{ // 有其他字符(注意:密码只能由数字和字母组成)printf("NO\n");continue;}if((upper>0)+(lower>0)+(digit>0)<2){//大写,小写,数字,必须具有两种以上,而比较运算真则1,假则0printf("NO\n");continue;} printf("YES\n");}}return 0;
}
总结
这次的分享就到这里啦!
内容还真的是很不少呢!
希望大家真的能从本文中有所收获!
相关文章:

习题练习 C语言(暑期)
编程能力小提升! 前言一、转义字符二、重命名与宏定义三、三目运算符四、计算日期到天数转换五、计算字符串长度六、宏定义应用七、const常量八、C语言基础九、const常量(二)十、符号运算十一、记负均正十二、SWITCH,CASE十三、错…...

C++中虚函数表的概念
当一个类对象指针调用虚函数时,这就涉及到 运行时多态 的概念。这意味着实际调用的函数取决于对象的实际类型,而不仅仅是指针的静态类型。 假设我们有以下的类层次结构: class Base { public:virtual void print() {std::cout << &qu…...

代码随想录算法训练营第四十八天 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍III
代码随想录算法训练营第四十八天 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍III 198.打家劫舍213.打家劫舍II337.打家劫舍III 198.打家劫舍 题目链接 视频讲解 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金ÿ…...

uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管
目录 前言前期准备1.数据库的导入2.运行后端服务2.1数据库的后端配置2.2后端服务下载依赖,第三方库2.3启动后端服务 3.开启gitcode代码托管 ✨ 原创不易,还希望各位大佬支持一下! 👍 点赞,你的认可是我创作的动力&…...

在互联网+的背景下,企业如何创新客户服务?
随着互联网的发展,开始数字化转型的潮流,移动互联网平台为各个行业带来了发展的新方向。企业有了移动互联网的加持,为客户提供了更好的服务。当移动互联网平台能够为客户提供更好的用户体验时,相应地,客户也给企业带来…...

国内的化妆品核辐射检测
化妆品核辐射物质检测是指检测化妆品中的放射性物质,包括放射性核素和放射性同位素。这些放射性物质主要来源于环境中的放射性污染,如空气、水和土壤中的放射性物质,以及化妆品生产过程中的放射性污染,如原料、设备、工艺等。化妆…...

春秋云镜:CVE-2019-9042(Sitemagic CMS v4.4 任意文件上传漏洞)
一、题目 靶标介绍: Sitemagic CMS v4.4 index.php?SMExtSMFiles 存在任意文件上传漏洞,攻击者可上传恶意代码执行系统命令。 进入题目: admin/admin /index.php?SMExtSMFiles&SMTemplateTypeBasic&SMExecModeDedicated&SMFil…...

20230828工作日志:
今天遇到了很多问题,下次可以做得更好更快的几个地方: 1 sql语句的检查 肯定要先在navicate 里执行看,是否有语法错误。即使没有,也还是要注意一些问题:IDEA里换行的时候,“后面要空一格,如果连…...

flink on yarn 部署
需要jars -rwxr-xrwx 3 root supergroup 58284 2022-11-30 03:44 /lib/flink/commons-cli-1.5.0.jar -rw-r--r-- 3 root supergroup 48497 2022-12-10 03:04 /lib/flink/flink-cep-scala_2.12-1.14.3.jar -rw-r--r-- 3 root supergroup 189468 2022-12-10…...

postgresql基于postgis常用空间函数
1、ST_AsGeoJSON 图元转geojson格式 select ST_AsGeoJSON(l.geom) from g_zd l limit 10 2、 ST_Transform 坐标转换 select st_transform(l.shape, 3857) from sde_wf_cyyq l limit 10select st_astext(st_transform(l.shape, 3857)) from sde_wf_cyyq l limit 103、st_aste…...

详细讲解移植u-boot.2022.10版本移植到开发板基本方法
大家好,我是ST。 今天给大家讲一讲如何将u-boot.2022.10版本移植到imx6ull开发板上。 环境 选项内容编译主机UbuntuLTS 18.04目标板ATK I.MX6ULL(512MB DDR3 8GB EMMC)u-boot版本2022.10交叉编译工具链gcc-linaro-7.5.0-2019.12-i686…...

Vue.js2+Cesium1.103.0 十一、Three.js 炸裂效果
Vue.js2Cesium1.103.0 十一、Three.js 炸裂效果 Demo ThreeModelBoom.vue <template><div:id"id"class"three_container"/> </template><script> /* eslint-disable eqeqeq */ /* eslint-disable no-unused-vars */ /* eslint-d…...

Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问
前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation(原为 Node.js Foundation,已与 JS Foundation 合并)持有和维护,亦为 Linux 基金会的项目。Node.js 采用 Google 开发…...

爬虫入门01
1. 请求头中最常见的一些重要内容 User-Agent : 请求载体的身份标识(⽤啥发送的请求)Referer: 防盗链(这次请求是从哪个⻚⾯来的? 反爬会⽤到)cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token) 2. 响应头中一些重要内容 cookie: 本地字符串数据信息(⽤户登录信息, 反…...

解读GIS软件:从ArcGIS到山海鲸可视化的全方位介绍
在现代社会,地理信息系统(GIS)的应用已经渗透到了各个领域,为我们提供了丰富的地理数据分析和可视化工具。下面介绍几款常见的GIS工具软件,一起来了解它们的特点和优势。 1. ArcGIS: ArcGIS由Esri公司开发,…...

嵌入式通用硬件模块设计——串口音频播放模块
模块功能展示: 串口音频控制模块 一、简介 方案为串口音频播放芯片功放芯片,口音频播放芯片IC为my1690-16s,功放为PAM8406。 1、my1690-16s 迈优科技的一款由串口控制的插卡MP3播放控制芯片,支持串口控制播放指定音频、音量调节…...

【PLSQL】PLSQL基础
文章目录 一:记录类型1.语法2.代码实例 二:字符转换三:%TYPE和%ROWTYPE1.%TYPE2.%ROWTYPE 四:循环1.LOOP2.WHILE(推荐)3.数字式循环 五:游标1.游标定义及读取2.游标属性3.NO_DATA_FOUND和%NOTFO…...

【C++笔记】C++内存管理
【C笔记】C内存管理 一、C中动态内存申请的方式二、new和delete的实现原理2.1、operator new和operator delete函数 一、C中动态内存申请的方式 在C语言中我们需要动态申请空间的时候我们通常都是用malloc函数,但是malloc函数对自定义类型是没什么问题的࿰…...

十四五双碳双控时代下的“低碳认证”
目录 前言 十四五双碳双控时代下的“低碳认证” 一、关于“低碳认证” 二、低碳认证优势 三、环境产品认证EPD 四、EPD相关运营机构 五、碳中和相关机构 六、EPD的认证流程 七、低碳产品认证认证流程和要求 八、相关机构认证证书样例 九、证书附件表 前言 通过本篇文…...

Android——基本控件(下)(十九)
1. 菜单:Menu 1.1 知识点 (1)掌握Android中菜单的使用; (2)掌握选项菜单(OptionsMenu)的使用; (3)掌握上下文菜单(ContextMenu&am…...

聚类分析 | MATLAB实现基于DBSCAD密度聚类算法可视化
聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化 目录 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于DBSCAD密度聚类算法可视化,MATLAB程序。 使用带有KD树加速的dbscan_with_kdtree函数进行…...

reactantd(12)动态表单的默认值问题
最近遇到一个需求是有一个表单可以输入各种信息,然后还需要有一个编辑功能,点击编辑的时候需要把当前数据填入到表单里面。在网上查了很多种方法,然后我的思路是使用initialValues搭配setState()使用。默认值都为空,然后点击单条数…...

无涯教程-Python机器学习 - Stochastic Gradient Boosting函数
它也称为梯度提升机。在下面的Python食谱中,我们将通过使用pima Indians糖尿病数据集上的 sklearn 的 GradientBoostingClassifier 类来创建随机梯度Boostingensemble模型进行分类。 首先,导入所需的软件包,如下所示: from pandas import read_csv from sklearn.model_select…...

SOLIDWORKS中多实体文件到装配体的转换技巧
我们在做机械等工程设计中,有时为了节省时间,需要把多实体的“零件”,直接转换为装配体,不再另外装配,这样能大大简化设计的操作时间,复杂程度。 在这里,我们首先要了解,SOLIDWORKS文…...

Transformer (Attention Is All You Need) 论文精读笔记
Transformer(Attention Is All You Need) Attention Is All You Need 参考:跟李沐学AI-Transformer论文逐段精读【论文精读】 摘要(Abstract) 首先摘要说明:目前,主流的序列转录(序列转录:给…...

Git企业开发控制理论和实操-从入门到深入(二)|Git的基本操作
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…...

Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞
Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞 经过验证的攻击者可利用该漏洞在受攻击的设备上注入恶意软件并远程访问文件 Western Digital 感谢 Positive Technologies 专家 Nikita Abramov 发现 Western Digital NAS 固件中的一个漏洞…...

【springboot】springboot定时任务:
文章目录 一、文档:二、案例: 一、文档: 【cron表达式在线生成器】https://cron.qqe2.com/ 二、案例: EnableScheduling //开启任务调度package com.sky.task;import com.sky.entity.Orders; import com.sky.mapper.OrderMapper; …...

腾讯云学生服务器申请、学生认证入口及学生机价格表
腾讯云学生服务器申请、学生认证入口及学生机价格表,学生机申请流程,腾讯云学生服务器优惠活动:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&…...

pip安装mysqlclient依赖报错 /bin/sh: 1: mysql_config: not found如何解决
报错信息: Collecting mysqlclient2.1.0Downloading https://mirrors.aliyun.com/pypi/packages/de/79/d02be3cb942afda6c99ca207858847572e38146eb73a7c4bfe3bdf154626/mysqlclient-2.1.0.tar.gz (87 kB)|███████████████████████████…...