懂C语言的进来。急救~~
1.输入2个正数m,n(m>n),求其最大公约数与最小公倍数。为什么我的程序不对#include"stdio.h"voidmain(){intm,n,p,q;printf...
1.输入2个正数m,n(m>n),求其最大公约数与最小公倍数。为什么我的程序不对#include"stdio.h"
void main()
{
int m,n,p,q;
printf("请输入2个数m,n:");
scanf("%d,%d",&m,&n);
for(p=n;p>0;p--)
if((n%p==0) && (m%p==0))
break;
printf("最大公约数为%d",p);
for(q=m;q>m;q++)
if((q%m==0) && (p%n==0))
break;
printf("最小公倍数为%d",q);
}
*******************************************************************************************************
2.输入一个整数,求它的各位数字之和及位数。例如输入234,输出9和3。为什么这个不对。?
#include"stdio.h"
void main()
{
int sum,n,count,x;
printf("输入一个数n:");
scanf("&d",&n);
sum=0;
count=0;
while(n!=0)
{
x=n%10;
n=n/10;
sum=sum+x;
count++;
}
printf("各数字之和为%d,位数为%d",sum,count);
}
**************************************************************************************************************
3.输入一个正整数你(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个交换。然后输出交换后的n 个数。为什么不对
#include"stdio.h"
void main()
{
int n,i,x,y,m,p;
int a[10];
printf("Enter n:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{ m=0;
if (a[m]<a[i])
m=i;
}
for(i=1;i>n;i++)
{ p=0;
if (a[i]<a[p])
p=i;
}
x=a[n-1];
a[n-1]=a[m];
a[m]=x;
y=a[0];
a[0]=a[p];
a[p]=y;
printf("%4d",&a[i]);
}
*************************************************************************
第一题的最大公约数还是求不出来啊。。为什么啊 ,采用1楼的回答,把m,p值赋到外面还是没用事为什么啊? 展开
void main()
{
int m,n,p,q;
printf("请输入2个数m,n:");
scanf("%d,%d",&m,&n);
for(p=n;p>0;p--)
if((n%p==0) && (m%p==0))
break;
printf("最大公约数为%d",p);
for(q=m;q>m;q++)
if((q%m==0) && (p%n==0))
break;
printf("最小公倍数为%d",q);
}
*******************************************************************************************************
2.输入一个整数,求它的各位数字之和及位数。例如输入234,输出9和3。为什么这个不对。?
#include"stdio.h"
void main()
{
int sum,n,count,x;
printf("输入一个数n:");
scanf("&d",&n);
sum=0;
count=0;
while(n!=0)
{
x=n%10;
n=n/10;
sum=sum+x;
count++;
}
printf("各数字之和为%d,位数为%d",sum,count);
}
**************************************************************************************************************
3.输入一个正整数你(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个交换。然后输出交换后的n 个数。为什么不对
#include"stdio.h"
void main()
{
int n,i,x,y,m,p;
int a[10];
printf("Enter n:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{ m=0;
if (a[m]<a[i])
m=i;
}
for(i=1;i>n;i++)
{ p=0;
if (a[i]<a[p])
p=i;
}
x=a[n-1];
a[n-1]=a[m];
a[m]=x;
y=a[0];
a[0]=a[p];
a[p]=y;
printf("%4d",&a[i]);
}
*************************************************************************
第一题的最大公约数还是求不出来啊。。为什么啊 ,采用1楼的回答,把m,p值赋到外面还是没用事为什么啊? 展开
3个回答
展开全部
已经帮你改好了,希望对你有帮助,呵呵!详细的注释和解释如下所示:
第一题:
#include"stdio.h"
void main()
{
int m,n,p,q;
printf("请输入2个数m,n:\n\n");
scanf("%d%d",&m,&n); //此处去掉了,如果不去也是可以的,只是在你输入时要在第一个数输入结束后输入,分隔,然后输入第二个数
for(p=n;p>0;p--)
if((n%p==0) && (m%p==0))
break;
printf("最大公约数为%d",p);
for(q=m;;q++)//去掉了不必要的条件q>m,因为有break所以更本用不到
if((q%m==0) && (q%n==0))//这里你的&&后边的条件中好像是马虎了,将q写成了p
break;
printf("最小公倍数为%d\n\n",q);
}
//虽然修改后的程序可以实现你的功能,但是你的思路不是很好,算法的时间复杂度较高*/
第二题:
#include"stdio.h"
void main(){
int sum,n,count,x;
printf("输入一个数n:");
scanf("%d",&n); //&d应该改为%d
sum=0;
count=0;
while(n!=0){
x=n%10;
n=n/10;
sum=sum+x; //先将x的值加到sum中
x=n;//添加此句,因为下一次要用的是x而不是n,需要对x赋以上一次计算的商
count++;
}
printf("各数字之和为%d,位数为%d\n\n",sum,count);
}
第三题:
#include"stdio.h"
void main(){
int n,i,x,y,m,p;
int a[10];
printf("Enter n:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
m=0;//将此句从for循环中提出,原因很简单。如果放在for内则每一次都会将m赋值0,相当于前边的循环和m=i的赋值处理的都白做了
for(i=1;i<n;i++){
if (a[m]<a[i])
m=i;
}
p=0; //这里的p同上面的m
for(i=1;i>n;i++){
if (a[i]<a[p])
p=i;
}
x=a[n-1];
a[n-1]=a[m];
a[m]=x;
y=a[0];
a[0]=a[p];
a[p]=y;
for(i=0;i<n;i++)//想要输出整个数组,要将输出语句放到循环体中才可以呀,你一定是大意疏忽了
printf("%4d",a[i]); //输出与出入不同,此处输出的是内容,故不用去地址符&
}
第一题:
#include"stdio.h"
void main()
{
int m,n,p,q;
printf("请输入2个数m,n:\n\n");
scanf("%d%d",&m,&n); //此处去掉了,如果不去也是可以的,只是在你输入时要在第一个数输入结束后输入,分隔,然后输入第二个数
for(p=n;p>0;p--)
if((n%p==0) && (m%p==0))
break;
printf("最大公约数为%d",p);
for(q=m;;q++)//去掉了不必要的条件q>m,因为有break所以更本用不到
if((q%m==0) && (q%n==0))//这里你的&&后边的条件中好像是马虎了,将q写成了p
break;
printf("最小公倍数为%d\n\n",q);
}
//虽然修改后的程序可以实现你的功能,但是你的思路不是很好,算法的时间复杂度较高*/
第二题:
#include"stdio.h"
void main(){
int sum,n,count,x;
printf("输入一个数n:");
scanf("%d",&n); //&d应该改为%d
sum=0;
count=0;
while(n!=0){
x=n%10;
n=n/10;
sum=sum+x; //先将x的值加到sum中
x=n;//添加此句,因为下一次要用的是x而不是n,需要对x赋以上一次计算的商
count++;
}
printf("各数字之和为%d,位数为%d\n\n",sum,count);
}
第三题:
#include"stdio.h"
void main(){
int n,i,x,y,m,p;
int a[10];
printf("Enter n:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
m=0;//将此句从for循环中提出,原因很简单。如果放在for内则每一次都会将m赋值0,相当于前边的循环和m=i的赋值处理的都白做了
for(i=1;i<n;i++){
if (a[m]<a[i])
m=i;
}
p=0; //这里的p同上面的m
for(i=1;i>n;i++){
if (a[i]<a[p])
p=i;
}
x=a[n-1];
a[n-1]=a[m];
a[m]=x;
y=a[0];
a[0]=a[p];
a[p]=y;
for(i=0;i<n;i++)//想要输出整个数组,要将输出语句放到循环体中才可以呀,你一定是大意疏忽了
printf("%4d",a[i]); //输出与出入不同,此处输出的是内容,故不用去地址符&
}
展开全部
for(q=m;q>m;q++) q赋值成m, 然后判断 q > m 这根本进不了循环了
scanf("&d",&n); %d,不是&d
for(i=1;i<n;i++)
{ m=0; 在循环里面重置了这个了, 逻辑啊 想想吧
scanf("&d",&n); %d,不是&d
for(i=1;i<n;i++)
{ m=0; 在循环里面重置了这个了, 逻辑啊 想想吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
2.程序源代码:
#include "stdio.h"
#include "conio.h"
main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1<num2)/*交换两个数,使大数放在num1上*/
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
getch();
}
1.程序分析:利用辗除法。
2.程序源代码:
#include "stdio.h"
#include "conio.h"
main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1<num2)/*交换两个数,使大数放在num1上*/
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
getch();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询