c语言方面错题每日记录。
一.qwl实验2
7-3 最大公约数(GCD)和最小公倍数(LCM)
光求最大公约数有三种方法(乘积product):
第一种
#include<stdio.h>
int main()
{
int n,m;
int a,b;
scanf("%d %d",&n,&m);
if (m>n)
a=m;
else
a=n;
for (b=a;b>=0;b--)
{
if (m%b==0&&n%b==0)
{
printf("%d",b);
break;
}
}
}
第二种
#include<stdio.h>
int main()
{
int m,n;
int num=0;
scanf("%d %d",&m,&n);
while((m%n)!=0)
{
num=m%n;
m=n;
n=num;
}
printf("%d",num);
}
第三种
#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
while (m!=n)
{
if (m>n)
{
m=m-n;
}
else
{
n=n-m;
}
}
printf("%d",n);
}//众所周知,m=n时才是最大公约数。其实也可以用
第四种
#include<stdio.h>
int main()
{
int m=511,n=292;
int i,product=1;
for (i=2;i<=292;)
{
if (m%i==0&&n%i==0)
{
m=m/i;
n=n/i;
product=product*i;
if (m%i==0&&n%i==0)
i=i;
else
i=i+1;
}
else
i=i+1;
}
printf("%d",product);
}//这种是我自己写的,根据的数学知识是连除法,-_-
最小公倍数就最大公约数的延申,连除法。(说不清,看方程吧)(由于是输入输出,前面根据题目和第四种方法进行改正)
#include<stdio.h>
int main()
{
int m,n,p,q;
int i,GCD=1,LCM;
scanf("%d %d",&m,&n);
if (m>=n)
{
p=m;
q=n;
}
else
{
p=n;
q=m;
}
for (i=2;i<=q;)
{
if (p%i==0&&q%i==0)
{
p=p/i;
q=q/i;
GCD=GCD*i;
if (p%i==0&&q%i==0)
i=i;
else
i=i+1;
}
else
i=i+1;
}
printf("%d ",GCD);
LCM=m/GCD*n;
printf("%d",LCM);
}\\主要看最后两行
7-6 输出闰年
第一条是我的方法,不好,21世纪的你这样做,你算出来了,22世纪你也要自己算吗?(让计算机去实现功能,而不是为了做题而输出结果('-_-'))
#include<stdio.h>
int main()
{
int a,i;
scanf("%d",&a);
if (a<2000||a>=2100)
printf("Invalid year!");
else if(a<2004)
printf("None");
else
for (i=2004;i<=a;i++)
{
if (i%4==0&&i%100!=0||i%400==0)
printf("%d\n",i);
else
continue;
}
}
这是我改了一遍后(目前还是有问题)(问题就是else后面加大括号)
#include<stdio.h>
#include<math.h>
int main()
{
int a,i,sum=0;
scanf("%d",&a);
if (a<2000||a>2100)
printf("Invalid year!");
else
for (i=2001;i<=a;i++)
{
if (i%4==0&&i%100!=0||i%400==0)
{
printf("%d\n",i);
sum++;
}
}
if (sum==0)
{ printf("None");}
}
满分答案
int main()
{
int n;
scanf("%d",&n);
if(n>=2001&&n<=2100)
{
int temp=0;
int i;
for(i=2001;i<=n;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{printf("%d\n",i);temp++;}
}
if(temp==0) printf("None\n");
}
else
printf("Invalid year!\n");
return 0;
}
一个老是出毛病的程序(没考虑n==0的情况)
int main()
{
float sum=0,grade,average;
int count=0,i,n;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%f",&grade);
sum=sum+grade;
if (grade>=60)
count++;
else
continue;
}
printf("average = %.1f\n",sum/n);
printf("count = %d",count);
}
二.调试
1.如何调试?
设断点-编译-调试-添加查看-下一步。
2.调试遇到的问题?
项目没有调试信息,让你打开项目调试选项并重新生成? 工具-编译选项-代码生成与优化-连接器-产生调试信息。
三.累乘出现问题?
最后一个字母i变p(智障吧你),调试时分清你要添加查看的变量。
int main()
{
int i;
int p=1;
for(i=1;i<=6;i++)
{
p=p*i;
}
printf("%d",i);
}