C语言水平测试题 过关斩将(1)C语言的那些坑题,你可知道❓

news2025/6/26 17:58:23

我的个人主页☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主

欢迎各位 👍点赞 ⭐收藏 📝评论

我的专栏C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客(这个专栏里的平均文章质量分是95噢,基本全都是高质量文章,本博主将会长期更新c语言的语法知识,初学c语言的朋友们,可以收藏订阅一下,收藏绝对不亏噢)

目录

一、交换两个变量的值

二、C语言细节考察题(坑题❗)

坑货(1)❗❗❗

坑货(2)❗❗❗

三、逆序的三位数(难题)

四、两个数比较大小(常考)

【方案1】

【方案2】

 五、计算阶乘

【方案1】

【方案2】 

六、计算平均数

七、猜数游戏(经典)

八、数的逆序输出(本文最难)

需要掌握的知识点

方案1(700——7, 007——7)  

方案2(700——007)  

九、学习路上遇到的常见错误(坑❗)


下列是:C语言水平测试题(3)

大家冲鸭!

一、交换两个变量的值

核心代码:

t = a;
a = b;
b = t;

#include <stdio.h>

int main()
{
	int a = 5;
	int b = 6;
	//新建第三方变量 
	int t;
	
	printf("原来:a = %d,b = %d\n",a,b);
	
	//交换两个变量的值 
	t = a;
	a = b;
	b = t;
	
	printf("现在:a = %d,b = %d\n",a,b);
	return 0;
}

二、C语言细节考察题(坑题❗)

注:前方有坑,不要见坑就跳噢

坑货(1)❗❗❗

写出以下代码执行后,t1和t2的值,以空格隔开:

int a=14;

int t1 = a++;

int t2 = ++a;

怎么样?算完了吗?你应该没有跳进这个坑吧(希望你没跳进去,如果掉坑了,肯定就是你算的太快了)?

来吧,接下来

让我们揭晓答案

答案:14 16

答案解析:

正如我们所知,a一开始的值是14

执行完第一个表达式:int t1 = a++;                这时 t1的值是14

相信这一步,大家应该都知道(这么简单,你当我是三岁小孩啊)

但接下来,才是重头戏(毕竟主角往往是最后出场的嘛)

这里注意哦 这时a的值是15,不是14噢

接着我们执行第二个表达式:int t2 = ++a

这时 t2 的值是 16        a的值也是16

坑在哪呢?如果我们在执行完第一条语句 int t1 = a++; 

把a 和t1 一样当成 14

这样我们就很容易把 t2 算成 15

就容易出错啦(不过这个坑比较小,如果你细心一点,你慢一点,不要算太快就不太会掉坑)

所以正确的答案是:14 16

坑货(2)❗❗❗

写出以下表达式的结果,结果之间间隔一个空格:

6 + 5 / 4 - 2  

2 + 2 * (2 * 2 - 2) % 2 / 3  

10 + 9 * ((8 + 7) % 6) + 5 * 4 % 3 * 2 + 3 

1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10

小提示:先括号,再从左到右乘除,最后加减

不要看这道题觉得很简单,就大意噢

轻敌的话,它可是会让你后悔的❗

答案:5 2 44 -627

答案解析:

这道题做错了,一看就是你轻敌了,大意了吧

做太快了吧,不好好检查一遍就交卷吧

6 + 5 / 4 - 2                               从左到右                       7 - 2

2 + 2 * (2 * 2 - 2) % 2 / 3          先括号     2+2*2%2/3  再从左到右       2+0/3         2

10 + 9 * ((8 + 7) % 6) + 5 * 4 % 3 * 2 + 3                       10 + 27 + 4 + 3

1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10    3 + 7 * (2/8-9)* 10    3 + 7 * (0-9)* 10         3-630

三、逆序的三位数(难题)

逆序的三位数

程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7

提示:用%10可以得到个位数,用/100可以得到百位数...。将这样得到的三个数字合起来:百位100+十位10+个位,就得到了结果。

代码示例:

#include <stdio.h>

int main()
{
	int a;
	int ge,shi,bai;
	
	printf("请输入一个三位数:");
	scanf("%d",&a);
	
	ge = a %10;
	shi = a % 100 / 10;
	bai = a / 100;
	
	//printf("ge=%d,shi=%d,bai=%d\n",ge,shi,bai);
	printf("%d\n",ge*100+shi*10+bai);
	return 0;
}

注:

关系运算符的结果只有0和1

所有的关系运算符的优先级比算术运算的低,但是比赋值运算的高

四、两个数比较大小(常考)

【方案1】

#include <stdio.h>

int main(){
	// 方案1 
	int a,b;
	
	printf("请输入两个整数:");
	scanf("%d %d",&a,&b);
	
	int max = b;
	if(a > b){
		max = a;
	}
	
	printf("大的那个是%d\n",max);
	return 0;
}

【方案2】

#include <stdio.h>

int main(){
	// 方案2
	int a,b;
	
	printf("请输入两个整数:");
	scanf("%d %d",&a,&b);
	
	int max = 0;
	if (a > b){
		max = a;
	} else {
		max = b;
	}
	printf("大的那个是%d\n",max);
	return 0;
}

 tips:

测试数据(测试所编写的代码或者方法有没有问题)

测试程序常使用边界数据,如

  • 有效范围两端的数据

  • 特殊的倍数等个位数;

  • 10

  • 0

  • 负数

 五、计算阶乘

n!=1×2×3×4×..×n 写一个程序,让用户输入,然后计算输出 n!

变量:

显然读用户的输入需要一个 int 的 n,然后计算的结果需要用一个变量保存,可以是 int 的 factor,在计算中需要有一个变量不断地从 I 递增到 n,那可以是 int 的 

【方案1】

#include <stdio.h>

int main()
{
	int n;
	
	scanf("%d",&n);
	int fact = 1;
	
	int i = 1;
	while(i <= n){
		fact *= i;
		i++;
	}
	
	printf("%d!=%d\n",n,fact);
	
	return 0;
}

【方案2】 

#include <stdio.h>

int main()
{
	int n;
	
	scanf("%d",&n);
	int fact = 1;
	
	int i = 1;
	for(i = 1; i <= n; i++){
		fact *= i;
	}
	
	printf("%d!=%d\n",n,fact);
	
	return 0;
}

算法小套路

做求和的程序时,记录结果的变量应该初始化为 0,而做求积的变量时,记录结果的变量应该初始化为

六、计算平均数

需求:让用户输入一系列的正整数,最后输入-1表示输入结束,然后程序计算出这些数字的平均数,输出输入的数字的个数和平均数

实现思路:

只需要每读到一个数,就把它加到一个累加的变量里,到全部数据读完,再拿它去除读到的数的个数就可以了

一个变量记录累加的结果,一个变量记录读到的数的个数

算法

  1. 初始化变量 sum 和 count 为 0;

  2. 读入 number;

  3. 如果 number 不是 -l,则将 number 加入 sum,并将 count.加 l,回到2;

  4. 如果 number 是 -l,则计算和打印出 sum/count (注意换成浮点来计算)

代码实现:

#include <stdio.h>

int main()
{
	int number;
	int sum = 0;//求和 
	int count = 0;//统计输入的个数
	
	printf("请输入要计算平均数的数:");
	scanf("%d",&number);
	
	while(number != -1){
		sum += number;
		count++;
		scanf("%d",&number);
	}
	
	printf("%f\n",1.0*sum/count);//将结果转化成浮点数 
	 
	return 0;
}

七、猜数游戏(经典)

猜数游戏

需求:让计算机来想一个数,然后让用户来猜用户每输入一个数,就告诉它是大了还是小了,直到用户猜中为止,最后还要告诉用户它猜了多少次。 因为需要不断重复让用户猜,所以需要用到循环

核心重点是循环的条件

人们往往会考虑循环终止的条件

步骤

  1. 计算机随机想一个数,记在变量 number 里;

  2. 一个负责计次数的变量 count 初始化为 0;

  3. 让用户输入一个数字 a;

  4. counti 递增(加一);

  5. 判断 a 和 number 的大小关系,如果 a 大,就输出“大”;如果 a 小就输出“小”;

  6. 如果 a 和 number:是不相等的(无论大还是小),程序转回到第 3 步;

  7. 否则,程序输出“猜中”和次数,然后结束。

需要掌握的知识点

随机数 每次召唤 rand( ) 就得到一个随机的整数

随机产生一个100以内的数:rand( )%10

注:玩这个小游戏,只要你认真玩,那么最多你猜7次就能猜中 

代码实现:

#include <stdio.h>

int main()
{
	srand(time(0));
	int number = rand()%100;//生成一个100以内的随机数
	int count = 0;//统计猜数的次数 
	int a = 0;//用户输入的数
	
	printf("我已经想好了一个1到100之间的数。");
	do{
		printf("请猜猜这个1到100之间的数:");
		scanf("%d",&a);
		count++;
		if (a > number){
			printf("你猜的数大了。");
		} else if (a < number){
			printf("你猜的数小了。");
		}
	} while(a != number);
	
	printf("太好了,你用了%d次就猜到了答案。\n",count);

	return 0;
}

 为什么100以内的数猜7次就够了?

2的7次方为128,使用二分法完全可以取到100内的任意整数

用二分法,例如第一次:100中猜50第二次:若大了,1~50中猜25第三次:若小了,26~50中猜38第四次:若小了,39~50中猜45第五次:若大了,39~45中猜42第六次:若大了,39~41中猜40第七次:若大了就是39,若小了就是41。

八、数的逆序输出(本文最难)

输入一个正整数,输出逆序的数

如:

【情况1】

输入:700        输出:7

输入:007        输出:7

【情况2】

输入:700        输出:007

注:想做出这题需要先掌握下列知识(否则就是鸡蛋碰石头哦)

需要掌握的知识点

整数的分解

整数的分解 一个整数是由 1 至多位数字组成的,如何分解出整数的各个位上的数字,然后加以计算

  • 对一个整数做%10 的操作,就得到它的个位数;

  • 对一个整数做/10 的操作,就去掉了它的个位数;

  • 依此类推。

当 x > n 时

1234 % 10                保留末尾一位数 4

1234 % 100              保留末尾二位数 34

1234 / 10                  去掉末尾一位数 123

1234 / 100                去掉末尾二位数 12

当 x < n

1 % 10 1                 小取余大 余小本身

5 % 10 5                 小取余大 余小本身

6 % 10 6                 小取余大 余小本身

1 / 10 0                 被除数比除数小 答案为0

5 / 10 0                 被除数比除数小 答案为0

6 / 10 0                 被除数比除数小 答案为0

方案1(700——7, 007——7)  

代码示例:

#include <stdio.h>

int main()
{
	//用户要输入的数 
	int x;
	x = 12345;//007	7		700		7 
	//定义一个变量用来保存依次取出的数
	int digit;
	//定义一个变量用来保存逆序输出的结果
	int ret = 0;
	
	while(x > 0){
		//依次取出最后一位数 
		digit = x % 10;
		//原来的结果往左移动一位加上新的digit 
		ret = ret * 10 + digit;
		
		printf("x=%d,digit=%d,ret=%d\n",x,digit,ret);
		
		//x去除一位 
		x /= 10; 
	}
	printf("%d",ret);
		
	return 0;
}

方案2(700——007)  

代码示例:

#include <stdio.h>

int main()
{
	//用户要输入的数 
	int x;
	//scanf("%d",&x);
	x = 700;//007
	//定义一个变量用来保存依次取出的数
	int digit;
	//定义一个变量用来保存逆序输出的结果
	int ret = 0;
	
	while(x > 0){
		//依次取出最后一位数 
		digit = x % 10;
		printf("%d",digit);
		//原来的结果往左移动一位加上新的digit 
		ret = ret * 10 + digit;
		
		//x去除一位 
		x /= 10; 
	}
	return 0;
}

九、学习路上遇到的常见错误(坑❗)

(1)if 语句 忘了大括号

解决方法:永远在 if 和 else 后面加上大括号,即使当时后面只有一条语

(2)在 if 后面加分号

(3)错误使用==和=

(4)输入中文符号

(5)scanf()里面忘记加&

(6);老丢

(7)scanf()里面忘记加& printf()里面加了&

各位学习C语言的初学者,如果有问题随时都可以来问我,我会随时为您解答!欢迎大家与我一起学习,互相进步。

创作不易,👍 +⭐ +📝(一键三连) 是对博主最大的鼓励与支持哦。

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

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

相关文章

C# 使用 RSA 加密算法生成证书签名产生“The system cannot find the file specified”异常

使用 C# 中 RSA&#xff08;System.Security.Cryptography.RSA&#xff09; 加密算法生成证书签名进行身份验证&#xff0c;在 VS2022 开发工具本地运行应用程序一切正常。 但将应用程序部署到远程服务器&#xff08;如&#xff1a;Azure App Services&#xff09;&#xff0c…

自动化测试的执行策略详解

前言 自动化测试的执行策略是指在自动化测试过程中&#xff0c;为了达到测试目标和要求&#xff0c;所采用的测试执行方案和策略。 执行策略涉及到测试用例的执行顺序、方式、环境、频率等方面的决策。 同时&#xff0c;我也准备了一份软件测试视频教程&#xff08;含接口、…

【技术干货】如何快速创建商用照明 OEM APP?

本文介绍了如何在涂鸦 IoT 平台的 App 工作台上创建一款体验版商照 App、正式版 OEM App、上架 App、以及完成通用配置。 OEM App 开发 创建 App 登录 涂鸦 IoT 平台的 App 页面。 单击 创建APP&#xff0c;选择 商照 APP 进行创建。 在提示框里&#xff0c;完善 App 信息…

SpringBoot 接口 字节数组直接显示为图片

源码&#xff1a; import java.io.ByteArrayOutputStream; import javax.imageio.ImageIO; import org.springframework.web.bind.annotation.RequestMapping;/*** 获取二维码图像* 二维码支付** param price 金额* return 二维码图像* throws IOException IOException*/ Requ…

掌动智能:UI自动化测试工具几点优势

UI自动化测试工具在现代软件开发中扮演着重要的角色&#xff0c;它们能够有效地验证应用程序的用户界面&#xff0c;确保其在不同平台和设备上的正常运行。本文将介绍掌动智能UI自动化测试工具的优势有哪些! 掌动智能UI自动化测试工具优势 1、零成本入门 自然语言编写&#xff…

单目标应用:墨西哥蝾螈优化算法(Mexican Axolotl Optimization,MAO)求解微电网优化--MATLAB代码

一、微网系统运行优化模型 微电网优化模型介绍&#xff1a; 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、墨西哥蝾螈优化算法MAO 墨西哥蝾螈优化算法&#xff08;Mexican Axolotl Optimization&#xff0c;MAO&#xff09;由Yenny Villuendas-Rey 1等人于2021…

代码随想录算法训练营第23期day20| 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

目录 一、&#xff08;leetcode 530&#xff09;二叉搜索树的最小绝对差 二、&#xff08;leetcode 501&#xff09;二叉搜索树中的众数 1.二叉搜索树 2.非二叉搜索树 思路 三、&#xff08;leetcode 236&#xff09;二叉树的最近公共祖先 一、&#xff08;leetcode 530&…

v-model 原理

v-model 原理 &#xff1a; 对应的是 v-bind 对应额是 v-on 创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\10-…

Tomcat和HPPT协议

1.介绍 1.Java EE 规范 JavaEE&#xff08;java Enterprise Edition&#xff09;&#xff1a;java企业版 JavaEE 规范是很多的java开发技术的总称。这些技术规范都是沿用自J2EE的。一共包括了13个技术规范 2.WEB概述 WEB在计算机领域中代表的是网络 像我们之前所用的WWW&…

JS VUE 用 canvas 给图片加水印

最近写需求&#xff0c;遇到要给图片加水印的需求。 刚开始想的方案是给图片上覆盖一层水印照片&#xff0c;但是这样的话用户直接下载图片水印也会消失。 后来查资料发现用 canvas 就可以给图片加水印&#xff0c;下面是处理过程。 首先我们要确认图片的格式&#xff0c;我们通…

【Java 进阶篇】JavaScript三元运算符详解

JavaScript是一门广泛用于前端和后端开发的编程语言&#xff0c;具备强大的表达式和运算符。本篇博客将重点介绍JavaScript中的三元运算符&#xff0c;解释其语法、用法和示例。如果您是JavaScript初学者&#xff0c;或者希望更深入了解这门语言的运算符&#xff0c;那么这篇博…

mysql面试题44:MySQL数据库cpu飙升的话,要怎么处理?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL数据库cpu飙升的话,要怎么处理呢? 当MySQL数据库的CPU使用率飙升时,可能表示数据库负载过重或存在性能问题。以下是处理MySQL数据库CPU飙…

VSS、VDD、VBAT、VSSA

引言 在学习设计TM32时&#xff0c;发现芯片除了GPIO引脚外还会引出许多引脚&#xff0c;以STM32F407ZGT6为例除了GPIO引脚还会有以下引脚 如VSS、VDD、VBAT、VSSA、NRST、VREF、VDDA、VCAP_1、VCAP_2、PDR_ON这些引脚。他们有何作用&#xff0c;电路设计中应如何连接&#x…

【SCS-CN】SCS-CN模型中CN值的确定

目录 一、说明二、SWAT三、HEC-HMS四、CN值转换公式五、确定CN25.1 ArcSWAT 2009用户指南5.2 SWAT plus Document5.3 National Engineering Handbook5.4 HEC-HMS水文建模系统原理方法应用5.5 Technical Release 55 (TR-55) 六、确定水文土壤单元&#xff08;HSG&#xff09;6.1…

dll动态链接库及ocx activex 控件regsvr32注册失败 解决方法(Win10)

一、错误提示说明&#xff1a; 1、regsvr32注册dll或ocx activex控件时提示模块 dll加载失败&#xff0c;请确保该二进制存储在指定的路径中&#xff0c;或者调试它以检查该二进制或相关的.dll文件是否有问题”。 检查了.dll文件路径也没有问题&#xff0c;在开发机器上是可以…

“.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“

目录 第一单元&#xff1a;二十一世纪程序执行 背景: 总结&#xff1a; 第二单元:对象导向与类别设计 背景: 总结&#xff1a; 第三单元&#xff1a;使用类别与基底类别库 背景: 总结: 第四单元:Windows开发程序 背景: 总结: 第五单元:防护式程序设计 背景: 总结…

Unity可视化Shader工具ASE介绍——6、通过例子说明ASE节点的连接方式

大家好&#xff0c;我是阿赵。继续介绍Unity可视化Shader编辑插件ASE的用法。上一篇已经介绍了很多ASE常用的节点。这一篇通过几个小例子&#xff0c;来看看这些节点是怎样连接使用的。   这篇的内容可能会比较长&#xff0c;最终是做了一个遮挡X光的效果&#xff0c;不过把这…

解决github加载过慢问题

github打不开怎么办&#xff1f;看到这篇文章&#xff0c;一切都稳了&#xff01; DNS被污染&#xff0c;一句话&#xff0c;修改系统hosts文件&#xff01; 1.hosts文件在哪&#xff1f;C:\Windows\System32\drivers\etc 2.用记事本打开hosts&#xff0c;在最后加入以下两行…

Kotlin函数作为参数指向不同逻辑

Kotlin函数作为参数指向不同逻辑 fun sum(): (Int, Int) -> Int {return { a, b -> (a b) } }fun multiplication(): (Int, Int) -> Int {return { a, b -> (a * b) } }fun main(args: Array<String>) {var math: (Int, Int) -> Intmath sum()println(m…

windows的最佳选项卡式窗口管理器软件TidyTabs

下载&#xff1a; https://jmj.cc/s/z1t3kt?pucodeS1wc https://download.csdn.net/download/mo3408/88420433 TidyTabs是一款Windows应用程序&#xff0c;它可以将多个打开的窗口整理成一个选项卡式的界面&#xff0c;使得用户可以更加方便地切换和管理不同的窗口。 Tidy…