
C/C++实例
文章平均质量分 50
主要记录编程学习过程中一些题目的求解和实例
羟基与苯
你好,工程师。
展开
-
球钟问题---栈与队列的应用
文章目录🍔球钟问题描述🍔球钟问题分析🍔代码实现 本文中涉及的代码已提交至Gitee,可以点击链接参考。鄙人乃一介初学者,文中及代码中难免出错,恳请同志们批评指正!🍔球钟问题描述球钟是一个利用球的移动来记录时间的简单装置,它有三个可以容纳若干个球的指示器:分钟指示器、五分钟指示器、小时指示器。若分钟指示器中有2个球,五分钟指示器中有6个球,小时指示器中有5个球,则时间为5:32。其工作原理是:每过一分钟,球钟就会从球队列的队首取出一个球放入分钟指示器,分钟指示器最多可容纳4个球。当放入第原创 2022-04-16 11:08:10 · 723 阅读 · 5 评论 -
C语言实现简易通讯录3.0(通讯录信息可以向文件写入,从文件读取)
我们在前文中介绍了如何实现简易通讯录后来又改进了通讯录,使之可以进行动态内存管理。但是,我们的通讯录程序是只能一次性使用的,退出程序所有的内容都消失了,那么本文就来实现将通讯录的数据写入到硬盘上的文件。再次打开程序时,再从文件上读取数据。实现数据的持久性。代码如下:addressBook.h文件#pragma once//头文件#include <stdio.h>#include <string.h>#include <stdlib.h>#def原创 2022-04-05 14:17:10 · 1617 阅读 · 3 评论 -
C语言实现简易通讯录2.0(动态内存管理)
我们在前文中介绍了如何实现简易通讯录,但是我们发现,如果直接在栈区开辟一个1000个大小为PeoInfo结构体大小的空间,而我们只使用了那么几个,不免有些过于浪费,于是我们考虑使用动态内存开辟来让空间使用更加合理。具体不再赘述,需要动态修改的内容只在几个函数中有所改变,代码中已经加注 动态版本: 的部分就是需要修改的部分。完整代码如下:addressBook.h文件:#pragma once//头文件#include <stdio.h>#include <string.原创 2022-04-05 14:12:04 · 777 阅读 · 0 评论 -
C语言--这几道经典笔试题,你能一眼看出陷阱吗?
题目1问:有如下代码,Test()函数的运行结果如何?void GetMemory(char* p){ p = (char*)malloc(100);}void Test(void){ char* str = NULL; GetMemory(str);//值传参 strcpy(str, "hello world"); printf(str);}int main(){ Test(); return 0;}结果:这条代码会运行出结果,但是并不会和我们预想的一样打印出“原创 2022-04-03 23:26:28 · 743 阅读 · 1 评论 -
C语言实现简易通讯录(增、删、查、改、排 功能)
文章目录前言一、实现思路1.1 整体架构搭建1.2 通讯录结构体定义与声明1.3 增加通讯录信息函数1.4 删除通讯录信息函数与查找信息函数1.5 修改通讯录信息函数二、完整代码2.1 addressBook.h文件2.2 addressBook.c文件2.1 main.c文件前言学习了结构体、枚举、联合这三种自定义类型,再融合之前学过的知识,尝试写一个通讯录程序。要求:该通讯录能存放1000个人的信息。每个人的信息包括:姓名+年龄+性别+电话+地址;增加通讯录信息;删去通讯录信息;查找通讯原创 2022-04-01 21:15:24 · 2563 阅读 · 0 评论 -
C语言--指针进阶3--这些指针和数组相关的题目你都会做吗?
此章主要记录一些和指针、数组相关的笔试题目。原创 2022-03-27 00:15:42 · 1193 阅读 · 0 评论 -
C语言--两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?输入例子 : 1999 2299输出例子 : 7思路分析对于二进制序列,我们要判断每一位的情况,最好从最后一位开始一位一位的往前开始观察。这里有个常见思路,就是让这个数按位与(&)上1,来观察结果是1还是0,如果是1,则表示当前二进制序列最后一位是1,如果是0则表示当前二进制序列最后一位是0当前:0011 0001位与:0000 0001结果:0000 0001(结果为1,则表示最后一位是1)判断完原创 2022-01-26 17:44:18 · 813 阅读 · 1 评论 -
C语言--输出一个整数的每一位(使用递归和不使用递归)
思路分析要输出一个整数的每一位,那么就要把这个数的每一位剥离。如果这个整数是小于10的数,则可以直接输出而不用剥离。这个想法很像递归,因此此处可以考虑使用递归来实现使用递归递归的思路:1.整数a如果小于10,则直接输出;2.如果整数a大于10,则输出其个位也就是a%10,再将a/10送给函数来递归,这样一层层剥离直到a<9。代码如下:void dig(int a){ if (a > 9) { printf("%d ", a % 10); dig(a / 10); }原创 2022-01-26 17:24:50 · 2159 阅读 · 2 评论 -
C语言-求一个整数的二进制序列中1的个数
题目要求:写一个函数返回参数二进制中 1 的个数比如:15 的二进制为 0000 1111其中包含有4 个 1思路分析为了得到一个二进制序列中所有的1,我们一般考虑一位一位的来判断。因此我们可以想到使用这个数的二进制序列和1做按位与(&)的操作,因为与(&)操作符是两个相应的位置都为1才是真。举个例子:3的二进制:0000 00111的二进制:0000 0001做与运算得: 0000 0001根据与运算的结果可知,3的二进制的最后一位是1。此时若再将3向右原创 2022-01-26 13:07:57 · 1105 阅读 · 2 评论 -
C语言--求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字, 例如:2+22+222+2222+22222
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222观察算式,发现第几个加数就有几个2。因此我们可以考虑使用一个for循环,来满足我们循环5次,每次让a变为下一个数的目的,同时需定义一个val变量,每循环一次就加上a,加五次即可得出结果。那么如何让a变成aa……aaaaa呢?我们以2举例:第一次循环:22 = 2 + 20(20 = 2 * 10)第二次循环:222 = 2 + 220(220 = 22 * 10)…第五次原创 2022-01-26 13:08:24 · 2711 阅读 · 1 评论 -
C语言--输出0~999之间的所有水仙花数
输出0~999之间的所有水仙花数在动手写代码之前,我们得先搞明白什么是水仙花数:水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。(百度百科)由此我们知道,只有三位数才有可能是水仙花数,因此我们需要使用一个fo原创 2022-01-24 16:49:08 · 811 阅读 · 1 评论 -
C语言--编写程序数一下 1到 100 的所有整数中出现多少个数字9
编写程序数一下 1到 100 的所有整数中出现多少个数字9思路分析:1-100中出现9的数字有9,19,29……99和90,91,92……99。观察9的位置,前面的9都在个位,后面的9都在十位,而99则个位十位都有9。因此我们可以考虑先使用for循环来产生1-100的整数,在使用%和/操作符来判断个位和十位是否有9(if(9 == n%10 || 9 == n/10)),设置一个计数器,判断到一个含9的数字之后计数器加一,又因为99在我们的想法中只会使得计数器加一次,所以最后的个数应该再加上一个。原创 2022-01-24 16:17:16 · 2526 阅读 · 3 评论 -
C语言--计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值观察算式,我们发现所有加数的分母是从1-100,因此考虑使用for循环来产生1-100的数字。注意事项:1.结果是一个小数,定义储存结果的变量和其他相关变量时需要定义成float或者double型!2.法二需要包含头文件:#include <math.h>法一:再观察加数前面的正负号是交替的,且分母为奇数时是正号,分母为偶数时是负号,此时可以考虑用两个循环,分别产生偶数分母和奇数分母,加出两个结果,最原创 2022-01-24 16:05:30 · 6418 阅读 · 1 评论 -
C语言--输出乘法口诀表
9x9乘法表,需要两个数,故而考虑使用双for循环,各产生一个乘数。其中第二层循环的判断部分应该和第一层循环的值保持一直,因为每一层乘法表最大就是n×n。代码如下://2. 输出乘法口诀表int main(){ int i = 1; int j = 1; for (i = 1; i < 10; i++) { for (j = 1; j < i + 1; j++) { printf("%d×%d = %-2d ", j, i, i * j); } print原创 2022-01-24 14:20:13 · 3279 阅读 · 1 评论 -
C语言--将数组A中的内容和数组B中的内容进行交换(数组一样大)
利用临时变量tmp来交换两个数组的内容。代码如下:int main(){ int a[5] = { 1,2,3,4,5 }; int b[5] = { 6,7,8,9,10 }; int tmp = 0; for (int i = 0; i < 5; i++) { tmp = b[i]; b[i] = a[i]; i[a] = tmp; }}运行效果(相比上面的代码,加了打印代码后运行的效果):...原创 2022-01-24 15:32:13 · 417 阅读 · 2 评论 -
C语言实现简易版三子棋
文章目录main.c文件包含游戏各功能函数的.c文件头文件main.c文件#include <stdio.h>#include <string.h>#include "game.h"//本项目实现三子棋游戏void menu(){ printf("***** 1. PLAY *****\n"); printf("***** 0. EXIT *****\n"); printf("********************原创 2022-01-22 15:34:50 · 2297 阅读 · 0 评论 -
C语言--打印100~200之间的素数
只能被1和自身整除的数叫素数。由此可以使用双fot循环,第一层循环来实现100-200,第二层循环实现从1-自身,判断第一层循环的i能否被第二层循环的j整除。另,偶数不可能是素数,因此第一层循环时可以只找奇数。//1. 打印100~200之间的素数int main(){ int i = 0, j = 0; int flag = 0;//设置一个标志 int count = 0; for (i = 101; i < 201; i += 2) { for (j = 2; j &l原创 2022-01-24 14:07:50 · 294 阅读 · 1 评论 -
C语言--判断1000年~2000年之间的闰年
代码的重点在于闰年的判定方法:能被4整除且不能被100整除的年份,或者能被400整除的年份就是闰年。代码如下://3. 判断1000年 ~ 2000年之间的闰年int main(){ int year = 0; int count = 0; for (year = 1000; year < 2001; year++) { if ((0 == year % 4 && 0 != year % 100) || 0 == year % 400) { printf(原创 2022-01-24 14:34:11 · 348 阅读 · 1 评论 -
C语言--输入10个整数并输出最大值
10个整数若一个个定义输入实在繁琐,因此考虑使用数组,输入时利用for循环实现输入10个整数。求最大值时可以定义一个第三变量max,使用for循环遍历,如果出现比max大的数就将其值赋给max,直到和最后一个数比较完。代码如下:// 3.求10 个整数中最大值。int main(){ int re; int arr[10] = {0}; for (int i = 0; i < 10; i++) { re = scanf("%d", &arr[i]); } int m原创 2022-01-24 14:45:55 · 14957 阅读 · 0 评论 -
C语言实现简易版扫雷
C语言实现简易版扫雷原创 2022-01-20 14:54:37 · 3114 阅读 · 0 评论 -
C语言-选择语句和循环语句练习题
1. 计算 n的阶乘。2. 计算 1!+2!+3!+……+10!3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)4. 编写代码,演示多个字符从两端移动,向中间汇聚。5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。6.设计一个猜数字游戏。要求:随机产生一个1-100的数字,然后你来猜。a.猜对了:恭喜你!b.猜错了,告诉你猜大了还是猜小了,继续猜。c.玩完一把可以选择继续游戏,直到退出游原创 2022-01-17 15:39:22 · 2743 阅读 · 1 评论 -
C语言--求两个数的最大公约数
公约数,即能被两数同时整除的数。最大公约数,顾名思义,乃公约数中最大者。既然是公约数,那么肯定是小于等于两个数中的最小值。如果我们从两个数的小值开始逐一递减来寻找公约数,那么找到的第一个公约数不就是最大公约数吗?代码如下://5.求两个数的最大公约数。int main(){ int a = 0, b = 0; printf("请输入两个数:"); int re = 0;//scanf的返回值 re = scanf("%d%d", &a, &b); int gong原创 2022-01-24 15:12:46 · 238 阅读 · 1 评论 -
C语言整蛊小恶作剧--程序运行后必须输入指定文字(比如“我是猪”),否则电脑将关机
C语言system()函数,strcmp()函数,实现输入指定文字,否则电脑关机。整蛊恶作剧。原创 2022-01-17 21:40:01 · 1784 阅读 · 4 评论 -
C语言--输入三个数按从大到小输出。
这里考虑两两比较,将大的数放到前面去,最后顺序输出。代码如下://4.将三个数按从大到小输出。int main(){ int a = 0, b = 0, c = 0; int tmp = 0; int re = 0; printf("输入三个整数:"); re = scanf("%d%d%d", &a, &b, &c); while (!(a > b && b > c))//判断是不是已经从大到小排好序了,没排好就循环继续排 {原创 2022-01-24 15:00:00 · 3161 阅读 · 1 评论 -
C语言--如何在不定义中间变量的前提下交换两数的值
1.问题如何使用C语言交换两个数的值呢?想必大家已经轻车熟路。就和交换A杯和B杯两个杯子内的茶与咖啡一样,我们只需再拿一个空杯子C,借助空杯子C就可以实现交换A、B内容物的目的。但如果给你一个前提条件,不允许你创建中间变量,那如何实现交换两数的数值呢?2.解决2.1利用两数之和其中我们很容易想到的是利用两数之和来实现交换其值的目的,具体的操作如下: int a = 3; int b = 5; a = a + b; b = a - b; a = a - b;2.2利用按位异或首先我原创 2022-01-21 00:49:46 · 503 阅读 · 0 评论 -
C语言使用函数递归实现n的k次方(包括负数次方)
C语言使用函数递归实现n的k次方(包括负数次方)转载 2022-01-19 08:01:29 · 1389 阅读 · 1 评论 -
C语言编写函数求字符串长度的几种实现方法
文章目录前言一、使用计数器的方法二、使用函数递归的方法三、使用指针-指针的方法总结前言我们都知道在C语言标准库string.h中有一个strlen()函数可以求得字符串长度,那么如果让我们自己写一个这样的函数如何去写呢?下面介绍三种实现的方法。一、使用计数器的方法所谓计数器方法,顾名思义,就是创建一个临时变量count用来计数,遍寻字符串直到找到字符串结束标志’\0’,每循环找一次就count+1,最后返回count就可以得到字符串长度了。//函数int my_strlen(char *st原创 2022-01-23 10:46:10 · 15279 阅读 · 2 评论 -
C语言实现输入字符串逆向/反向排列(使用递归和不使用递归)
C语言实现输入字符串逆向/反向排列(使用递归和不使用递归)原创 2022-01-19 06:37:13 · 1314 阅读 · 1 评论