C语言练习题解析:挑战与突破,开启编程新篇章!(3)

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

在这里插入图片描述

文章目录

  • 🌴选择题
  • 🌴编程题
    • 📌记负均正
    • 📌旋转数组的最小数字


🎈前言:

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

🌴选择题

  1. 已知函数的原型是: int fun(char b[10], int *a); ,设定义: char c[10];int d;正确的调用语句是( )

A: fun(c,&d);   B: fun(c,d);   C: fun(&c,&d);   D: fun(&c,d);

🔎正确答案:A
【解析】:
参数a是指针,要接收地址,所以BD错误。参数b可以接收的是char*,而&c的类型是char(*)[10],C错误

  1. 请问下列表达式哪些会被编译器禁止【多选】( )
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 = 43C: e=&aD: f=0x321f

🔎正确答案:ABCD
【解析】:

  • A: *c = 32; - 这是错误的,因为 c 是一个指向常量整数的指针,意味着不能通过这个指针来修改所指向的值。编译器会禁止这个操作。
  • B: *d = 43; - 这是错误的,因为 d 是一个指向整数的指针,尽管它指向一个非常量整数 a,但是由于指针本身被声明为指向常量的,所以不能通过这个指针来修改所指向的值。编译器会禁止这个操作。
  • C: e = &a; - 这是错误的,因为 e 被声明为一个指向整数的常量指针,一旦指针被初始化,就不能再指向其他变量。编译器会禁止这个操作。
  • D: f = 0x321f; - 这是错误的,因为 f 被声明为一个指向常量整数的常量指针,一旦指针被初始化,就不能再指向其他变量。编译器会禁止这个操作。

【拓展】:

  • 如果 const 位于 * 的左侧,则 const 就是用来修饰指针所指向的变量,即指针指向为常量;即*c*d不能变。
  • 如果 const 位于 * 的右侧,则 const 就是修饰指针本身,即指针本身是常量;即ef不能变。
  1. 以下程序的输出结果为( )
#include <stdio.h>
int i;
void prt()
{
	for (i = 5; i < 8; i++)
		printf("%c", '*');
	printf("\t");
}
int main()
{
	for (i = 5; i <= 8; i++)
		prt();
	return 0;
}

A: ***   B: *** *** *** ***   C: *** ***   D: * * *

在这里插入图片描述

🔎正确答案:A
【解析】:
全局变量i,在main()中修改为5,第一次在prt()中执行循环输出三次'*'i被修改为8,回到main()中第二次调用prt()时,i<8为假,循环结束没输出,执行一次print("\t"),再次回到主函数后i++变为9i<=8为假,循环结束。

  1. 下面代码段的输出是( )
#include<stdio.h>
int main()
{
	int a = 3;
	printf("%d\n", (a += a -= a * a));
	return 0;
}

A: -6   B: 12   C: 0   D: -12

在这里插入图片描述

🔎正确答案:D
【解析】:
a+=a-=a*a等价于a=a+(a=a-a*a),即先计算a=a-a*a,所以此时a的值为3-3*3=-6,再计算-6+(-6)=-12赋值给a,所以a的值为-12,也就是整个表达式的值,所以应选择D

  1. 下列不能实现死循环的是( )

A: while(1){}   B: for(;1;){}   C: do{}while(1);   D: for(;0;){}

🔎正确答案:D
【解析】:
只有条件为真时才进行循环,ABC中1为真,D中0为假


🌴编程题

📌记负均正

【牛客网链接:HJ97 记负均正】

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

  • 这道题其实通过 scanf 捕捉数据即可,统计负数个数,以及正数个数,并且在统计正数个数的过程中求取正数总和,最后计算得出平均数即可。需要注意的是所有数字中0是不统计在内的。
#include <stdio.h>
int main()
{
	int n;
	while (~scanf("%d", &n))//多组输入 (也可以写成 scanf("%d",&n)!=EOF )
	{
		int count1 = 0, count2 = 0, tmp;
		double sum = 0;
		for (int i = 0; i < n; i++) 
		{
			scanf("%d", &tmp);//对每次输入的整数进行判断
			if (tmp < 0) 
			{
				count1++; //统计负数个数
			}
			else if (tmp > 0) 
			{
				sum += tmp; //正数求和
				count2++; //统计大于0的正数个数,这样是因为题目说明0不算在内
			}
		}
		printf("%d ", count1);
        if (count2==0)//如果没有正数,则平均值为0 
        {
            printf("%.1lf\n",0.0);
        }
        else//若有正数,则平均值为所有正数的和除以正数的个数
        {
            printf("%.1lf\n",sum / count2);
        }
	} 
	return 0;
}

📌旋转数组的最小数字

【牛客网链接:JZ11 旋转数组的最小数字】

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

  • 暴力破解:遍历数组找出最小值即可(时间复杂度:O(N)
//暴力破解:遍历数组找出最小值即可
int minNumberInRotateArray(int* nums, int numsLen) {
	int i = 0;
	for (i = 0; i < numsLen - 1; i++)
	{
		if (nums[i] > nums[i + 1])//只要出现降序则说明出现了最小值,比如[4,5,1,2,3] :5到1是降序,则1就是最小值;
			return nums[i + 1];
	}
	return nums[0];//如果没出现降序,说明没旋转,则第一个数就是最小值。
}
  • 更优思想:采用二分查找,这个题主要分析三种旋转情况 [1, 2, 3, 4, 5],使用中间值与右端进行比较。
    时间复杂度:O(logN)
    1. 中间大于右边 [3, 4, 5, 1, 2],这种情况下,最小数一定在右边;则left = middle + 1
    2. 中间等于右边 [1, 0, 1, 1, 1], 这个是[0, 1, 1, 1, 1] 旋转过来的,这时候需要缩小范围 right--;,注意不能是left++,因为是非降序数组,所以要缩小右边范围,把较小值向右推,符合我们的判断规则。
    3. 中间小于右边 [5, 1, 2, 3, 4], 这种情况下,最小数字则在左半边;则right = middle
//更优思想:采用二分查找
int minNumberInRotateArray(int* nums, int numsLen) {
	int left = 0;
	int right = numsLen - 1;
	while (left < right)
	{
		int mid = left + (right - left) / 2;//避免整数溢出
		if (nums[mid] > nums[right])
		{
			left = mid + 1;//最小值在[left+1,right]
		}
		else if (nums[mid] == nums[right])
		{
			right--;//缩短数组,将最小值范围右移
		}
		else
		{
			right = mid;//最小值在[left,mid]
		}
	}
	return nums[left];
}

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

在这里插入图片描述

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

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

相关文章

如何加密Python程序

我们开发了一个项目&#xff0c;历尽艰辛&#xff0c;想发布出去&#xff0c;又怕别人窃取自己的劳动成果。 有效的方法一是可以上传github&#xff0c;分享源代码&#xff0c;其它想使用的朋友可以通过fork来进一步改进它。 对了&#xff0c;最近刚发现一个小技巧&#xff0…

如何使用 MSYS2 编译最新版的 coreutils 源码(目前最新版本为 coreutils-9.4)

文章目录 一、coreutils 源码下载二、MSYS2 安装编译工具1. pacman -Suy 更新软件仓库2. pacman -S msys/gcc 安装gcc3. pacman -S msys/make 安装make工具4. 解压缩 coreutils 压缩包5. 执行 ./configure 命令6. 执行 make 进行编译&#xff08;cygwin-3.4.8版本的一个bug导致…

1.1 空间直角坐标系

1.空间直角坐标系的建立 三维空间中几何 空间图形形式 ----- 点 线 面 体 ↑ ↓ \uparrow\downarrow ↑↓ &#xff08;空间直角坐标系作为桥梁帮助我们理解&#xff09; 代数理论表达 — 坐标&#xff0c;方程&#xff08;组&#xff09; 2. 空间直角坐标系的定义 定义: 过…

Jmeter进阶使用指南-分布式测试

当你需要模拟大量并发用户并测试应用程序的性能时&#xff0c;JMeter的分布式测试功能非常有用。分布式测试允许你使用多个JMeter实例来模拟并发用户&#xff0c;从而提供更高的负载。 下面是一个详细的介绍和讲解分布式测试的步骤&#xff1a; 准备主机和从机&#xff1a; 首…

【代码随想录】Day 51 动态规划12 //待做//(买卖股票冷冻期、买卖股票手续费)

买卖股票冷冻期 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/ 买卖股票手续费 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/

【多思路附源码】2023高教社杯 国赛数学建模C题思路 - 蔬菜类商品的自动定价与补货决策

赛题介绍 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬…

LLM - Model、Data、Training、Generate Agruments 超参解析

目录 一.引言 二.常用参数 ◆ ModelArguments ◆ DataArguments ◆ TrainingArguments ◆ GeneratingArguments 三.代码实现 ◆ Python 代码 ◆ Shell 代码 四.总结 一.引言 LLM 相关训练框架都会引入 ModelArguments、DataArguments、TrainingArguments、Generatin…

MySQL 学习笔记

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 MySQL 学习笔记1、DQL 查询语句1.1、基本查询1.2、函数查询1.2.1、单行函数1.2.2、聚合函数 1.3、复杂查询1.3.1、连接查询1.3.2、子查询 1.4、SQL 语句 执行顺序 2、DDL 定义语句2.1、…

F. Selling a Menagerie Codeforces Round 895 (Div. 3)

Problem - F - Codeforces 题目大意&#xff1a;有n个动物&#xff0c;每个动物i有一个害怕的动物a[i]&#xff0c;现要卖掉所有动物&#xff0c;每个动物都有价值c[i]&#xff0c;如果i在a[i]之前卖掉&#xff0c;就会获得2*c[i]的价值&#xff0c;如果在a[i]之后被卖掉就会获…

垃圾回收 - 分代垃圾回收

分代垃圾回收在对象中导入了“年龄”的概念&#xff0c;通过优先回收容易成为垃圾的对象&#xff0c;提高垃圾回收的效率。 1、新生代对象和老年代对象 分代垃圾回收中把对象分类成几代&#xff0c;针对不同的代使用不同的 GC 算法&#xff0c;我们把刚生成的对象称为新生代对…

UI自动化测试详解

前言 随着智能化信息基础设施的推进&#xff0c;软件开发的进程也不断加快。软件测试工作也逐渐由传统的手工测试向软件自动化测试跨越。 对于很多企业来说&#xff0c;做好软件自动化测试工作已经不仅仅是通过测试工具进行“点点点”&#xff0c;要想找出软件测试过程中的缺…

python 小案例72

import requestsdef fetch_data_from_api(url):response requests.get(url)if response.status_code 200:data response.json()return dataelse:print("Failed to fetch data from API")return None# 使用NASA的API获取每日天文图片 url "https://api.nasa.…

【Springcloud】Actuator服务监控

【Springcloud】Actuator服务监控 【一】基本介绍【二】如何使用【三】端点分类【四】整合Admin-Ui【五】客户端配置【六】集成Nacos【七】登录认证【八】实时日志【九】动态日志【十】自定义通知 【一】基本介绍 &#xff08;1&#xff09;什么是服务监控 监视当前系统应用状…

情侣头像微信小程序源码 朋友圈背景小程序源码 动态壁纸微信小程序源码

壁纸和情侣头像&#xff0c;朋友圈素材都可以做&#xff0c;带视频教程。 搭建也不难&#xff0c;纯前端无后台。直接开发者工具调试前端&#xff0c;绑定合法域名&#xff0c;流量主功能也是在前端替换。 无需服务器域名直接上手&#xff01;&#xff01;&#xff01;

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要 1. 尾翼的贡献2. 垂尾是航向静稳定性的最大来源3. 推进系统对航向的贡献3.1 螺旋桨3.2 喷气式 4. 参考资料 1. 尾翼的贡献 平尾对航向静稳定性的影响机理与机翼相同&#xff0c;由于尺寸小&#xff0c;通…

AI教程 | 用Midjourney制作AI模特和换装的保姆级教程

Hi! 大家好&#xff0c;我是专注于AI项目实战的赤辰。 昨天电商朋友过来交流&#xff0c;聊到他最近新开了一家淘宝店&#xff0c;在没有请任何员工的情况下&#xff0c;他一个人用AI工具完成了店铺取名&#xff0c;商品文案&#xff0c;店铺logo&#xff0c;主图设计&#xf…

ASO优化之阅读并回复应用的评论

回复评论对于与用户保持牢固的关系非常重要。如果时间有限&#xff0c;优先回复负面评论&#xff0c;可以向其他用户保证&#xff0c;我们正在积极解决应用的问题&#xff0c;从而提高转化率。 1、逻辑与沟通要清晰。 首先&#xff0c;无论他们的反馈是正面还是负面&#xff0…

【c++】如何有效地利用命名空间?

​ &#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​✨人生如寄&#xff0c;多忧何为 ✨ 目录 前言什么是命名空间&#xff1f;命名空间的语法命名空间的使用避免命名冲突命名空间的嵌套总结 前言 当谈到C编…

51单片机-直流电机学习

简介 51单片机采用的是5V的直流电机 轴长&#xff1a;8mm 轴径&#xff1a;2mm 电压&#xff1a;1-6V 参考电流&#xff1a;0.35-0.4A 3V 转速&#xff1a;17000-18000 转每分钟 他的组成&#xff1a; 直流电机的结构应由 定子 和 转子 两大部分组成。 直流电机运行时静止…

【Spring】aop的底层原理

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理 Spring 中的切面编程aop的底层原理和重点注意的地方 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…