注册 登录
编程论坛 C++教室

一道简单的编程练习题,恳求赐教。

wylog 发布于 2008-08-05 13:28, 1541 次点击
编写一个要求用户输入两个整数的程序。该程序将计算并输出这两个整数之间(包括这两个整数)所有整数的和。假设先输入较小的整数。例如,如果用户输入的是2和9,则程序将指出2~9之间所有整数的和为44。

我编写的程序如下,编译通过,但运行答案有误。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void main()
{
cout<<"input the first number:";
int x;
cin>>x;
cout<<"input the last number:";
int y;
cin>>y;
int *s=new int[200];
s=&x;
for (int i=0;i<y-x;i++)
{
    s[i]=x+i;    
}
int num[200];
num[0]=s[0];
for (int b=1;b<=y-x;b++)
{num[b]=num[b-1]+s[b];
}

cout<<"the sum is :"<<num[b]<<endl;
}
13 回复
#2
bamboowing2008-08-05 16:01
回复
你在第一个循环中for (int i=0;i<y-x;i++)少了个等号
应该是for (int i=0;i<=y-x;i++)
而且你第二个数组没有全部赋值,只是赋了第一个值,并不完全,
我个人认为第二个循环完全没有必要。
我个人认为下面的方法会好一些:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void main()
{
cout<<"input the first number:";
int x;
cin>>x;
cout<<"input the last number:";
int y;
cin>>y;
int *s=new int[200];
int a=0;
s=&x;
for (int i=0;i<=y-x;i++)
{
    s[i]=x+i;  
    a=a+s[i];  
}

cout<<"the sum is :"<<a<<endl;
}
#3
黎明静悄悄2008-08-05 16:18
这么麻烦干什么   直接编个等差数列求和公式不就行了
#4
jlz72302202008-08-05 17:41
2楼的这个程序只能计算两个数之差不大于33的
#5
随风自由2008-08-05 18:35
回复
一定需要用数组吗?不用数组也能解决的
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
cout<<"input the first number:";
int x;
cin>>x;
cout<<"input the last number:";
int y;
cin>>y;
long int sum=0;
int i;
for (i=x;i<=y;i++)
{
    sum+=i;
}
cout<<"the sum is :"<<sum<<endl;
int t;
cin>>t;
return 0;
}
#6
wylog2008-08-05 21:06
首先,谢谢二楼的解答。不知道为什么,运行后,结果是对的,但编译器会弹出一个提示,XXXX内存出错;不知道何解,通常出现这种错误应该是代码有不完善的地方吧?是不是最后要加个delete []s,来释放指针占用的内存?
#7
wylog2008-08-05 21:09
5楼的解答,更好,谢了!
#8
jlz72302202008-08-05 23:52
5楼的解答无错,不过感觉int t;cin>>t;是不是没有什么作用啊?
#9
名字不好取啊2008-08-07 21:04
5楼想表达的意思是 暂停下  其实用个system("pause");就可以了
#10
细雨斜飞2008-08-10 14:30
#include <iostream>
using namespace std;

template <class T>
T max(T a,T b)
{
    return a>b?a:b;
}

template <class T>
T min(T a,T b)
{
    return a<b?a:b;
}

void main()
{
    cout<<"Please input two intger"<<endl;
    int a,b;
    cin>>a>>b;
    int Max;
    Max=max(a,b);
    //cout<<"max intger"<<Max<<endl;
    int Min;
    Min=min(a,b);
    //cout<<"min intger"<<Min<<endl;
//-------------------------------------------------------------------------------
    int times;times=Max-Min+1;
    int sum;sum=0;
    for(int i=0;i<=times;i++)
    {
        sum+=Min;
        Min++;
    }

    cout<<"from a to b(or b to a) ,the result is :"<<sum<<endl;

}
#11
yang_net2008-08-11 13:41
// sample.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<valarray>
using namespace std;

void _tmain()
{
    int firstNumber,secondNumber;
    cout<<"First number _>";
    cin>>firstNumber;
    cout<<"Second numner _>";
    cin>>secondNumber;
    cout<<"The sum is:"<<(firstNumber+secondNumber)*(abs(firstNumber-secondNumber)+1)/2
        <<endl;
    
}
#12
xzx10020022008-08-11 16:14
有简单的算法为什么不用呢,
(首项+末项)*项数/2
多简单,多明了。
ls的就很好。。。
#13
gloomyboy2008-08-11 18:06
lz你好,我对你的那个图形问题的输出很感兴趣,不知道你后来有没有得到更加好的,简便的方法呢?
#14
wahl19862008-08-17 10:05
楼主的程序算法也有问题,你最后输出的不应该是num[b],你仔细分析你的程序,实际上他没有初始化...
另外.s=&x这句会引起内存的错错.S是指针他指向X,最后程序结束时要释放指针,会引起内存错误.把这句删了,他没有一点作用.下面是我帮你改的程序:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void main()
{
cout<<"input the first number:";
int x;
cin>>x;
cout<<"input the last number:";
int y;
cin>>y;
int *s=new int[200];
for (int i=0;i<y-x;i++)
{
    s[i]=x+i;   
}
int num[200];
num[0]=s[0];
for (int b=1;b<y-x;b++)
{num[b]=num[b-1]+s[b];
}
num[y-x]=num[y-x-1]+y;
cout<<"the sum is :"<<num[y-x]<<endl;
delete[] s;
system("pause");
}
1