程序设计基础中可能出现的简单编程题2(以郑大为主体)

我们在学习编程过程中往往不仅有C语言实验报告,还有程序设计实验报告。程序设计这一科目主要是为了培养我们写代码时的计算思维,养成从问题到代码实现逐步分析,逐步深入的好习惯。前面有一篇文章介绍了部分程序设计实验报告中的编程题,今天再补充一些含新知识点的编程题,希望对大家有所帮助!

目录

1.构建一个函数int max(int xint y)求两个数的最大值,并通过该函数求任意三个整数的最大值。

2.通过函数调用,计算两个数的最小公倍数。

3.用递推法实现 cos(x)

4.用递归算法求:1+2+3+......+n。

5.用递归算法求数组元素的和。

6.用递归语句,计算x^n。其中,n是正整数。

7.用递归的方法实现十进制到八进制的转换。

8.将两个无序的一维数组排序,然后将其合并到一个一维数组中,仍保持数组有序。

9.输入一个分数,将其划为最简。例如:12/24 化简为 1/2。为了把分数约分为最简分式,首先计算分子和分母的最大公约数,然后分子和分母都除以最大公约数。求最大公约数的经典算法是Euclid算法方法如下:分别让变量m和n存储两个数的值。如果n为0,那么停止操作m中的值是最大公约数 (GCD) :否则计算m除以n的余数,把n保存到m并把余数保存到n中。然后重复上述过程,每次都先判定n是否为0。

10.有100个人围坐在一张圆桌边,座次为1~100,开始时第13座次的人先退席,以后每次数到第13个人退席,编写程序,给出退席顺序。


1.构建一个函数int max(int xint y)求两个数的最大值,并通过该函数求任意三个整数的最大值。
#include<stdio.h>
int max(int x,int y)
{
	if(x>y)
	return x;
	else
	return y;
}
int main()
{
	int a,b,c,A,B,Max;
	scanf("%d%d%d",&a,&b,&c);
	A=max(a,b);
	B=max(b,c);
	Max=max(A,B);
	printf("最大值为:%d",Max);
	return 0;
}

这题没啥讲的,不过大家在建立变量的时候可以用max1,max2,这样意思更明确。

2.通过函数调用,计算两个数的最小公倍数。
#include<stdio.h>
int Lcm(int x,int y) 
{
	int ret=0,i=0;
	for(i=1;;i++)
	{
		if((x*i)%y==0)//最好还是比较大小,用大的成i,这样运算更便捷 
		{
			ret=x*i;
			break;
		}
	}
	return ret;
}
int main()
{
	int a,b;
	scanf("%d%d",&a,&b);
	int min=Lcm(a,b);
	printf("最小公倍数是:%d",min);
	return 0;
}

这里唯一的知识点就是最小公倍数的求法。我这里是硬找出来,而注释中也说了可以先比较大小,用大的更快,大家可以想想为什么?(其实最小公倍数求法挺多的,大家可以多去了解几种)。

3.用递推法实现 cos(x)

#include <stdio.h>
#include <math.h>
int main()
{
	double sum=1;
	double item;
	int i=0;
	double x=0;
	printf("请输入所求x: ");
	scanf("%lf",&x);
	item=1;
	do
	{
		i++;
		item = -item*x*x/((2*i-1)*(2*i));
		sum+=item;
	}while(fabs(item)>=1e-5);
	printf("自定义余弦函数cos(%lf)=%.6lf,经循环次数i=%d\n",x,sum,i);
	return 0;
}

其实和第8题大差不差了,主要是公式不一样,然后这边用了一个fabs函数去求绝对值。大家可以多去了解了解C语言的库函数。😀

4.用递归算法求:1+2+3+......+n。
#include<stdio.h>
int Njie(int n)
{
	if(n<0)
	{
		printf("输入错误,无法的到正确结果\n");
		return 0;
	}
	if(n==1)
	return 1; 
	if(n>1)
	{
		return n*Njie(n-1);	
	}
}
int main()
{
	int ret=0;
	int n=0;
	scanf("%d",&n);
	ret=Njie(n);
	printf("%d的阶乘为:%d",n,ret);
	return 0;
}

这题主要是多了递归算法的使用,而递归主要是要有一个结束条件,也可以叫做出口——要让程序能够从递归过程中出来,不然程序会一直运行,永远不会结束。当然,像阶乘这种一般是没有必要用递归,太占用资源,效率也不高。(具体原因和用法后面会细讲)

5.用递归算法求数组元素的和。
#include<stdio.h>
int Qiuhe(int arr[],int n)
{
	if(n==0)
		return arr[0];
	if(n!=0)
		return arr[n]+Qiuhe(arr,n-1);
	
} 
int main()
{
	int arr[100000]={0};
	int n,i;
	printf("请确定数组元素个数:"); 
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&arr[i]);
	}
	int ret=Qiuhe(arr,n);
	printf("%d",ret);
	return 0;
}

也是运用了递归思想,总之,这种只有多练才能比较敏锐发现结束条件和“套娃”模式。

6.用递归语句,计算x^n。其中,n是正整数。
#include<stdio.h>
int Pow(int x,int n)
{
	if(x==0)
		return 0;
	else
	{
		int result=1;
		if(n==0)
			return result;
		else
			return result=x*Pow(x,n-1);
	}
}
int main()
{
	printf("这是一个计算数字n次方的程序,请输入你要计算的数字及其次方:");
	int x=0;
	int n=0;
	scanf("%d%d",&x,&n);
	int ret=Pow(x,n);
	printf("ret=%d",ret); 
	return 0;
} 

没啥可说。

7.用递归的方法实现十进制到八进制的转换。
#include<stdio.h>
int SHIBA(int x,int y)
{
	int result;
	if(x==0)
	{
		return 0;
	}
	else
	{
		return result=(x%8)*y+SHIBA(x/8,y*10);
	}
}
int main()
{
	int x=0;
	int y=1;
	printf("请输入你要转化为八进制数的十进制数:\n");
	scanf("%d",&x);
	int ret=SHIBA(x,y);
	printf("你所输入的数字对应八进制数为:%d",ret);
	return 0;
} 

这个函数递归就特别了一点——它有两个参数,而且同时发生变化。这就需要先对于十进制转八进制充分了解,然后观察变化的点,这样就能更容易写出。

8.将两个无序的一维数组排序,然后将其合并到一个一维数组中,仍保持数组有序。
#include<stdio.h>
void Bubble_Sort(int*arr,int sz)
{
	int i=0;
	for(i=0;i<sz;i++)
	{
		int j=0;
		for(j=0;j<sz-i;j++)
		{
			if(*(arr+i)>*(arr+i+j))
			{
				int tmp=*(arr+i);
				*(arr+i)=*(arr+i+j);
				*(arr+i+j)=tmp;
			}
		}
	}
}
int main()
{
	int arr1[5]={1,7,5,3,9};
	int arr2[5]={2,4,8,10,6};
	int arr3[10]={0};
	int sz1=sizeof(arr1)/sizeof(arr1[0]);
	Bubble_Sort(arr1,sz1);
	int sz2=sizeof(arr2)/sizeof(arr2[0]);
	Bubble_Sort(arr2,sz2);
	int i=0;
	for(i=0;i<sz1;i++)
	{
		printf("%d ",arr1[i]);
	}
	printf("\n");
	for(i=0;i<sz2;i++)
	{
		printf("%d ",arr2[i]);
	}
	printf("\n");
	int sz=sz1+sz2;
	for(i=0;i<sz1;i++)
	{
		arr3[i]=arr1[i];
	}
	for(i=sz1;i<sz;i++)
	{
		arr3[i]=arr2[i-sz1];	
	}
	Bubble_Sort(arr3,sz);
	for(i=0;i<sz;i++)
	{
		printf("%d ",arr3[i]);
	}
	return 0;
}

这题第一次提出了对于整个数组进行排序的要求,于是就引入了冒泡排序的算法,大家可以参照代码仔细品品。然后对于两个数组合为一个,我这里采用的是物理合并——建立新的数组,直接把一个个数据放进去,最后用冒泡排序再排一遍。当然大家也可以用指针再第一个数组后面续第二个数组,总之,还是那句话,多多思考,反复实验。

9.输入一个分数,将其划为最简。例如:12/24 化简为 1/2。为了把分数约分为最简分式,首先计算分子和分母的最大公约数,然后分子和分母都除以最大公约数。求最大公约数的经典算法是Euclid算法方法如下:分别让变量m和n存储两个数的值。如果n为0,那么停止操作m中的值是最大公约数 (GCD) :否则计算m除以n的余数,把n保存到m并把余数保存到n中。然后重复上述过程,每次都先判定n是否为0。
#include<stdio.h>
void FenZiMuJian(int*pa,int*pb)
{
	int m=*pa;
	int n=*pb;
	int ret=0;
	m=(m>n?m:n);
	n=(m<n?m:n);
	while(n!=0)
	{
		ret=m%n;
		m=n;
		n=ret;	
	}
	*pa/=m;
	*pb/=m;
}
int main()
{
	int a,b;
	printf("请输入分母的值a:");
	scanf("%d",&a);
	printf("请输入分子的值b:");
	scanf("%d",&b);
	FenZiMuJian(&a,&b);
	printf("化简后为:%d %d",a,b);
	return 0;
} 

这里求最大公约数的方法其实就是辗转相除法,大家可以去了解下这个算法,理解算法的本质。然后这里也是传递地址,从而直接在函数内部完成化简,算是和函数名相吻合吧。(ps:这个函数名倒是没有水准了,各位引以为戒😅)

10.有100个人围坐在一张圆桌边,座次为1~100,开始时第13座次的人先退席,以后每次数到第13个人退席,编写程序,给出退席顺序。
#include<stdio.h>
void Exit_Sum(int sum[],int n,int num)
{
	int i=0;
	int count=0;
	int exit=0;
	for(i=0;i<num;i++)
	{
		sum[i]=i;
	}
	i=0;
	do
	{
		if(sum[i]=i)
		{
			count++;
			if(count==n)
			{
				sum[i]=-1;
				exit++;
				count=0;
				printf("退席%3d: %0d\n",exit,i);
			}
		}
		i=(i+1)%num;
	}while(exit<num);
}
int main()
{
	int sum[100]={0};
	int sz=sizeof(sum)/sizeof(sum[0]);
	int n=13;
	Exit_Sum(sum,n,sz);
	return 0;
}

这个是比较有名的圆桌问题,也是比较有趣味性。这里唯一强调的是i=(i+1)%100,它是因为圆桌问题一直在转,但是i是不能超过100的。当然这里的代码还是有瑕疵的,希望大家能够认真思考,有什么想法可以发在评论区,我们可以一同探讨。(当然,关于这一题,之后会有详细介绍)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/199884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

337. 打家劫舍III (二叉树)

题目 题解 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def rob(self, root: Optional[TreeNode]) ->…

【开题报告】基于卷积神经网络的图像脑部MRI图像分割

论文题目 基于卷积神经网络的图像脑部MRI图像分割 一、选题意义 1.课题研究的目的和意义 1.1选题目的 脑部疾病是高致残致死率的疾病之一&#xff0c;对人们的生活质量和生命安全都有着十分重大的影响&#xff0c;所以各个国家都开始对脑部疾病的研究重视起来。帕金森、脑胶质…

source: command not found错误的解决方法

偶遇的一个问题&#xff0c;因为在网上没有找到对应的解决办法&#xff0c;可能是属于个案&#xff0c;在此记录备忘&#xff0c;同时供大家参考。 问题现象&#xff1a; 执行命令 source /etc/profile时报错&#xff1a; bash: “source: command not found... 问题定位和…

HCIP-十二、BGP常用属性

十二、BGP常用属性 实验拓扑实验需求及解法1.IP 地址已配置&#xff0c;自行测试直连。2.AS100 中运行 OSPF3.AS200 中运行 ISIS4.运行 BGP5.发布 BGP 路由6.修改起源属性 Origin7.修改 AS-path8.修改本地优先 Local-preference9.修改 MED 实验拓扑 实验需求及解法 本实验模拟…

从0开始学习JavaScript--JavaScript 闭包的应用

JavaScript的高级概念中&#xff0c;闭包&#xff08;closure&#xff09;常常是一个让人感到困惑但又强大的概念。在这篇文章中&#xff0c;将深入探讨闭包的概念以及它在JavaScript中的各种应用场景。 什么是闭包&#xff1f; 在JavaScript中&#xff0c;闭包是指一个函数能…

LINUX入门篇【11】---进程篇【3】---进程优先级,进程切换,进程调度

前言&#xff1a; 有了前面知识点的铺垫&#xff0c;本篇我们将围绕进程的三个方面来展开&#xff0c;即进程优先级&#xff0c;进程切换以及进程调度的问题&#xff0c;这里的进程调度其实本质就是CPU是如何去调度进程的。 进程优先级&#xff1a; 优先级的概念&#xff1a…

matlab配置

matlab配置 windowslinux挂载安装MATLAB windows 按照这里一步步配置就行( 移动硬盘中软件备份中自取) linux linux配置步骤 挂载 sudo mount -t auto -o loop /media/oyk/Elements/ubuntu/MATLAB/R2017a_glnxa64_dvd1.iso ./matlab/安装MATLAB 挂载完成后&#xff0c;先…

JS之Object.defineProperty方法

给对象添加属性的方法有许多&#xff0c;这次让我为大家介绍一种给对象添加属性的静态方法吧&#xff01; 语法&#xff1a;Objcet.defineProperty(对象的名称&#xff0c;“添加的键名”&#xff0c;{value&#xff1a;键值}) const obj {name:"张三",age:18}// 我…

MySQL索引使用总结

索引(index) 官方定义&#xff1a;一种提高MySQL查询效率的数据结构 优点&#xff1a;加快查询速度 缺点&#xff1a; 1.维护索引需要消耗数据库资源 2.索引需要占用磁盘空间 3.增删改的时候会影响性能 索引分类 索引和数据库表的存储引擎有关&#xff0c;不同的存储引擎&am…

广州华锐视点:基于VR元宇宙技术开展法律法规常识在线教学,打破地域和时间限制

随着科技的飞速发展&#xff0c;人类社会正逐渐迈向一个全新的时代——元宇宙。元宇宙是一个虚拟的、数字化的世界&#xff0c;它将现实世界与数字世界紧密相连&#xff0c;为人们提供了一个全新的交流、学习和娱乐平台。在这个充满无限可能的元宇宙中&#xff0c;法律知识同样…

docker镜像原理

什么是镜像 容器解决应用开发、测试和部署的问题&#xff0c;而镜像解决应用部署环境问题。镜像是一个只读的容器模板&#xff0c; 打包了应用程序和应用程序所依赖的文件系统以及启动容器的配置文件&#xff0c;是启动容器的基础。镜像所打 包的文件内容就是容器的系统运行环…

迷你洗衣机哪个牌子好又实惠?口碑最好的小型洗衣机

不得不说洗衣机的发明解放了我们的双手&#xff0c;而我们从小到大就有这个意识&#xff0c;贴身衣物不可以和普通的衣服一起丢进去洗衣机一起&#xff0c;而内衣裤上不仅有肉眼看见的污渍还有手上根本无法消灭的细菌&#xff0c;但是有一款专门可以将衣物上的细菌杀除的内衣洗…

界限与不动产测绘乙级申请条件

整理一期关于测绘资质界限与不动产测绘乙级资质的申请要求 测绘资质是由测绘资质主管部门自然资源部制定的 想要了解标准、正规的申请条件&#xff0c;可以到当地省份的政务网搜索测绘资质办理相关标准&#xff08;例如下图&#xff09; 1、通用标准 http://gi.mnr.gov.cn/20…

vue3中的setup()函数详解

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-setup()函数 目录 setup()函数 1.1 基本使用 1.2 访问 Prop 1.3 Setup的上下文 1.4 与渲…

【古月居《ros入门21讲》学习笔记】16_tf坐标系广播与监听的编程实现

目录 说明&#xff1a; 1. 实现过程&#xff08;C&#xff09; 创建功能包&#xff08;C&#xff09; 创建tf广播器代码&#xff08;C&#xff09; 创建tf监听器代码&#xff08;C&#xff09; 配置tf监听器与广播器代码编译规则 编译并运行 编译 运行 2. 实现过程&a…

CCFCSP试题编号:202109-2试题名称:非零段划分

用差分法 #include<iostream> #include<algorithm> #include<cstring> using namespace std;const int N 500000; const int M 10000; int a[N 2 ] { 0 }; int d[M 1] { 0 };int main() {int n;cin >> n;for (int i 1; i < n; i){cin >&g…

泛微E-Office SQL注入漏洞复现

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件&#xff0c;泛微协同办公产品系列成员之一,实行通用化产品设计&#xff0c;充分贴合企业管理需求&#xff0c;本着简洁易用、高效智能的原则&#xff0c;为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

数组filter()方法的使用

输入价格后失去焦点就展示符合条件的商品&#xff0c;没有符合条件的商品就弹框提示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…

在ubuntu系统安装SVN服务端,并通过客户端进行远程访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

Python变量及其使用

无论使用什么语言编程&#xff0c;总要处理数据&#xff0c;处理数据就需要使用变量来保存数据。 形象地看&#xff0c;变量就像一个个小容器&#xff0c;用于“盛装”程序中的数据。常量同样也用于“盛装”程序中的数据。常量与变量的区别是&#xff1a;常量一旦保存某个数据…
最新文章