【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;
}
运行结果:
作者留言
由于时间仓促,本文没有代码注释和代码解说,后面会视情况补充。