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

news2024/11/23 4:40:12

我们在学习编程过程中往往不仅有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.coloradmin.cn/o/1266267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 分解IP段获取所有IP(子网掩码)

需求 192.168.1.0/24,192.168.2.1-192.168.2.254,192.168.3.3 IP段格式已 "," 分割&#xff0c;获取所有IP 注意 1. 判断 IP 是否合规 2. 去除多余的字符&#xff0c;例如空格、换行符 3. 去重 代码 import re import ipaddressdef isIP(ip):p re.compile(^((…

嵌入式常见协议---IIC协议

1.IIC&#xff08;IC&#xff09;协议是什么&#xff1f; 全称 Inter-Integrated Circuit ,字面意思是集成电路之间&#xff0c;是IC BUS简称&#xff0c;中文应该叫集成电路总线&#xff0c;是一种串行通信总线&#xff08;同步串行半双工&#xff09;&#xff0c;使用多主从…

会议预告 | 求臻医学诚邀您共聚P4 2023第七届肿瘤精准医疗大会

2023年12月7日-8日&#xff0c;P4 2023第七届肿瘤精准医疗大会将于北京隆重举行。60余位院士/监管/临床医生/科研权威专家与精准药企/诊断企业KOL领衔出席&#xff0c;1000余位精准医疗领域行业精英代表齐聚现场&#xff0c;大会将深度探讨行业痛点与年度热门议题&#xff0c;与…

HarmonyOS 后台任务管理开发指南上线!

为什么要使用后台任务&#xff1f;开发过程中如何选择合适的后台任务&#xff1f;后台任务申请时存在哪些约束与限制&#xff1f; 针对开发者使用后台任务中的疑问&#xff0c;我们上线了概念更明确、逻辑结构更清晰的后台任务开发指南&#xff0c;包含具体的使用场景、详细的开…

一维数组,逆序存放并输出【样例输入】20 30 10 50 40 90 80 70【样例输出】70 80 90 40 50 10 30 20

一维数组&#xff0c;逆序存放并输出 【样例输入】 20 30 10 50 40 90 80 70 【样例输出】 70 80 90 40 50 10 30 20 以下是使用C语言编写的将一维数组逆序存放并输出的示例代码&#xff1a; #include <stdio.h>void reverseArray(int arr[], int size) {int start…

超声波眼镜清洗机都有哪些是比较值得入手的?眼镜清洗机推荐

在当今社会&#xff0c;眼镜已经成为了我们日常生活中不可或缺的一部分。然而&#xff0c;眼镜的清洗问题却一直困扰着许多人。眼镜上的污垢和油脂不仅影响其美观&#xff0c;更重要的是可能会对眼睛的健康产生不良影响。因此&#xff0c;我们需要一种高效的眼镜清洗机来帮助我…

《微信小程序开发从入门到实战》学习三十四

4.2 云开发JSON数据库 MySQL、Oracle之类的“关系型数据库”。JSON数据库是“非关系型数据库”&#xff0c;没有行表列的概念。 4.2.1 JSON数据库基本概念 集合:一个数据库有多个集合&#xff0c;一个集合存储通常是同一类数据&#xff0c;可看作为JSON数组&#xff0c;数组…

Android Studio build.gradle获取项目绝对路径

通过这个字段 ${project.rootProject.projectDir}";如项目根build.gradle中&#xff1a; // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {google()mavenCentral()// jcenter() // kee…

数字人透明屏幕的技术原理是什么?

数字人透明屏幕的技术原理主要包括人脸识别和全息影像技术。其中&#xff0c;人脸识别技术是通过摄像头捕捉游客的面部表情和动作&#xff0c;并将其转化为数据指令&#xff0c;以便与数字人物进行互动。而全息影像技术则是利用透明屏幕&#xff0c;通过全息投影的方式将数字人…

机器人制作开源方案 | 智能扶老助残辅助管家

作者&#xff1a;孙运通 黄善越 卢瑀 张宇峰 郑乐怡 单位&#xff1a;河海大学 指导老师&#xff1a;陆其清 人口老龄化始终是我国一个极为严峻的社会问题。独居老人和空巢老人占总人口比重日益提高&#xff1a;预计至2050年老龄人口占比将超20%&#xff0c;绝大部分城市和地…

UniApp项目中 使用微信小程序原生语言 进行开发

看效果 wxcomponents 下放的是微信小程序原生代码写的组件。我进行了封装 上干货 在你下uniApp 项目的根目录创建一个 wxcomponents 名字千万不要错 京东、支付宝灯参考下面图片 官方文档也有介绍 然后在你需要引入原生功能的页面里面引入你的组件&#xff08;我这里提前已经放…

盘点67个Android系统源码安卓爱好者不容错过

盘点67个Android系统源码安卓爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 源码下载链接&#xff1a;https://pan.baidu.com/s/1zOSFwPJwDJLFfoeRJy9llg?pwd8888 提取码&#xff1a;8888 项目名称 Accelera…

如何在Python中操作Redis数据库

目录 一、安装redis-py库 二、连接Redis数据库 三、执行操作 1、设置和获取键值对 2、删除键值对 3、获取列表数据 四、处理数据 1、使用哈希表&#xff08;Hash&#xff09;处理关联数据 2、使用列表&#xff08;List&#xff09;处理有序数据 3、使用集合&#xff…

智慧公厕为高速服务区公厕做出的贡献

在现代社会&#xff0c;科技的飞速发展改变了人们的生活方式&#xff0c;也深刻影响着城市的基础设施和公共服务。而在这个数字化时代的背景下&#xff0c;智慧公厕作为城市智能化管理的一部分&#xff0c;为高速服务区公厕带来了一系列的创新和贡献&#xff0c;为旅客的出行提…

【LangChain实战】LangChain快速入门

1、什么是大语言模型 大语言模型是一种人工智能模型&#xff0c;通常使用深度学习技术&#xff0c;比如神经网络&#xff0c;来理解和生成人类语言。这些模型的“大”在于它们的参数数量非常多&#xff0c;可以达到数十亿甚至更多&#xff0c;这使得它们能够理解和生成高度复杂…

【黑马程序员】——微服务全套——实战篇1

目录&#xff1a; 微服务技术栈导学1微服务技术栈导学2认识微服务-服务架构演变认识微服务-微服务技术对比认识微服务-SpringCloud服务拆分-案例Demo服务拆分-服务远程调用Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现Rib…

\n\r:解析java中的\r、\n、\r\n、\n\r的区别

1 \r 1.1 内容 回车符,将光标定义到当前行行首 1.2 在idea中测试 1.2.1 表现形式 在\r后有新内容时,会先删除之前以前存在过的文本,即只打印\r后面的内容 1.2.2 示例代码 package Work; public class Test05 { public static void main(String[] args) { System.…

应用在智能手环距离检测领域的数字红外接近检测模块

智能手环是现代人日常生活中的一种智能配件&#xff0c;可以帮助我们记录运动数据、监测身体健康状况等。然而&#xff0c;对于许多用户来说&#xff0c;关注的问题之一就是智能手环的有效距离和精准度。智能手环通过内置传感器收集数据并将其发送到手机或其他设备上进行处理。…

【同步降压DC-DC】TLV62568 转换器

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大…

VIR-SLAM代码分析2——VIR_VINS详解

前言 VIR-SLAM中VIR_VINS文件夹下是基于VINS-mono的结合UWB传感器的估计器&#xff0c;主要改动的文件在uwb_posegraph&#xff0c;vir_estimator中。其他文件夹完成的是UWB数据的处理问题&#xff0c;比较简单上一节介绍足够&#xff0c;代码也容易看懂。本节介绍的VIR_VINS是…