【C语言学习】课后作业记录

介绍

  • 本文是作者学习C语言的记录,初学上路,误撞勿怪。
  • 本文所有代码均已成功运行,如有错误,可能是编辑本文时误操作所致。
  • 本文所有代码仅为完成任务,漏洞颇多,输入数据时请规范输入。

1、计算两个数的最大公约数和最小公倍数。

最大公约数算法:
⑴ 输入两个整数 m、n,并求 m 除以 n 的余数 k。
⑵ 当 k≠0,将除数 n 作为被除数 m,余数 k 作为除数 n,继续求 m 除以 n 的余数 k;反复
做第⑵步,直到余数为 0 结束循环。
⑶ 结束循环后,除数 n 就是 m 与 n 的最大公约数。
最小公倍数算法:
两个数的最小公倍数可以用两个数的乘积除以它们的最大公约数。
请根据算法写出完整的程序,并编译、运行、检查结果的正确性。
代码如下:

#include <stdio.h> 
int main()
{
	int a,b,c,d,e,f;
	printf("请输入a,b两个正整数:\n");
	scanf("%d,%d",&a,&b);
	c = a%b;
	d = a;
	e = b;
	while(c!=0)
	{
		a = b;
		b = c;
		c = a%b;	
	}
	f = (d*e)/b;
	printf("%d,%d的最大公约数是%d\n",d,e,b);
	printf("%d,%d的最小公倍数是%d\n",d,e,f);
	return 0;
}

运行结果:
运行结果

2、编程计算:一个球从100米高度自由落下,每次落地后反弹的高度为原高度的一半,求第10次落地时共经过了多少米,第10次反弹的高度是多少?

代码如下:

#include <stdio.h>
int main()
{
	int a,b;
	double c=100,d=100;
	printf("请输入反弹次数:\n");
	scanf("%d",&a);
	for(b=1;b<=a;b++)
	{
		c/=2;
		d+=2*c;
	}
	printf("第%d落地时经过了%.10f米,第%d次反弹的高度是%.10f米\n",a,d,a,c);
	return 0;
}

运行结果:
运行结果

3、用*号和循环控制语句打印输出如下的等腰三角形图形,假设三角形的高度行数为n行,n可以在屏幕上输入。(图示为行数n=4时的图形)

代码如下:

#include <stdio.h>
int main()
{
	int a,b,c;
	printf("请输入等腰三角形的行数:\n");
	scanf("%d",&a);
	for(b=1;b<=a;b++)
	{
		for(c=1;c<=a;c++)printf(" ");
		for(c=1;c<=a-b;c++)printf(" ");
		for(c=1;c<=b;c++)printf("*");
		for(c=1;c<=b-1;c++)printf("*");
		printf("\n");
	}
	
	return 0;
}

运行结果:
运行结果

4、用*号和循环控制语句打印输出如下图所示图案(圣诞树)。

代码如下:

#include <stdio.h>
int main()
{
	int a,b,c;
	printf("请输入圣诞树最高层三角形的行数:\n");
	scanf("%d",&a);
	printf("您的圣诞树:\n");
	for(b=1;b<=a;b++)
	{
		for(c=1;c<=10;c++)printf(" ");
		for(c=1;c<=a-b;c++)printf(" ");
		for(c=1;c<=b;c++)printf("*");
		for(c=1;c<=b-1;c++)printf("*");
		printf("\n");
	}
	a+=1;
	for(b=1;b<=a;b++)
	{
		for(c=1;c<=9;c++)printf(" ");
		for(c=1;c<=a-b;c++)printf(" ");
		for(c=1;c<=b;c++)printf("*");
		for(c=1;c<=b-1;c++)printf("*");
		printf("\n");
	}
	a+=1;
	for(b=1;b<=a;b++)
	{
		for(c=1;c<=8;c++)printf(" ");
		for(c=1;c<=a-b;c++)printf(" ");
		for(c=1;c<=b;c++)printf("*");
		for(c=1;c<=b-1;c++)printf("*");
		printf("\n");
	} 
	for(b=1;b<=a;b++)
	{
		for(c=1;c<=8;c++)printf(" ");
		for(c=1;c<=a-2;c++)printf(" ");
		for(c=1;c<=2;c++)printf("*");
		for(c=1;c<=1;c++)printf("*");
		printf("\n");
	}
	for(b=1;b<=2;b++)
	{
		for(c=1;c<=8;c++)printf(" ");
		for(c=1;c<=a;c++)printf("*");
		for(c=1;c<=a-1;c++)printf("*");
		printf("\n");
	}
	return 0;
}

运行结果:
运行结果

5、编程实现:(1)编写一个函数用于判断某个数是否为素数,并测试。(2) 利用上面的函数,验证一个大于2的偶数(100以内)可以表示为两个素数之和,例如:50=13+37为两个素数13和37的和。

为了配合第二小问,这里就不编写函数了,直接编进主函数里面。
(1)
代码如下:

#include <stdio.h>
int main()
{
	int a,b,c=1;
	printf("请输入一个正整数:\n");
	scanf("%d",&a);
	for(b=2;b<=a-1;b++)
	{
		if(a%b==0)
		{
			printf("%d不是素数\n",a);
			c=0;
			break;
		}
	}
	if(a>=1&&a<=2||c==1)
	{
		printf("%d是素数\n",a);
	}
	return 0;
}

运行结果:
运行结果
(2)
代码如下:

#include <stdio.h>
int main()
{
	int a,b,c[30]={0},d,e=0,f,g=0,h[20][2]={0},i,j=1,k,l;
	printf("请输入一个2到100的偶数:\n");
	scanf("%d",&d);
	for(a=1;a<=d;a++)
	{
		i=1;
		for(b=2;b<=a-1;b++)
		{
			if(a%b==0)
			{
				i=0;
				break;
			}
		}
		if(a>=1&&a<=2||i==1)
		{
			c[e]=a;
			e++;
		}
	}
	printf("1到%d的素数为:\n",d);
	for(a=0;a<=29;a++)//检查素数数组 
	if(c[a]!=0)printf("%d ",c[a]);
	printf("\n%d可由如下任一组素数相加得来:\n",d);
	for(a=0;a<=29;a++)
	{
		for(f=0;f<=29;f++)
		{
			if(c[a]+c[f]==d)
			{
				//printf("%d,%d\n",c[a],c[f]);
				l=1;
				for(k=0;k<=g;k++)
				{
					if(c[a]==h[k][0]||c[a]==h[k][1])
					l=0;
				}
				if(l==1)
				{
					h[g][0]=c[a];
					h[g][1]=c[f];
					g++;
				}
			}
		}
	}
	for(a=0;a<=19;a++)
	{
		if(h[a][0]+h[a][1]!=0)
		{
			printf("组合%d:%d,%d\n",j,h[a][0],h[a][1]);
			j++;
		}
	}

	return 0;
}

运行结果:
运行结果

作者留言

由于时间仓促,本文没有代码注释和代码解说,后面会视情况补充。

感谢观看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HankuoYuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值