IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言经典例题 -> 正文阅读

[C++知识库]C语言经典例题

题目主要为菜鸟教程中觉得比较好的例题。

目录

ex1

ex2

ex3

ex4

ex5

ex6

ex7

ex8

ex9

ex10

ex11 汉诺塔问题


ex1

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

/*
解法一:将a视为循环变量
解法二:将x视为循环变量
a + 100 = x*x			(1)
a + 100 + 160 = y*y		(2)
	2式减去1式得
(y-x)(y+x) = 168		(3)
	由3式得
0 <= x <=y <= 168

由1式可得 a >= -100
由2式可得 a <= 168*168-100-160
*/

void ex3(void)
{
	int a, x, y, min, max;
	min = -100;
	max = 168 * 168 - 100 - 160;

	for (a = min; a <= max; a++)
	{
		x = (int)sqrt(a + 100);
		y = (int)sqrt(a + 100 + 168);
		if (x * x == a + 100 && y * y == a + 100 + 168)
		{
			printf("该数为%d\n", a);
		}
	}
}
void ex3_2(void)
{
	int a, x, y;
	for (x = 0; x <= 168; x++)
	{
		y = (int)sqrt(168 + x * x);
		if ((y - x) * (y + x) == 168 && y>0 && y <= 168)
		{
			a = x * x - 100;
			printf("该数为%d\n", a);
		}
	}
}

ex2

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

/*
解法一:递归法
解法二:循环
*/
int ex11_rabbit(int month)
{
	int sum = 0;
	if (month > 2) 
	{
		sum = ex11_rabbit(month - 1) + ex11_rabbit(month - 2);
	}
	else
	{
		sum = 1;
	}
	return sum;
}
void ex11_rabbit2(void)
{
	int f1 = 1, f2 = 1;
	int i;
	for (i = 0; i < 20; i++)
	{
		printf("%d\n%d\n", f1, f2);
		f1 = f1 + f2;
		f2 = f1 + f2;
	}
}

ex3

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

void ex22(void)
{
	char a, b ,c;
	for (a = 'x'; a <= 'z'; a++)
	{
		for (b = 'x'; b <= 'z'; b++)
		{
			if (b != a)
			{
				for (c = 'x'; c <= 'z'; c++)
				{
					if (c != a && c != b)
					{
						if (a != 'x' && c != 'x' && c != 'z')
							printf("a->%c,b->%c,c->%c\n", a, b, c);
					}
				}
			}

		}
	}
}

ex4

删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母

*
1.创建一个比较数组,与字符串大小相同
2.将字符串与需要删除的字符进行比较,若相同,则将比较数组相应位置1
3.输出比较数组中不为1的位
*/

void ex32(void)
{
	char s[21], del;
	char cmp[21] = { 0 }, new[21] = { 0 };
	int i;
	int nub = 0;

	printf("输入字符串(20个以内):\n");
	scanf("%s", s);
	getchar();

	printf("输入需要删除的字符:\n");
	scanf("%c", &del);


	for (i = 0; i < strlen(s); i++)
	{
		if (s[i] == del)
		{
			cmp[i] = 1;
		}
	}
	for (i = 0; i < strlen(s); i++)
	{
		if (cmp[i] != 1)
		{
			new[nub] = s[i];
			nub++;
		}
	}
	printf("删改后字符串为:\n%s", new);
}

ex5

????????有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

// 这个题目是一直循环报数,计数不清零,直到最后一个人为止
void ex69()
{
	int num, i, peo, check;
	int arr[50];
	printf("请输入人数(小于50):");
	scanf("%d", &num);
	
	// 赋值
	for (i = 0; i < num; i++)
	{
		arr[i] = i + 1;
	}

	// 用peo变量存储序号,当遇到3的倍数时,将对应数据元素置0
	check = num;
	peo = 0;
	while (check != 1)
	{
		for (i = 0; i < num; i++)
		{
			// 排号
			if (arr[i] != 0)
			{
				peo++;
				if (peo % 3 == 0)
				{
					arr[i] = 0;
					check--;
				}
			}
		}
	}

	for (i = 0; i < num; i++)
	{
		if (arr[i] != 0)
		{
			printf("%d\t", arr[i]);
		}
	}

}

ex6

编写input()和output()函数输入,输出5个学生的数据记录。

struct Stu {
	char name[20];
	int number;
};

struct Stu stu[5];

void input(struct Stu* stu)
{
	int i;
	for (i = 0; i < 5; i++)
	{

		printf("请输入学生%d的姓名:", i+1);
		scanf("%s", (*(stu+i)).name);
		getchar();

		printf("请输入学生%d的学号:", i+1);
		scanf("%d", &(*(stu + i)).number);
		getchar();

		putchar('\n');
	}
	return;
}

void output(struct Stu* stu, int num)
{
	int i;
	for (i = 0; i < num; i++)
	{
		printf("学生%d的姓名:%s\n", i,(*(stu+i)).name);
		printf("学生%d的学号:%d\n", i,(*(stu+i)).number);
		putchar('\n');
	}
	return;
}

ex7

????????编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)。

double even(int a)
{
	int i;
	double sum = 0;
	

	for (i = 2; i <= a; i += 2)
	{
		sum += (double)1 / i;
	}
	return sum;
}

double odd(int a)
{
	int i;
	double sum = 0;

	for (i = 1; i < sum; i += 2)
	{
		sum += (double)1 / i;
	}
	return sum;
}

void ex76()
{
	int a;
	double sum;
	printf("请输入一个正数:");
	scanf("%d", &a);

	if (a % 2 == 0)
	{
		sum = even(a);
	}
	else
	{
		sum = odd(a);
	}
	printf("%lf", sum);

	return;
}

ex8

? ? ? ? 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?

 /*
判断最后一次每份有几个桃子   res = (a-1)/5 * 4
 分之前有  a = res/4 * 5 +1  个桃子,因此剩余桃子需要满足   res/4为整数这一条件
*/
void ex80()
{
	int sum, res;
	int ave = 1, i = 0;

	while (i<5)
	{
		res = 4 * ave;
		for (i = 0; i < 5; i++)
		{
			if (res % 4 != 0)
			{
				break;
			}
			sum = res / 4 * 5 + 1;
			res = sum;
		}
		ave++;
	}
	printf("最少有%d个桃子", sum);
	return;

ex9

????????计算字符串中子串出现的次数

void ex96()
{
	int al, bl, i, j, k;
	int cnt = 0;
	char a[50], b[50];
	printf("输入母串:");
	scanf("%s", a);
	getchar();
	printf("输入子串:");
	scanf("%s", b);

	al = strlen(a);
	bl = strlen(b);
	for (i = 0; i <= al - bl; i++)
	{
		for (j = 0, k = 0; j < bl && b[j] == a[i + k]; j++, k++);
		if (j == bl)
		{
			cnt++;
		}
	}
	printf("子串出现%d次", cnt);

}

ex10

????????有两个磁盘文件A和B,各存放一行字母,把这两个文件中的信息合并,输出到一个新文件C中。

// 需要事先创建a.txt和b.txt
void ex99()
{
	FILE *fp1 = NULL, *fp2 = NULL, * fp3 = NULL;
	char a[100], b[100];

	if ((fp1 = fopen("a.txt", "r")) == NULL)
	{
		printf("error:cannot open a.txt\n");
		exit(0);
	}
	fgets(a, 50, fp1);
	fclose(fp1);

	if ((fp2 = fopen("b.txt", "r")) == NULL)
	{
		printf("error:cannot open b.txt\n");
		exit(0);
	}
	fgets(b, 50, fp2);
	fclose(fp2);

	strcat(a, b);
	if ((fp3 = fopen("c.txt", "w")) == NULL)
	{
		printf("error:cannot open c.txt\n");
		exit(0);
	}
	fprintf(fp3, "%s", a);
	fclose(fp3);

	return;
}

ex11 汉诺塔问题

/*
汉诺塔问题
layer:层数
a:木块所在的塔座
b:借助的塔座
c:目标塔座

在递归时,默认fun(n-1)已经求出
移动时分为3步:
	第一步:将a上方所有木块移动至b
	第二步:将a最下面一块移动至c
	第三步:将b上所有木块移动至c
*/
void hannuota(int layer, char a, char b, char c)
{
	if (layer == 1)
	{
		printf("%c --> %c\n", a, c);
	}
	else
	{
		hannuota(layer - 1, a, c, b);
		printf("%c --> %c\n", a, c);
		hannuota(layer - 1, b, a, c);
	}
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 09:47:23  更:2022-05-14 09:48:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 8:54:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码