【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…

数据转换为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…

【OCR】合同上批量贴印章

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

Godot 添加信号

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

【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 工…

TDengine时序数据库学习使用

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

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

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

深度学习问答题(更新中)

1. 各个激活函数的优缺点&#xff1f; 2. 为什么ReLU常用于神经网络的激活函数&#xff1f; 在前向传播和反向传播过程中&#xff0c;ReLU相比于Sigmoid等激活函数计算量小&#xff1b;避免梯度消失问题。对于深层网络&#xff0c;Sigmoid函数反向传播时&#xff0c;很容易就…

mp4音视频分离技术

文章目录 问题描述一、分离MP3二、分离无声音的MP4三、结果 问题描述 MP4视频想拆分成一个MP3音频和一个无声音的MP4文件 一、分离MP3 ffmpeg -i C:\Users\Administrator\Desktop\一个文件夹\我在财神殿里长跪不起_完整版MV.mp4 -vn C:\Users\Administrator\Desktop\一个文件…

分布式数据库HBase(林子雨慕课课程)

文章目录 4. 分布式数据库HBase4.1 HBase简介4.2 HBase数据模型4.3 HBase的实现原理4.4 HBase运行机制4.5 HBase的应用方案4.6 HBase安装和编程实战 4. 分布式数据库HBase 4.1 HBase简介 HBase是BigTable的开源实现 对于网页搜索主要分为两个阶段 1.建立整个网页索引&#xf…

如何在 Android 中完成一个 APT 项目的开发?

前言 APT(Annotation Processing Tool)即注解处理器&#xff0c;是一种处理注解的工具。 APT在编译时期扫描处理源代码中的注解&#xff0c;开发中可以根据注解&#xff0c;利用APT自动生成Java代码&#xff0c;减少冗余的代码和手动的代码输入过程&#xff0c;提升了编码效率…

Gralloc ION DMABUF in Camera Display

目录 Background knowledge Introduction ia pa va and memory addressing Memory Addressing Page Frame Management Memory area management DMA IOVA and IOMMU Introduce DMABUF What is DMABUF DMABUF 关键概念 DMABUF APIS –The Exporter DMABUF APIS –The…

上海亚商投顾:沪指探底回升 华为汽车概念股集体大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日探底回升&#xff0c;早盘一度集体跌超1%&#xff0c;随后震荡回暖&#xff0c;深成指、创业板指…

LeetCode二叉树OJ

目录 剑指 Offer 55 - I. 二叉树的深度 - 力扣&#xff08;LeetCode&#xff09; 965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09; 100. 相同的树 - 力扣&#xff08;LeetCode&#xff09; 101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09; 二叉树遍历_牛客题…