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

2024-01-20 21:12

本文主要是介绍考研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!=1return 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每次置为1for (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;
}

这篇关于考研C语言刷编程题篇之分支循环结构基础篇(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/627351

相关文章

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的