在写这个算法前,你需要先明白一个问题:
int 指的是signed int(有符号),其范围指的是:-2147483648~+2147483647。
unsigned int (无符号) , 其范围为0~4294967295 。
22的阶乘是 一个有23位的数,无论是signed int 还是 unsigned int 都不能表示,
double 的数据类型取值范围如下:
1、负值取值范围为 -179769313486231570E+308 到 -494065645841246544E-324;
2、正值取值范围为 494065645841246544E-324 到 179769313486231570E+308
有上可以,无论是有符号的double,还是无符号的double,都足以表示22的阶乘,
所以,此时你应该将fact定义成double(有符号,无符号都可以)。
如果以上回答对你有帮助, 请采纳一下, 谢谢。
#include<iostream>
#include<windowsh>
#include<conioh>
#include<timeh>
#include<fstream>
using namespace std;
int main()
{
cout<<"请输入坐标:";
int key,cx=0,cy=0;
char ka=0,kb=0,kc=0,kd=0,n=0;
cout<<"x:";
while(1)
{
if(kbhit())//如果按下键,值为true
{
key=getch();
if((key>47)||(key<58))//按下数字键
{
if(!ka)
{
ka=static_cast<char>(key);
cout<<ka;
}//ka为按下的数字键值
else if((!kb)&&(n==0))//已按回车则跳过kb
{
kb=static_cast<char>(key);
cx=ka10+kb-528;//自动计算(528=4811='0'11)
cout<<kb<<" y:";//kb已满则自动空格
n=1;
}
else if(!kc)
{
kc=static_cast<char>(key);
cout<<kc;
}
else if(!kd)
{
kd=static_cast<char>(key);
cy=kc10+kd-528;
cout<<kd;
n=2;
}
else break;
}
else if(key==8)//退格键
{
if(kd)//kd不为空
{
kd=0;
}
else if(kc)
{
kc=0;
}
else if(kb)
{
kb=0;
}
else if(ka)
{
ka=0;
}
}
else if((key==32)||(key==161)||(key==13))//空格、全角空格及回车
{
if(n==2)//输入完成后再次回车
{
break;
}
if((ka)&&(!n)&&(!kb))//ka不为空且未按回车且kb为空(若kb已满则已自动空格)
{
cx=ka-'0';//第一个坐标为个位数
cout<<" y:";
n=1;
}
else if((kc)&&(n==1)&&(!kd))
{
cy=kc-'0';
break;
}//完成输入
}//空格的if
}//按键的if
}//循环结束
cout<<endl<<cx<<" "<<cy<<endl;
cout<<"game over"<<endl;
getch();
return 0;
}#include <iostream>
#include <conioh>
using namespace std;
int main()
{
cout<<"请输入坐标:"<<endl;
int cx=0,cy=0;
cout<<"x:";
cin>>cx;
cout<<"y:";
cin>>cy;
// 进一步对数据进行处理
cout<<endl<<cx<<" "<<cy<<endl;
cout<<"game over"<<endl;
getch();
return 0;
}
错误有两个:
1、if条件判断语句中不能使用break关键字,该关键字只能用在循环控制中,如for、while,或者switch中,此处,break可以改为return 0;
2、函数void NextDay(int &a,int &b,int &c)的定义中间,在函数的形参中已经定义了三个变量,在函数体内再次定义它们,会导致重复定义,报错,此处,无需定义。
改后的源代码:
#include<iostream>
#include<stdioh>
#include<conioh>
using namespace std;
void NextDay(int &a,int &b,int &c);
int main()
{
int x,y,z;
char ch;
scanf("%d%d%d",&x,&y,&z);
NextDay(x,y,z);
printf("%d%d%d\n",x,y,z);
x=x,y=y,z=z;
ch=getch();
if(ch=='#')
{
printf("\n");
return 0;
}
else
{
NextDay(x,y,z);
printf("%d%d%d\n",x,y,z);
}
return 0;
}
void NextDay(int &a,int &b,int &c)
{
//int a,b,c;
if (b==1||b==3||b==5||b==7||b==8||b==10||b==12&&c<31 )
c++ ;
else if (b==12&&c==31)
{
c=1;
b=1;
a++;
}
else if (b==1||b==3||b==5||b==7||b==8||b==10&&c==31 )
{
c=1;
b++;
}
else if (b==4||b==6||b==9||b==11&&c<30 )
c++ ;
else if (b==4||b==6||b==9||b==11&&c==30)
{
c=1;
b++;
}
else if (b==2)
{
if (((int)a%4==0&&(int)a%100!=0)||((int)a%400==0) &&(c<=28) )
c++;
else if (c==29)
{
c=1;
b++;
}
else
{
if (c<=27)
c++;
else if (c==28)
{
c=1;
b++;
}
}
}
}
以上就是关于c语言程序纠错,这个是算阶乘的程序全部的内容,包括:c语言程序纠错,这个是算阶乘的程序、C++程序纠错、c++程序纠错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)