gpt4 book ai didi

c - 帕斯卡和 C : different output

转载 作者:行者123 更新时间:2023-12-01 14:17:29 28 4
gpt4 key购买 nike

关于 StackOverflow 的第一个问题...我有 2 个程序,一个是 C 语言的,一个是 Pascal 语言的,它们应该给我相同的输出,但它们没有。

帕斯卡:

program ssgf108;
uses crt;
var n,q,r,s,i:integer;
var a:array[1..10] of integer;

begin
a[1]:=3;
a[2]:=-5;
a[3]:=12;
a[4]:=7;
a[5]:=-4;
a[6]:=-3;
a[7]:=2;
a[8]:=8;
a[9]:=4;
a[10]:=10;
readln(n);
q:=0;
r:=0;
s:=1;
for i:=1 to n do
begin
q:=i*a[i];
r:=i+a[i];
s:=s+q*r;
end;
writeln(q,' ',r,' ',s);
end.

C:

#include <stdio.h>

int main(){
int a[10],n,q,r,s,i;
scanf("%d",&n);
a[0]=3;
a[1]=-5;
a[2]=12;
a[3]=7;
a[4]=-4;
a[5]=-3;
a[6]=2;
a[7]=8;
a[8]=4;
a[9]=10;
q=0;
r=0;
s=1;
for (i=0;i<=n-1;i++){
q=i*a[i];
r=i+a[i];
s=s+q*r;
}
printf("%d %d %d",q,r,s);
return 0;
}

输入 5 作为 n 后,Pascal 输出 -20 1 871,而 C 输出 -16 0 567。错误在哪里?这个问题的背景:我正在我的学校做一个解决问题的比赛,下一个挑战很接近,有些问题需要编程,我已经用 Bash 和 Pascal 完成了前两个挑战,现在我正在学习 C,所以我会喜欢用 C 来做。但我必须避免错误的结果,因为它们意味着失分。这是比赛现场的培训,将伪代码转换为代码。

最佳答案

值(value)观

q = i * a[i];
r = i + a[i];

取决于循环内 i 的值,这在基于 1 和基于 0 的索引循环之间是不同的。您需要在 C 循环中使用 i+1 进行算术运算:

for (i = 0; i < n; i++) {
int i1 = i + 1;
q = i1 * a[i];
r = i1 * a[i];
s += q * r;
}

关于c - 帕斯卡和 C : different output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464600/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com