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

目录

第一题分数求和

[第二题:求10 个整数中最大值](#第二题:求10 个整数中最大值)

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

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

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

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

斐波那契数的公式:

第六题:汉诺塔游戏

思路:

[1. 当n=1时,需要一步](#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型是长整型浮点型
cpp 复制代码
//分数求和

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 个整数中最大值

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

第四题:写一个代码:打印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

cpp 复制代码
//求斐波那契数列的第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步

cpp 复制代码
//汉诺塔游戏
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个台阶时,青蛙有几种方法

|-----|--------------------------|---------------|-------------|
| 台阶数 | 第一次跳一格 | 第一次跳两格 | 方法数 |
| 1 | 1 | | 1 |
| 2 | 1 1 | 2 | 2 |
| 3 | 111;12 | 21 | 3 |
| 4 | 1111;121;112 | 22;211 | 5 |
| 5 | 11111;1211;1121;1112;122 | 2111;221;212; | 8 |
| n | n-1 | n-2 | (n-1)+(n-2) |

cpp 复制代码
//青蛙跳台游戏
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的数字

cpp 复制代码
//数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);要放在循环里,要不然每次上一次猜对的数会一直在循环里循环。

cpp 复制代码
//猜数字游戏
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;


}

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

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

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

cpp 复制代码
#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;
}
相关推荐
whltaoin19 分钟前
【408计算机考研课程】-C语言认知
c语言·考研
大二转专业6 小时前
408算法题leetcode--第24天
考研·算法·leetcode
TANGLONG22218 小时前
【C语言】数据在内存中的存储(万字解析)
java·c语言·c++·python·考研·面试·蓝桥杯
TANGLONG2221 天前
【C语言】字符和字符串函数(2)
java·c语言·c++·python·考研·面试·蓝桥杯
大二转专业1 天前
408算法题leetcode--第21天
考研·算法·leetcode
西电研梦1 天前
西电25考研 VS 24考研专业课大纲变动汇总
考研·研究生·西电·西安电子科技大学
张小虎在学习1 天前
考研日语 - 高频核心 2200 词(八)
笔记·考研
张小虎在学习1 天前
考研日语 - 高频核心 2200 词(九)
笔记·考研
TANGLONG2222 天前
【C语言】内存函数的使用和模拟实现
java·c语言·c++·python·考研·面试·蓝桥杯
抓哇能手3 天前
王道408考研数据结构-图-第六章
c语言·数据结构·考研·算法·图论·408