2013年 833c语言程序 江南大学 (A卷)

1.编写程序实现求两个整数最大公约数和最小公倍数.

方法一:辗转相除法

算法思路:两个整数a,b,其中a>b,求其最大公约数和最小公倍数
步骤① a%b=c,其中c为余数
步骤② 若余数c为0,即a可以把b给整除,也就是说这里的b就是其最大公约数;然后给,再通过a×b=最大公约数×最小公倍数,求得其最小公倍数即可
步骤③ 若余数c不为0,此时需要将a=b;b=c;然后再执行步骤②即可
例如:求 15和50的最大公约数和最小公倍数
首先,比较找出最大的数赋值给a,即a=50,b=15;
接着,求余数c的值,即 50%15=5 此时的余数c为5,不为0
即将a=b;b=c; <===> a=15,b=5;
接着,求余数c的值,即15%5=0 此时余数c为0,结束,此时5就是其最大公约数,50×15/5就为最小公倍数
代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int a,b,m,n,c;
   scanf("%d %d",&a,&b);//输入两个数,由题意可知,a>b
   m=a;
   n=b;
   while(b!=0)//这里的b为除数
   {
       c=a%b;//这里的c为余数
       a=b;
       b=c;
   }
   printf("最大公约数为:%d\n",a);
   printf("最小公倍数为:%d\n",m*n/a);
    return 0;
}

方法二:相减法

算法思路:两个数来回相减,大数减小数,直到两数相减结果为0为止.
例如,求16和5的最大公约数和最小公倍数
若a>b,即 a=a-b
反之,b=b-a
一直相减,直到a和b的值相等为止,即a-b==0为止
代码如下:

#include< stdio.h>
int main()
{
    int n,a,b,c;                             
    scanf("%d",&n) ;                 //定义n,为了控制n组数据循环
    while(n--)
    {
        scanf("%d %d",&a,&b);  //输入a,b
	    c=a* b;                            //c为a*b的值
        while(a!=b)                      //当a==b时结束
        {
            if(a>b)                          //如果a>b,则a=a-b
            {
                a=a-b;
            }
            else                            //否则b>a,b=b-a
            {
                b=b-a;
            }
        }
        printf("%d %d\n",a,c/a);         //由于最大公约数*最小公倍数=两数相乘
    }                                    //所以,a为最大公约数,c/a为最大公倍数
    return 0;
}

2.假设一个小球从200米高的空中落下,每次反弹一半高度,求第5次落下小球经过的路径是多少?求第八次反弹高度是多少?

解题思路:小球从200m高下落,第一次下落,会反弹到100m处,即

3.求XX年XX月XX日到该年(即同一年)XX年XX日 相差多天?(同一天算一天,考虑瑞年问题)

4.求子串husdstring在母串sdfstring中出现的次数?

5.编写程序实现,输入一组数据,用冒泡法进行排序(编写一个函数实现),在主函数中输入输出。**需要用指针实现

6.输入一组字符实现倒序输出(用递归函数实现),输出结果保存到“out。txt”中。。。

7.编写程序,建立一动态链表,中包含学生学号,姓名,年龄,输入一个学生学号删除相对应的结点。。

8。有一5×5的矩阵,找出最大的数放在矩阵中间,左上角,右上角,左下角。右下角,分别放第二第三第四大的数。。。

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beyond谚语

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

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

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

打赏作者

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

抵扣说明:

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

余额充值