我们在学习编程过程中往往不仅有C语言实验报告,还有程序设计实验报告。程序设计这一科目主要是为了培养我们写代码时的计算思维,养成从问题到代码实现逐步分析,逐步深入的好习惯。前面有一篇文章介绍了部分程序设计实验报告中的编程题,今天再补充一些含新知识点的编程题,希望对大家有所帮助!
目录
1.构建一个函数int max(int xint y)求两个数的最大值,并通过该函数求任意三个整数的最大值。
8.将两个无序的一维数组排序,然后将其合并到一个一维数组中,仍保持数组有序。
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"