栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言经典例题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言经典例题

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

目录

ex1

ex2

ex3

ex4

ex5

ex6

ex7

ex8

ex9

ex10

ex11 汉诺塔问题


ex1

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


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("该数为%dn", 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("该数为%dn", 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("%dn%dn", 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->%cn", 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("%dt", 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的姓名:%sn", i,(*(stu+i)).name);
		printf("学生%d的学号:%dn", 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

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

 
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.txtn");
		exit(0);
	}
	fgets(a, 50, fp1);
	fclose(fp1);

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

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

	return;
}

ex11 汉诺塔问题
void hannuota(int layer, char a, char b, char c)
{
	if (layer == 1)
	{
		printf("%c --> %cn", a, c);
	}
	else
	{
		hannuota(layer - 1, a, c, b);
		printf("%c --> %cn", a, c);
		hannuota(layer - 1, b, a, c);
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867526.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号