发布网友 发布时间:2024-10-24 07:33
共4个回答
热心网友 时间:2024-11-04 23:32
想要解决没有输出很简单,你在跳出循环的时候不应该使用exit,而应该是break
break用于跳出当前循环,exit则是用于跳出当前子程序
而当exit写在主程序里的时候,就成了结束程序的语句!
你想想,如果你每次一读完数据,就结束程序,怎么可能会有输出呢
但即使把exit改成break,使这个程序有了输出,还是有点小错误
错误1:跳出循环的条件有问题,你写的是当b[i]=b[i-1]时跳出循环,但如果是1001这种数据,b[3]=b[2]时程序就提前跳出了
解决1:将跳出循环改为if a=0 then break;,在你修改后的程序中,a每次都是要除以10的,很显然当a=0时表明所有的数位都被取尽了,也就可以跳出了
错误2:数据范围有问题,你将a变量定义为integer,那么a的最大值只可能是32767,也就是说当输入的数大于32767时(比如123456),a变量就会溢出变成负数,从而程序就会出现错误了
解决2:应当将a的数据类型设为范围更大的longint、dword或者qword,这三种数据类型的最大值分别为2^31-1、2^32-1和2^-1
修改完善后的程序如下(亲测可以正确输出结果):
program ii;
var
c,d:array[0..10]of string;
b:array[0..10] of integer;
i,n:integer; a:longint;
begin
readln(a);
i:=1;
while true do
begin
b[i]:=a mod 10;
a:=a div 10;
if a=0 then break;
i:=i+1;
end;
c[0]:='zero'; d[9]:='yi';
c[1]:='one'; d[8]:='qianwan';
c[2]:='two'; d[7]:='baiwan';
c[3]:='three'; d[6]:='shiwan';
c[4]:='four'; d[5]:='wan';
c[5]:='five'; d[4]:='qian';
c[6]:='six'; d[3]:='bai';
c[7]:='seven'; d[2]:='shi';
c[8]:='eight'; d[1]:='yuan';
c[9]:='nine';
for n:=i downto 1 do
write(c[b[n]],' ',d[n],' ');
end.
热心网友 时间:2024-11-04 23:33
var
st:string;
l,i:longint;
ge,shi,bai,qian,wan,shiwan:char;
begin
read(st);
l:=length(st);
ge:=st[l];
shi:=st[l-1];
bai:=st[l-2];
qian:=st[l-3];
wan:=st[l-4];
shiwan:=st[l-5];
write(shiwan,'shiwan',wan,'wan',qian,'qian',bai,'bai',shi,'shi',ge,'yuan');
end.
热心网友 时间:2024-11-04 23:31
改成 write(c[b[n]]+d[n]); 试试看
热心网友 时间:2024-11-04 23:31
while true do
begin
b[i]:=a mod 10;
if b[i]=b[i-1] then exit;
i:=i+1;
end;
这段有问题:
你的 a 没有 DIV 10 所以每次取余都是相同的数
然后你就 exit 了
所以没输出
热心网友 时间:2024-11-04 23:35
想要解决没有输出很简单,你在跳出循环的时候不应该使用exit,而应该是break
break用于跳出当前循环,exit则是用于跳出当前子程序
而当exit写在主程序里的时候,就成了结束程序的语句!
你想想,如果你每次一读完数据,就结束程序,怎么可能会有输出呢
但即使把exit改成break,使这个程序有了输出,还是有点小错误
错误1:跳出循环的条件有问题,你写的是当b[i]=b[i-1]时跳出循环,但如果是1001这种数据,b[3]=b[2]时程序就提前跳出了
解决1:将跳出循环改为if a=0 then break;,在你修改后的程序中,a每次都是要除以10的,很显然当a=0时表明所有的数位都被取尽了,也就可以跳出了
错误2:数据范围有问题,你将a变量定义为integer,那么a的最大值只可能是32767,也就是说当输入的数大于32767时(比如123456),a变量就会溢出变成负数,从而程序就会出现错误了
解决2:应当将a的数据类型设为范围更大的longint、dword或者qword,这三种数据类型的最大值分别为2^31-1、2^32-1和2^-1
修改完善后的程序如下(亲测可以正确输出结果):
program ii;
var
c,d:array[0..10]of string;
b:array[0..10] of integer;
i,n:integer; a:longint;
begin
readln(a);
i:=1;
while true do
begin
b[i]:=a mod 10;
a:=a div 10;
if a=0 then break;
i:=i+1;
end;
c[0]:='zero'; d[9]:='yi';
c[1]:='one'; d[8]:='qianwan';
c[2]:='two'; d[7]:='baiwan';
c[3]:='three'; d[6]:='shiwan';
c[4]:='four'; d[5]:='wan';
c[5]:='five'; d[4]:='qian';
c[6]:='six'; d[3]:='bai';
c[7]:='seven'; d[2]:='shi';
c[8]:='eight'; d[1]:='yuan';
c[9]:='nine';
for n:=i downto 1 do
write(c[b[n]],' ',d[n],' ');
end.
热心网友 时间:2024-11-04 23:35
var
st:string;
l,i:longint;
ge,shi,bai,qian,wan,shiwan:char;
begin
read(st);
l:=length(st);
ge:=st[l];
shi:=st[l-1];
bai:=st[l-2];
qian:=st[l-3];
wan:=st[l-4];
shiwan:=st[l-5];
write(shiwan,'shiwan',wan,'wan',qian,'qian',bai,'bai',shi,'shi',ge,'yuan');
end.
热心网友 时间:2024-11-04 23:33
while true do
begin
b[i]:=a mod 10;
if b[i]=b[i-1] then exit;
i:=i+1;
end;
这段有问题:
你的 a 没有 DIV 10 所以每次取余都是相同的数
然后你就 exit 了
所以没输出
热心网友 时间:2024-11-04 23:34
改成 write(c[b[n]]+d[n]); 试试看