首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pascal和C:不同的输出

Pascal和C:不同的输出
EN

Stack Overflow用户
提问于 2013-03-18 02:35:38
回答 1查看 156关注 0票数 3

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

Pascal:

代码语言:javascript
复制
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:

代码语言:javascript
复制
#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语言来做。但我必须避免错误的结果,因为它们意味着失分。这是一个在竞赛网站上的训练,将伪代码转换为代码。

EN

回答 1

Stack Overflow用户

发布于 2013-03-18 02:38:25

这些值

代码语言:javascript
复制
q = i * a[i];
r = i + a[i];

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

代码语言:javascript
复制
for (i = 0; i < n; i++) {
    int i1 = i + 1;
    q = i1 * a[i];
    r = i1 * a[i];
    s += q * r;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15464600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档