C语言练习题解析(4)

news2024/9/23 19:27:39

  • 💓博客主页:江池俊的博客
  • ⏩收录专栏:C语言刷题专栏
  • 👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路
  • 💻代码仓库:江池俊的代码仓库
  • 🎉欢迎大家点赞👍评论📝收藏⭐

在这里插入图片描述

文章目录

  • 🌴选择题
  • 🌴编程题
    • 📌错误的集合
    • 📌密码检查


🎈前言:

  • 本专栏每篇练习将包括 5个选择题 + 2个编程题,将涵盖C语言的不同方面,包括基础语法、数据类型、控制结构、数组、指针和函数等。通过练习,你将逐步掌握C语言的基础知识和常见问题,提高你的编程技巧和解决问题的能力。
  • 我希望这个博客能够为你提供有价值的练习资源,让你在实践中不断进步。同时,我们也鼓励你在练习过程中进行思考和创新,尝试使用不同的编程方法和技巧。
  • 让我们一起挑战C语言练习题,攻克每一个难点,不断提升自己的编程技能!在评论区分享你的练习心得和问题,与我们一起交流和成长。

🌴选择题

  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循环,其中 第一项初始化表达式只执行一次 ,因此D选项中 ch 只从输入流中取一个字符,之后就再不会取字符,因此会死循环。

  1. 运行以下程序后,如果从键盘上输入 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; //2
		while (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时,循环结束。

  1. 若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是( )
#include <stdio.h>
int main()
{
	char c;
	int v0 = 0, v1 = 0, v2 = 0;
		do
		{
			switch (c = getchar()) //ADescriptor<回车>
			{
			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
【解析】:
代码switch语句中没有break,则每次找到入口进入后,顺序执行到代码块结束为止。例如当c'A'时,从case 'A'进入,先后执行v1+=1;v0+=1;v2+=1;,而当c'p'时,从default进入,先后执行v0+=1;v2+=1;,容易看出最终v0v2是相等的。

  1. 如下函数是求两个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,形参用char不对,会发生截断丢失数据;
  2. minfor循环开始时更新为0,不再是两个形参中的较小值;
  3. 判断是否整除的时候误将==写成=赋值运算符;
  4. 函数最终要返回一个int值,返回值类型没问题,但是这里要强调一个选项中没写出的问题,如果是牛客网上的题,会报编译错误,说该函数不是在所有情况下都有返回值,只有在if条件成立的情况下有返回值,一般在vs上这种情况能通过,编译器会给一个默认的返回值。
  1. 执行下面的程序段,语句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


🌴编程题

📌错误的集合

【力扣链接:645. 错误的集合】

【题目信息】:
在这里插入图片描述
【答案解析】:

  • 使用标记的方式就可以找出重复的数字,数组中出现过哪个数字就把对应数字作为下标在对应位置 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+1个整形空间,并初始化为0
	int* ret = (int*)calloc(*returnSize, sizeof(int));//申请2个整形空间,并初始化为0
	int 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; //将标记数组的对应数据位置1
		old_sum += i + 1; // 1~n的求和
		cur_sum += nums[i]; //当前数组中的数据求和(多了一个重复的,少了一个丢失的)
	}
	ret[1] = old_sum - (cur_sum - ret[0]);//原始总和,减去去掉重复后的当前总和就是丢失的数字
	free(arr); //释放内存
	return ret;
}

【拓展】:calloc 函数

在这里插入图片描述
下面的实例演示了 calloc() 函数的用法。

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i, n;
	int* a;

	printf("要输入的元素个数:");
	scanf("%d", &n);

	a = (int*)calloc(n, sizeof(int));
	printf("输入 %d 个数字:\n", n);
	for (i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}

	printf("输入的数字为:");
	for (i = 0; i < n; i++) 
	{
		printf("%d ", a[i]);
	}
	printf("\n");
	free(a);  // 释放内存
	return(0);
}

运行结果:

要输入的元素个数:3
输入 3 个数字:
22
55
14
输入的数字为:22 55 14

在这里插入图片描述


📌密码检查

【牛客网链接:OR141 密码检查】

【题目信息】:
在这里插入图片描述
【答案解析】:

  • 这道题只需要将字符串从头到尾的每种字符(大写字符小写字符数字其他字符)分别统计出来后。然后逐个判断是否符合条件即可。而条件的判断包含有:
    1. 字符串密码长度不小于8
    2. 不能以数字开头
    3. 只能包含字母和数字
    4. 大小写和数字字符必须具备两种以上
#include <stdio.h>
#include <string.h>
int main()
{
	int n;
	while (~scanf("%d", &n)) //多组输入
	{
		for (int i = 0; i < n; i++) 
		{
			char password[101] = { 0 };
			int upper = 0, lower = 0, digit = 0, other = 0;
			scanf("%s", password);//捕捉输入的密码
			if ( ( strlen(password) < 8 ) || (password[0] >= '0' && password[0] <= '9')) //密码长度小于8 or 密码以数字开头
			{
				printf("NO\n");
				continue; //直接跳出本次循环,执行下一次循环
			}
			char* ptr = password;
			while (*ptr != '\0') //统计各种字符个数
			{ 
				if (*ptr >= 'a' && *ptr <= 'z') lower++; //统计小写字母的个数
				else if (*ptr >= 'A' && *ptr <= 'Z') upper++; //统计大写字母的个数
				else if (*ptr >= '0' && *ptr <= '9') digit++; //统计数字的个数
				else other++; //统计其他字符的个数
				ptr++; 
			}
			if (other > 0) // 有其他字符(注意:密码只能由数字和字母组成)
			{ 
				printf("NO\n");
				continue; //直接跳出本次循环,执行下一次循环
			}
			//大写,小写,数字,必须具有两种以上,而比较运算真则1,假则0
			if ((upper > 0) + (lower > 0) + (digit > 0) < 2) // 密码只有一种字符
			{ 
				printf("NO\n");
				continue; //直接跳出本次循环,执行下一次循环
			}
			printf("YES\n");
		}
	}
	return 0;
}

🔥今天的内容就到这里了,有什么问题的话欢迎大家在评论区讨论,也可以私信博主为你解答,如果觉得博主的文章还不错的话, 请👍三连支持一下博主哦🤞

在这里插入图片描述

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

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

相关文章

Flink-CDC 抽取SQLServer问题总结

Flink-CDC 抽取SQLServer问题总结 背景 flink-cdc 抽取数据到kafka 中&#xff0c;使用flink-sql进行开发&#xff0c;相关问题总结flink-cdc 配置SQLServer cdc参数 1.创建CDC 使用的角色, 并授权给其查询待采集数据数据库 -- a.创建角色 create role flink_role;-- b.授权…

el-upload 上传附件(拆解步骤)

目录 1. 看elementui /element-plus 官网案例 2. html部分&#xff1a; 把官网上的搬下来&#xff0c;最好加一个按钮&#xff0c;上传到服务器&#xff08;后端&#xff09; 3. js 部分&#xff1a; 3.1 首先&#xff0c;先定义一个变量&#xff0c;files 3.2 当上传图片…

数据结构学习笔记—— 排序算法总结【ヾ(≧▽≦*)o所有的排序算法考点看这一篇你就懂啦!!!】

目录 一、排序算法总结&#xff08;一&#xff09;排序算法分类&#xff08;二&#xff09;表格比较 二、详细分析&#xff08;最重要考点&#xff01;&#xff01;&#xff01;&#xff09;&#xff08;一&#xff09;稳定性&#xff08;二&#xff09;时间复杂度&#xff08;…

数据结构与算法(三)——递归

一、递归的概念 递归就是方法自己调用自己&#xff0c;每次调用时传入不同的变量。 递归有助于编程者解决复杂的问题&#xff0c;同时可以让代码变得简洁。 1.1 递归机制 递归调用规则&#xff1a; 1>当程序执行到一个方法时&#xff0c;就会开辟一个独立的空间&#xff0…

软件测试技术之地图导航的测试用例

外观测试 屏幕显示不能有花屏、黑点和闪屏&#xff0c;清晰度、亮度、颜色要正常。 检测所有按键都能起到相应作用&#xff0c;是否手感不良。 UI显示状态、颜色、清晰度、效果。 控制&#xff1a;放大&#xff0c;缩小&#xff0c;音量调节功能测试。 交叉路口查询测试&am…

无涯教程-JavaScript - MULTINOMIAL函数

描述 MULTINOMIAL函数返回值之和的阶乘与阶乘积之比。 语法 MULTINOMIAL (number1, [number2] ...)争论 Argument描述Required/OptionalNumber11 to 255 values for which you want the multinomial.Requirednumber2, ...Optional Notes 多项式为- $$MULTINOMIAL\left(a_…

插件化原理

插件化技术和热修复技术都属于动态加载&#xff0c;从普及率的角度来看&#xff0c;插件化技术还没有热修复的普及率高&#xff0c;主要原因是占大多数的中小型应用很少也没有必要去采用插件化技术。 Android P preview&#xff08;Android 9&#xff09;开始限制调用隐藏 API…

在qml中将一个16进制表示的颜色加上透明度

在qml中&#xff0c;我们在指定控件的颜色时&#xff0c;可以直接通过16进制的字符串来表示&#xff0c;比如"#ff0000"; 这种方式也比较符合UI设计人员的使用习惯。 但是假如要在此颜色的基础上&#xff0c;加个透明度的话&#xff0c;就要重新计算一番&#xff0c;比…

Nginx学习记录一揽子:学会配置Nginx

前言 在配置我的网站的过程中&#xff0c;深觉自己功力尚浅&#xff0c;不由黯然伤神&#xff0c;遂有奋进之意&#xff0c;针对这个过程中的不自然优雅的操作&#xff0c;得加强学习。在配置整个虚拟网络的过程中&#xff0c;由于对Nginx的了解不深&#xff0c;使用起来也捉襟…

LeetCode 周赛上分之旅 #46 经典二分答案与质因数分解

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…

C++ 算法学习 之 string find

这里写目录标题 String的查找方法 find使用&#xff1a;返回值&#xff1a;输出结果 更多string方法 参考于 c手册 String的查找方法 find 使用&#xff1a; std::string str ("There are two needles in this haystack with needles."); std::string str2 ("…

Pytorch搭建循环神经网络RNN(简单实战)

Pytorch搭建循环神经网络RNN&#xff08;简单实战&#xff09; 去年写了篇《循环神经网络》,里面主要介绍了循环神经网络的结构与Tensorflow实现。而本篇博客主要介绍基于Pytorch搭建RNN。 通过Sin预测Cos import torch import torch.nn as nn import numpy as np from matp…

医学影像相关开源数据集资源汇总

CT 医学图像 下载链接&#xff1a;http://suo.nz/2tQehH 该数据集旨在允许测试不同的方法来检查与使用对比度和患者年龄相关的 CT 图像数据的趋势。基本思想是识别与这些特征密切相关的图像纹理、统计模式和特征&#xff0c;并可能构建简单的工具&#xff0c;在这些图像被错误…

MyEclipse项目导入与导出

一、项目导出 1、右键选择项目名称&#xff0c;弹出菜单中选择“export”&#xff0c;如下图所示 2、选择“恶心“export”&#xff0c;弹出菜单如下&#xff1b;在“General“选项中&#xff0c;选择“File System”选项 3、点击“next”&#xff0c;进入保存位置选择界面&am…

异步FIFO设计的仿真与综合技术(5)

概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文&#xff0c;添加了笔者的个人理解与注释&#xff0c;文中蓝色部分为笔者注或意译。前文链接&#xff1a; 异步FIFO设计的仿真与综合技术&#xf…

小目标检测高效解决方案汇总,附19篇原论文&开源代码

目标检测发展至今&#xff0c;涌现出了许多非常实用的方法&#xff0c;但在小目标检测领域&#xff0c; 由于小目标经常存在图片模糊、信息少、分辨率低等问题&#xff0c;性能水平仍然难以提升。 不过在近几年间&#xff0c;已经有许多有效的解决方法被提出&#xff0c;我今天…

前端录入音频并上传

目录 纯 js 实现&#xff08;有问题&#xff09;使用插件 recorder-core &#xff08;没问题&#xff09; 纯 js 实现&#xff08;有问题&#xff09; 上传音频文件时 blob 数据中 size 一直是0&#xff0c;导致上传之后音频不可播放&#xff08;本地录制后本地是可以播放的&am…

什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS&#xff08;跨源资源共享&#xff09;⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为…

【前端知识】Three 学习日志(三)—— 光源对物体表面的影响

Three 学习日志&#xff08;三&#xff09;—— 光源对物体表面的影响 一、设置材质为受光照影响 //MeshLambertMaterial受光照影响 const material new THREE.MeshLambertMaterial();此时&#xff0c;场景中一片漆黑&#xff0c;无法看到原来的物体&#xff0c;需要设置光源…

24v转5v稳压芯片-5A大电流输出ic

这款24V转5V5A汽车充电芯片具有以下特性和参数&#xff1a; - 宽输入电压范围&#xff1a;4.5V至36V - 最大输出电流&#xff1a;5.0A - 高达92%的转换效率 - 恒流/恒压模式控制 - 最大占空比100% - 可调输出电压 - 2%的输出电压精度 - 集成40mΩ高侧开关 - 集成18mΩ低侧开关 …