【C刷题】day4

一、选择题

1、设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( )

 A: n=0;while(ch=getchar()!='\n')n++;                             B: n=0;while(getchar()!='\n')n++;

C: for(n=0;getchar()!='\n';n++);                                         D: n=0;for(ch=getchar();ch!='\n';n++);

【答案】:

D

【解析】:

考点:for循环的逻辑

对于for循环,第一项初始化表达式只执行一次,因此ch只从输入流中取一个字符,之后就再不会取字符,因此会死循环


2、运行以下程序后,如果从键盘上输入 65 14<回车> ,则输出结果为( )
int main()
{
int m, n;
printf("Enter m,n;");
scanf("%d%d", &m,&n);
while (m!=n) //1
{while(m>n) m=m-n; //2while(n>m) n=n-m; //3
}printf("m=%d\n",m);
return 0;
}

A: 3 B: 2 C: 1 D: 0 

【答案】:

C

【解析】:

考点:while循环和嵌套循环(怎么理清思路)

初值m=65,n=14;循环1判断m!=n为真,来到循环2判断m>n为真,执行m=m-n;直到m=9,n=14;循环2结束来到循环3判断n>m为真,执行n=n-m;直到m=9,n=5;循环3结束回到循环1,如此往复直到m==n时,循环结束

上面的图表示m和n的变化,

蓝色部分表示while(m>n) m=m-n; //2

红色部分表示:while(n>m) n=n-m; //3

外部循环一直进行,直到m=n=1停止


3、若运行以下程序时,从键盘输入 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 

【答案】:

D

【解析】:

考点:do while循环的逻辑+case语句中的break易错点

注意点1:case语句后面没有break,那么执行完v1 += 1,还是会继续进入default:v0+= 1;v2+=1;

注意点2:do while循环是先执行,再进行判断,所以当c=r(倒数第二个字符),进入while循环,c就等于'\0',但是还是会执行do语句,v0和v2还是会+1


4、如下函数是求两个int数字最大公约数的,指出其中存在的问题【多选】( )
int gcd(char x,char y)
{int min = x < y ? x : y;for (min = 0; min > 0; min--)if (x % min = 0 && y % min = 0)return min;
}

A: 参数类型不对 B: 循环变量min初值不对 C: 判断等于的符号不对 D: 返回类型不对  

【答案】:

ABC

【解析】:

考点:==和=(==表示判断是否相等,=表示赋值运算符)

1.题目说是求两个int数字的最大公约数,所以实参是int,形参用char不对,会发生截断丢失数据;

2.min在for循环开始时更新为0,不再是两个形参中的较小值,不然上一条语句求min没作用;

3.判断是否整除的时候误将==写成=赋值运算符;

4.函数最终要返回一个int值,返回值类型没问题,

但是这里要强调一个选项中没写出的问题,如果是牛客网上的题,会报编译错误,说该函数不是在所有情况下都有返回值,只有在if条件成立的情况下有返回值,一般在vs上这种情况能通过,编译器会给一个默认的返回值。(即格式问题)


5、执行下面的程序段,语句3的执行次数为( )
for(i = 0; i <= n-1; i++) // (1)
for(j = n; j > i; j--) // (2)
state; // (3)

A: n(n+2)/2 B: (n-1)(n+2)/2 C: n(n+1)/2 D: (n-1)(n+2) 

【答案】:

C

【解析】:

考点:嵌套循环的循环总次数

外循环有n次,当i=0,内循环为n次,当i=1,内循环为n-1次,当i=2时,内循环为n-2次,以此类推,总次数为n+(n-1)+(n-2)+......+2+1,就是个等差数列,等于n(n+1)/2


二、编程题

1.错误的集合

5406e0f8f4114ed5b19261dec12c6eea.png

 【参考答案】: 

思路:

创建一个count数组统计出现2次和出现0次的数,再去遍历数组,如果出现两次就是arr【0】,没出现就是arr【1】

1.统计数字出现的次数:count[nums[i]]++

2.易错点:count数组的大小应该开辟numsSize+1个int类型大小(因为统计数字出现的次数时count【n】这个n是可以取到的,那么就需要开辟n+1个空间)

int* findErrorNums(int* nums, int numsSize, int* returnSize)
{*returnSize=2;//根据flag判断这两个数是否找到int flag1=0;int flag2=0;//为返回数组创建空间int *arr=(int *)malloc(sizeof(int)*2);//创建:统计每个数出现次数的数组countint *count=(int *)malloc(sizeof(int *)*(numsSize+1));//给count数组初始化为0memset(count,0,sizeof(int)*(numsSize+1));//统计nums数组每个数字出现的次数for(int i=0;i<numsSize;i++){count[nums[i]]++;//这里就解释了上面为啥要为count开辟numSize+1个int大小的空间}//找出重复的数arr【0】和缺失的数arr【1】for(int i=1;i<numsSize+1;i++){//如果两个数都找到了就停止遍历if(flag1&&flag2)break;//找重复的数if(count[i]==2){arr[0]=i;flag1=1;}//找缺失的数if(count[i]==0){arr[1]=i;flag2=1;}}return arr;
}

2.密码检查

5117da5ab3474ddc9162b18a94e9efdd.png

  【参考答案】: 

思路:

用flag来进行标记:flag若为0输出NO,为1则返回YES

再分别进行每个条件的判断

1.字符分类函数(eg:int isdigit(int c))的参数形式都是int类型,但是str字符串是char类型,那么就需要进行强转(int)

2.密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种:可以采取创建三个变量a,b,c分别代表这三类字符并初始化为0,如果出现就改为1,最后如果a+b+c<2就不满足条件

#include <ctype.h>
#include <stdio.h>
#include<string.h>
int main() 
{//输入n值int n = 0;scanf("%d", &n);//多次输入并判断while (n--) {//flag若为0输出NO,为1则返回YESint flag = 1;//分别统计大写字母,小写字母和数字是否出现,如果出现则为1,反之为0int a = 0;int b = 0;int c = 0;//输入一个字符串char str[101] = { 0 };scanf("%s", str);//判断密码长度至少为8  和 密码不能以数字开头if (strlen(str) < 8 || isdigit((int)str[0]))flag = 0;//密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种for (int i = 0; str[i] != '\0'; i++) {if (isupper((int)str[i]))a = 1;if (islower((int)str[i]))b = 1;if (isdigit((int)str[i]))c = 1;if (!(isalnum((int)str[i])))flag = 0;}//如果密码中大写字母,小写字母和数字这三种字符小于两种:则返回NOif (a + b + c < 2)flag = 0;//输出if (flag == 1)printf("YES\n");elseprintf("NO\n");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/100681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中文网 - Shell脚本 - 4

第1章 Shell基础&#xff08;开胃菜&#xff09; 4. 进入Shell的两种方式 在 Linux 发展的早期&#xff0c;唯一能用的工具就是 Shell&#xff0c;Linux 用户都是在 Shell 中输入文本命令&#xff0c;并查看文本输出&#xff1b;如果有必要的话&#xff0c;Shell 也能显示一些…

计算机毕业设计选什么题目好?springboot 社区流浪动物救助领养系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

短视频视频号矩阵系统源码独立部署开发对接

一、多账号矩阵管理功能&#xff08;基于api接口开发与没有官方接口开发的区别&#xff09; 基于API接口开发&#xff0c;可以通过调用官方提供的接口获取账号信息、创建新账号、更新账号设置等操作&#xff0c;实现自动化的账号管理绑定授权&#xff0c;通过相关的接口开发绑定…

如何在 Spring Boot 中进行文件上传

在 Spring Boot 中进行文件上传 文件上传是Web应用程序中常见的功能之一&#xff0c;它允许用户将文件从客户端上传到服务器。Spring Boot提供了便捷的方式来处理文件上传&#xff0c;并且整合了Spring框架的强大功能&#xff0c;使文件上传变得相对简单。本文将介绍如何在Spr…

FPGA---UDP通信求助

项目场景&#xff1a; 使用UDP进行回环&#xff0c;网络调试助手&#xff0c;发送数据通过UDP接收模块接收&#xff0c;解析出数据&#xff0c;给到UDP发送模块&#xff0c;传回上位机。 问题描述 UDP接收模块中&#xff0c;接收到的CRC校验值与自己计算CRC校验值进行判断&am…

【考研数学】矩阵三大关系的梳理和讨论 | 等价、相似、合同

文章目录 引言一、定义二、判别法写在最后 引言 昨天学了矩阵的合同关系&#xff0c;老汤讲义里也列举了三大关系的定义和判别法&#xff0c;方便我们进行区分。但是光看还是难以入脑&#xff0c;为此&#xff0c;我想自己梳理一遍&#xff0c;顺带也复习一下线代之前的所学。…

数据转换为excel模板下载

一、引入依赖 <dependency><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>2.12.0</version></dependency> 二、准备解析的数据封装 package com.dst.modules.business.after.sale.parts.sparepa…

Mac M1通过homebrew安装Redis报错(perl: unknown or unsupported macOS version: :dunno)

〇、解决方案 升级homebrew&#xff0c;命令如下&#xff1a; brew update-reset一、问题现象 通过命令brew install redis安装Redis&#xff0c;异常如下&#xff1a; fatal: not in a git directory Warning: No remote origin in /opt/homebrew/Library/Taps/homebrew/h…

【OCR】合同上批量贴印章

一、需求 OCR算法在处理合同等文件时&#xff0c;会由于印章等遮挡导致文本误识别。因此在OCR预处理时&#xff0c;有一个很重要的步骤是“去除印章”。其中本文主要聚焦在“去除印章”任务中的数据构建步骤&#xff1a;“合同伪印章”的数据构建。下面直接放几张批量合成后效果…

Godot 添加信号

前言 Godot 里面C#和GDScirpt 的用法完全不一样&#xff0c;网上相关资料太少了。 什么是信号 信号分为信号源&#xff0c;触发&#xff0c;目的节点。信号源在某些条件下触发信号&#xff0c;比如按钮点击&#xff0c;鼠标悬停等事件 #mermaid-svg-wyr9ARVcBFmUUu8y {font-…

C++ shared_ptr类型转换的实现原理与type traits类型萃取

思考下面这个问题&#xff1a; #include <memory> #include <iostream> using namespace std;class A{ public:int data; };class B : public A{ };template <typename _Ty> class TypeCast{ };int main() {shared_ptr<B> b make_shared<B>();…

做了个 chrome 插件实现 B 站视频截图功能,直接从当前视频帧无损复制

起因是看 B 站视频想截个图很麻烦&#xff0c;右下角暂停按钮无法去除&#xff0c;于是写了一行代码把暂停按钮隐藏。 后经提醒&#xff0c;发现可以通过 canvas 获取视频帧来截取图片&#xff0c;于是写了如下代码完美获取视频帧。 var v document.querySelector(".bpx…

从Django模型创建复合索引

目录 什么是复合索引&#xff1f;在Django中创建复合索引示例说明 什么是复合索引&#xff1f; 复合索引是由多个列组成的索引&#xff0c;在数据库中使用多个列的值作为索引键。相比于单个列的索引&#xff0c;复合索引可以更加精确地过滤数据并提高查询的速度。 通过创建复…

【window10】Dart+Android Studio+Flutter安装及运行

安装Dart SDK安装Android Studio安装Flutter在Android Studio中创建并运行Flutter项目 安装前&#xff0c;请配置好你的jdk环境&#xff0c;准备好你的梯子~ 安装Dart SDK 浅浅了解一下Dart&#xff1a; Dart 诞生于2011年&#xff0c;是由谷歌开发的一种强类型、跨平台的客户…

【java学习】对象的产生(18)

文章目录 1. 初始化赋值2. 匿名对象3. 练习3.1. 习题一3.2. 习题二 4. 总结 1. 初始化赋值 当一个对象被创建时&#xff0c;会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型&#xff0c;如上节的 Person 和前面讲过的数组。 成员…

提取Android盒子dtb文件

概述 最近从某鱼上掏了一个CM201-1 YS的盒子&#xff0c;动手倒腾倒腾&#xff0c;准备安装Armbian&#xff0c;用来做矿机&#xff0c;但该型号的盒子ophub上面没有完全适配的镜像&#xff0c;故而想尝试下&#xff0c;看能否整个适配镜像出来。 操作系统 Windows Linux 工…

【MediaSoup---源码篇】(五)接收RTP数据的处理

通过前面的文章我们可以了解到&#xff0c;当创建好Transport的时候&#xff0c;socket已经建立好。具备了相应的网络传输能力。我们来看一下socket接收到数据是如何处理的。 UdpSocketHandler::OnUvRecv Socket接收数据 inline void UdpSocketHandler::OnUvRecv(ssize_t nr…

TDengine时序数据库学习使用

数据库要求&#xff1a; 1.目前服务器只能在linux运行&#xff0c;先安装服务器版本v1 2.下载与v1完全匹配的客户端版本v1&#xff08;客户端与服务器的版本号不匹配可能访问不了服务器&#xff09; 第一步 安装 安装服务器注意&#xff0c;安装教程&#xff1a; 使用安装…

Linux中scp命令复制文件

scp命令是在Linux中用于在本地主机和远程主机之间进行安全传输文件的命令。下面是使用scp命令的语法&#xff1a; scp [参数] [来源路径] [目标路径]参数&#xff1a; -r&#xff1a;递归复制整个目录。-P&#xff1a;指定远程主机的端口。-p&#xff1a;保留原文件的修改时间…

(蓝宝书)网络安全——CTF那些事儿

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…