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

目录

第一题

第二题

 方法一:要循环两次,一次求阶乘,一次求和。

注意:在求和时,如果不将sum每次求和的初始值置为1,那么求和就会重复。

方法二:

第三题

方法一:用数组遍历的思想

 方法二用折半查找的思想

折半查找的思想

 第四题

方法一:用两个变量,两个数组进行复制

方法二

第五题

 方法一:用for循环和if else分支结构。

方法二:用strcmp函数比较字符串的大小 

第五题(重要需要多次复习)


第一题

求n!

方法一:循环迭代法 

int main() {

	int n = 0;
	int sum = 1;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		sum = sum * i;
		//sum *=i;
	}
	printf("%d\n",sum);
	return 0;
}

方法二:递归法 

 注意0!,0的阶乘也为1

//n!递归写法
int fib(int n) {

	if (n <= 1) {		//0!=1
		return 1;
	}
	else {

		return n * fib(n - 1);
	
	}

}
int main() {

	int n = 0;
	scanf("%d", &n);
	int sum = fib(n);
	printf("%d\n", sum);
	return 0;
}

第二题

第二题1!+2!+...+n!

 方法一:要循环两次,一次求阶乘,一次求和。

注意:在求和时,如果不将sum每次求和的初始值置为1,那么求和就会重复。

正常求和,1+1*2+1*2*3......

每一重置sum:1+1+1*2+1+1*2+1*2*3+1+1*2+1*2*3+1*2*3*4

方法二:

//第二题1!+2!+...+n!
int main() {

	int n = 0;
	scanf("%d", &n);
	int sum = 1;
	int cum = 0;
	for(int i = 1;i<=n;i++)				//要循环两次
	{
		sum = 1;						//让sum每次置为1
		for (int j = 1; j <= i; j++) 
		{
			sum = sum * j;
		}
		cum = cum + sum;
	}

	/*for (int i = 1; i <= n; i++) {
		sum *= i;
		cum += sum;
	}*/
	printf("%d", cum);
	return 0;
}

第三题

 在有序数组1,2,3,4,5,6,7,8,9,10里查找元素

printf("%d\n", sizeof(arr));    //求数组的大小
    printf("%d\n", sizeof(arr[0]));        //求数组一个元素的大小
    printf("%d\n", sizeof(arr) / sizeof(arr[0])         //求数组的元素个数

方法一:用数组遍历的思想

 这里用到sizeof函数,可以求出数组的大小

//第三题 在有序数组里查找元素

方法一遍历查找
int main() {

	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr[0]));
	printf("%d\n", sizeof(arr) / sizeof(arr[0]));
	int n = 0;
	scanf("%d", &n);
	int i=0;
	while (i<=10) {
		if (arr[i] != n) {			
        i++;
	}
		else {
			printf("找到了,下标为%d", i);
			break;
		}
	}

	return 0;
}

 方法二用折半查找的思想

 用一个变量left表示第一个元素,一个变量right表示最后一个元素。

数组的下标是从0开始的,所以right的值应该是数组长度-1;

折半查找的思想

//方法二折半查找

	int main(){

		int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
		int n = 0;
		scanf("%d", &n);
		int tp = sizeof(arr) / sizeof(arr[0]);
		int left = 0;
		int right = tp - 1;
		int mid = (left + right) / 2;
		while (left <= right) {
			mid = (left + right) / 2;
			if (n > arr[mid]) {
				left = mid + 1;
			}
			else if (n < arr[mid]) {
				right = mid - 1;
			}
			else {
				printf("找到了下标为%d",mid);
				break;
			}
		}

		return 0;
	}

 第四题

从两头向中间移动,生成相应的字符串

如将 welcome to China !!!,从两头向中间输出

输出结果如下 

方法一:用两个变量,两个数组进行复制

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
//第四题 
int main() {

		//方法一
		char arr1[] = "welcome to China!!!";
		char arr2[] = "*******************";
		int tp = sizeof(arr1) / sizeof(arr1[0]);
		int left = 0;
		int right = tp - 1;

		while (left <= right) {
				arr2[left] = arr1[left];
				arr2[right] = arr1[right];
				left++;
				right--;
				printf("%s\n", arr2);
		}
		return 0;

}

方法二

可以设置延迟效果,利用Sleep函数,和system(“cls”)来清空屏幕。

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
//第四题 
int main() {

		//方法二
		char arr1[] = "welcome to China!!!";
		char arr2[] = "*******************";
		int tp = sizeof(arr1) / sizeof(arr1[0]);
		int left = 0;
		int right = tp - 1;

		while (left <= right) {
				arr2[left] = arr1[left];
				arr2[right] = arr1[right];
				left++;
				right--;
				Sleep(1000);
				system("cls");
				printf("%s\n", arr2);
		}
		return 0;

}

第五题

编写代码,模拟用户登录程序,只能登录三次,只允许输入三次密码,如果三次都错误就退出程序,密码正确就提示成功。

 方法一:用for循环和if else分支结构。

//第五题
int main() {

	int i = 0;
	int n = 0;
	int pas = 123456;
	for (int i = 0; i < 3;i++) {
		printf("请输入正确的密码\n");
		scanf("%d", &n);
		if (n == pas) {
			printf("成功");
			break;
		}
		else {
			printf("密码不对\n");
		}
	}

	return 0;
}

方法二:用strcmp函数比较字符串的大小 

 注意:strcmp函数的头文件是#include<string.h>

 注意:两个字符串比较大小不能直接用==比较,要使用strcmp函数比较

 如直接相比会导致密码不对

	//方法二
	int i = 0;
	char password[20] = {0};
	for (int i = 0; i < 3; i++) {
		printf("请输入正确的密码\n");
		scanf("%s", password);
		if (strcmp(password,"123456")==0) {
			printf("成功");
			break;
		}
		else {
			printf("密码不对\n");
		}
	}

	return 0;

第五题(重要需要多次复习)

电脑随机生成1-100的之间的数,然后我们猜数字,如果猜小了,返回猜小了。猜大了,返回猜大了,如果猜对返回猜大了,如果猜对了,返回猜对了,然后游戏结束。

  1.  在使用随机数函数rand之前要使用srand()随机数生成器。
  2.  srand(),传入参数如srand(1),参数不同所生成的随机数不同,参数相同生成的随机数是相同的,如srand(1)与srand(2)的随机数不同,但是srand(1)与srand(1)的随机数相同。
  3. 若要生成随机的随机数种子,就要用到time函数,srand((unsigned int)time(NULL))生成随机的随机数种子。
  4. rand函数是伪随机的,真正的随机要用srand。
  5. time函数的返回值是time_t,srand的形参是unsigned int所以要强制类型转换,time的参数是一个指针类型,所以当不用时要值为空NULL。
//第六题
void meun() {

	printf("**********************\n");
	printf("********1 play********\n");
	printf("********0 exit********\n");
	printf("**********************\n");

}
void game() {
	//生成随机数
	int ran = rand() % 100 + 1;
	/*printf("随机数是%d\n ", ran);*/
	//猜数字
	int n = 0;
	while (1) {
		printf("输入你猜的数字\n");
		scanf("%d", &n);
		if (n > ran) {
			printf("猜大了\n");
		}
		else if (n<ran) {
			printf("猜小了\n");
		}
		else {
			printf("猜对了\n");
		}
	

	}

}
int main() {

	int input = 0;
	srand((unsigned int)time(NULL));		//不用每次都生成一个随机数种子,用同一个随机数种子,才能多次输入使用的相同的随机数

	do {
		meun();
		printf("请输入1\\0:\n");
		scanf("%d", &input);
		if (input == 1) {
			printf("开始猜数字游戏\n");
			game();
		}
		else if (input == 0) {
			printf("结束游戏");
			break;
		}
		else {
			printf("输入错误");
		}

	} while (input);


	return 0;
}

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
考研c语言复试面试题主要涉及基本知识点和算法思想。 首先,考官可能会询问C语言基础知识,如变量的定义、常量和运算符的使用等。在回答中,我会着重强调C语言的数据类型、变量的存储和作用域、内存管理等重点内容。 其次,考官可能会针对C语言的特性和应用进行提问。例如,对指针的理解和使用、内存动态分配的方法和原理、结构体和联合体的巧用等。对于这些问题,我会结合实际应用场景,说明在C语言中如何高效地进行编程和问题解决。 另外,考官还可能会考察C语言算法思想和常见的算法题。例如,对于排序算法,我会简单介绍几种常见的排序方法,如快速排序、归并排序等,并指出它们的时间复杂度和适用场景。如果遇到其他算法问题,我会尽力给出解题思路和步骤,以展示我在算法方面的理解和应用能力。 最后,我会总结回答,强调对C语言的理解程度和自己学习过程中的收获。我会强调在平时的学习和实践中,我通过阅读相关文献资料、参与编程竞赛等方式持续提升自己的C语言编程技能和算法思想,并且对于未来研究方向中与C语言相关的问题有着浓厚的兴趣。 通过对上述内容的准备和回答,我相信能够给考官留下深入学习和研究C语言的印象,展示自己在这方面的能力和潜力,从而在考研C语言复试中取得良好的成绩。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值