考研C语言刷题基础篇之分支循环结构基础(二)

目录

第一题分数求和

 第二题:求10 个整数中最大值

第三题:在屏幕上输出9*9乘法口诀表

第四题:写一个代码:打印100~200之间的素数 

第五题:求斐波那契数的第N个数

斐波那契数的概念:前两个数相加等于第三个数

斐波那契数的公式:

第六题:汉诺塔游戏 

思路: 

1. 当n=1时,需要一步

2.当n=2时,需要三步 

3.当n=3时,需要七步

总结一下

公式结论

 第七题:青蛙跳台阶问题

 第八题数9的个数

第十题 猜数字游戏(复习版本)

第十一题 二分查找(复习版)


第一题分数求和

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

  1. 将这个试子分成两部分,第一部分为1/1+1/3+1/5+....+1/99;第二部分1/2+1/4+.....1/100
  2. 然后将这两个试子相减
  3. 注意这里分数是浮点型
  4. double型是长整型浮点型
//分数求和

int main() {
	double sum = 0.0;
	double sub = 0.0;
	double acc = 0.0;
	for (int i = 1; i <= 100; i++) {
		if (i % 2 == 0) {
			sum += (1.0 / i);
		}
		else {
			sub += (1.0 / i);
		}
	}
	acc = sub - sum;
	printf("%lf", acc);
	

 第二题:求10 个整数中最大值

 

//求10 个整数中最大值

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	/*scanf("%d ", arr);*/
	int i = 0;
	int j = 0;
	for(int i = 0;i<10;i++)
	{
		if (arr[i] >arr[i + 1])
		{
			j = arr[i];
		}
		else
		{
			j = arr[i+1];
		}
	}
	printf("%d", j);
	return 0;
}

第三题:在屏幕上输出9*9乘法口诀表

 两层循环第一层循环用来控制乘号左边,第二层循环用来控制乘号右边和每一层的个数

//在屏幕上输出9*9乘法口诀表

int main() 
{
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=i;j++)
		{
			printf("%d*%d=%d ", j, i, j*i);
		}
		printf("\n");
	}
	return 0;
}

第四题:写一个代码:打印100~200之间的素数 

第五题:求斐波那契数的第N个数

斐波那契数的概念:前两个数相加等于第三个数

1    1   2   3   5   8    13   21   34   55  

斐波那契数的公式:

当N<=2时   Fib(N)= 1;

当N>3时, Fib(N)=Fib(N-2)+Fib(N-1);2

//求斐波那契数列的第N个数

int Fib(int n) {

	if (n <= 2) {
		return 1;
	}
	else {
		return Fib(n - 1) + Fib(n - 2);
	}

}

int main() {

	int n = 0;
	scanf("%d", &n);
	int sum = Fib(n);
	printf("第%d个数为:%d\n", n,sum);
	return 0;


}

第六题:汉诺塔游戏 

思路: 

1. 当n=1时,需要一步

2.当n=2时,需要三步 

3.当n=3时,需要七步

 这里我们发现为了实现第四步,是完成了n=2的所有步骤3步。若将黑红当一个整体。

 那么我们要实现最后一步是不是也是完成相同的操作即n=2时的操作。

总结一下

首先,是完成一次n=2时的操作 即(n-1)时操作的操作。

在加上一步将蓝色放入第三根柱子的操作

最后,是将黑红当一个整体,在完成一次n=2即(n-1)时的操作。

公式结论

汉诺塔公式为:

当n=1时    要1步

当n>1时    要 2*(n-1)+1步

//汉诺塔游戏
int Hanoi(int n) {

	if (n == 1) {
		return 1;
	}
	else {
		return 1 + 2 * Hanoi(n - 1);
	}

}

int main() {

	int n = 0;
	scanf("%d", &n);
	int sum = Hanoi(n);
	printf("需要%d步", sum);
	return 0;

}

 第七题:青蛙跳台阶问题

 问题:青蛙一次可以跳一个台阶,也可以一次跳2个台阶。请问如果有n个台阶时,青蛙有几种方法

台阶数第一次跳一格第一次跳两格方法数
111
21 122
3111;12213
41111;121;11222;2115
511111;1211;1121;1112;1222111;221;212;8
nn-1n-2(n-1)+(n-2)
//青蛙跳台游戏
int fac(int n) {

	if (n == 1) {
		return 1;
	}
	else if(n==2) {
	
		return 2;
	}else{
		return fac(n-1)+fac(n-2);
	}

}

int main() {

	int n = 0;
	scanf("%d", &n);
	int sum = fac(n);
	printf("需要%d步", sum);
	return 0;

}

 第八题数9的个数

数100以内的出现过9的数字

//数9的个数
int main() {
	int n = 1;
	while (n <= 100) 
	{
		if (n % 10 == 9) {
			printf("%d ", n);
		}
		else if(n / 10 == 9) {
			printf("%d ", n);
		}
		n++;
	}
	return 0;
}

第十题 猜数字游戏(复习版本)

 易错点:

1. srand((unsigned int)time(NULL));随机数种子,不能放在while循环里,要不然每次输入数字,都会生成随机的种子,会导致永远猜不对数字。

2.scanf("%d", &n);要放在循环里,要不然每次上一次猜对的数会一直在循环里循环。

//猜数字游戏
void menu() {

	printf("*******************\n");
	printf("*******0 结束******\n");
	printf("*******1 开始******\n");
	printf("*******************\n");
	printf("输入0/1\n");
}

int fac(int n) {
	srand((unsigned int)time(NULL));
	int nnn = rand()%100+1;
	return nnn;

}

int main() {
	menu();
	int n = 0;
	int nn = 0;
	scanf("%d", &nn);
	srand((unsigned int)time(NULL));
		if (nn == 1) {
			int sum = fac(n);
			while (1) {
				
				printf("输入你猜的数字:");
				scanf("%d", &n);
				
				if (n < sum) 
				{
					printf("猜小了\n");
					
					
				}
				else if (n > sum) 
				{
					printf("猜大了\n");
					

				}
				else 
				{
					printf("猜对了");
					break;
					
				}
			
			}
		}
		else {
			printf("结束游戏");
		}
	

	return 0;


}

第十一题 二分查找(复习版)

编写代码在一个整形有序数组中查找具体的某个数

要求:找到了就打印数字所在的下标,找不到则输出:找不到。

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

//二分查找
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sum = sizeof(arr) / sizeof(arr[0]);
	printf("数组有%d个\n", sum);
	int left = 0;
	int right = sum - 1;
	int n = 0;
	printf("请输入你要查找的数:");
	scanf("%d", &n);
	while (n)
	{
		int mid = (left + (right - left)) / 2;
		if (n < arr[mid])
		{
			right = mid - 1;
		}
		else if (n > arr[mid])
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了下标为:%d", arr[n]);
			break;
		}
	}
	return 0;
}

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值