鱼C论坛

 找回密码
 立即注册
查看: 3795|回复: 12

C语言程序设计课后题有一题不解,求解决

[复制链接]
发表于 2013-6-20 15:23:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是求两个正整数的最大公约数和最小公倍数,代码如下:
#include <stdio.h>
int main()
{
  int  p,r,n,m,temp;
  printf("请输入两个正整数n,m:");
  scanf("%d,%d,",&n,&m);
  if (n<m)
   {
    temp=n;
    n=m;
    m=temp;
   }
  p=n*m;
  while(m!=0)
   {
    r=n%m;
    n=m;
    m=r;
   }
  printf("它们的最大公约数为:%d\n",n);
  printf("它们的最小公倍数为:%d\n",p/n);
  return 0;
}

程序验证过是对的,但是我自己分析不应该是对的呀,菜鸟的我故来请教各位,帮我分析一下,最好是每句话注释下当前值,谢谢啦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-20 15:27:07 | 显示全部楼层
这也困扰我良久
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-20 17:36:30 | 显示全部楼层
本帖最后由 Jen_Daniel 于 2013-6-20 17:39 编辑

还有一个程序请教大家来分析

题目:两个乒乓球队进行比赛,各出3人,甲队为A,B,C3人,乙队为X,Y,Z3人。已抽签决定比赛名单,有人向队员打听比赛名单,A说他不与X比,C说他不和X,Z比,请编程序找出3对赛手的名单。

#include <stdio.h>  
int main()
{
  char i,j,k;            /*是a的对手;j是b的对手;k是c的对手*/
  for (i='x';i<='z';i++)
    for (j='x';j<='z';j++)
     if (i!=j)
       for (k='x';k<='z';k++)
        if (i!=k && j!=k)
          if (i!='x' && k!='x' && k!='z')
             printf("A--%c\nB--%c\nC--%c\n",i,j,k);
   return 0;

  }

不胜感激~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-21 00:20:37 | 显示全部楼层
学习学习!!!!!!!!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-23 14:56:54 | 显示全部楼层
怎么没有人做回答呢????????????:dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-24 00:12:12 | 显示全部楼层
#include <stdio.h>

void main()
{
    int a,b,max,min,x,y;                              \\ x 最大公约数,y最小公倍数
    printf("please input 2 numbers: \t");
    scanf("%d %d",&a,&b);
    max=a;
    if(max>b)
    {
        min=b;
    }
    else
    {
        max=b;
        min=a;
    }
    for(x=min;x>=1;x--)                                       \\ 求最大公约数 这个数不小于最小的数即 min 然后可以同时被这两个数整除
    {
       if(a%x==0&&b%x==0)
       {

           printf("%d\n",x);
           break;
       }
    }
    y=a*b/x;                                                      \\ 最小公约数 两个数的和除以这两个数的最大公约数
    printf("%d\n",y);
搂住 我把自己写的给你发过来了   我简略的解释了一下  加油吧:lol
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-24 11:17:35 | 显示全部楼层
看这我,我已经详细的给出注释,再不懂你给我回复:
#include <stdio.h>
int main()
{
  int  p,r,n,m,temp;//n,m是输入变量,要求他们的最大公约数和就小公倍数,temp用于交换n和m的值使n>=m,
                    //p用于求最小公倍数
  printf("请输入两个正整数n,m:");
  scanf("%d,%d,",&n,&m);
  if (n<m)  //这个if实现了交换n和m的值,为什么要交换,因为要用到辗转相除法,肯定需要大数除小数
   {
    temp=n;
    n=m;
    m=temp;
   }
  p=n*m;//这是求最小公倍数,设最大公约数为k,这最小公倍数p=n*m/k,证明略,只需要记住公式,这是,你会问这个语句
        //只有p=n*m,没有出k,这是因为最大公约数k还没求出来,只已知n和m,所以只做一部分工作,即先做乘法部分n*m
        //然后赋值给p,待求出最大公约数,再除以最大公约数k,所以你会看到printf("它们的最小公倍数为:%d\n",p/n);
        //而不是printf("它们的最小公倍数为:%d\n",p);
  while(m!=0)//这个循环实现求最大公约数,用的是辗转相除法,还需要罗嗦嘛?好吧,不费口舌的再讲一下,设n和m的最大
   {         //公约数为gcd(n,m),依据辗转相除法,有:gcd(n,m)=gcd(m,n%m);一直做这个过程直到n%m=0,即m=0;
    r=n%m;   //打个比方,n=8,m=6,则有:r=n%m=2,n=m=6,m=r=2再来一次r=n%m=0,n=m=2,m=r=0;这时,m=0,终止程序
    n=m;     //那么n就是最大公约数,我们验证一下确实也是,接下来的工作就是输出啦!
    m=r;
   }
  printf("它们的最大公约数为:%d\n",n);
  printf("它们的最小公倍数为:%d\n",p/n);
  return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-24 11:30:07 | 显示全部楼层
#include <stdio.h>  
int main()
{
  char i,j,k;            /*i是a的对手;j是b的对手;k是c的对手*/
  for (i='x';i<='z';i++)//遍历a的对手(遍历3个)
    for (j='x';j<='z';j++)//遍历b的对手(也是遍历3个),当然,遍历过程中,可能会出现a和b对手一样的情况,即i=j  
   if (i!=j)//去掉i和j对象一样的情况,然后开始找c的对手
       for (k='x';k<='z';k++)//遍历c的对手
        if (i!=k && j!=k)//使c的对手和(a,b)的对手不一样
          if (i!='x' && k!='x' && k!='z')//加上题目的条件,把它们转化成条件语句,读起来是:a的对手不是x,并且
                                         //c的对手不是x,并且k的对手不是在,则输出解
             printf("A--%c\nB--%c\nC--%c\n",i,j,k);//输出语句不多说了
   return 0;

  }

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-24 14:31:25 | 显示全部楼层
学习学习!!!!!!!!!!!!!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-21 15:44:55 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-21 15:52:09 | 显示全部楼层
幻影小刺客 发表于 2013-6-24 11:17
看这我,我已经详细的给出注释,再不懂你给我回复:
#include
int main()

哇塞!受教了!谢谢你这么详细的给我注释!~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-21 16:17:01 | 显示全部楼层
我是路过的!!!哈哈哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-21 16:18:45 | 显示全部楼层
helloworld01 发表于 2013-7-21 16:17
我是路过的!!!哈哈哈哈哈

路过留名啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-22 16:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表