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

两道程序题请大家帮一下.

chenboby 发布于 2008-08-13 11:40, 2286 次点击
1、编写程序求10!+9!+.....+3!+2!+1!的和,其中计算阶乘要用函数实现;
2、编写程序,要求:1)从键盘上输入6个整数放入数组a[6]中(用while循环实现);2)求出数组元素的最大值及数组的平均值,并将各元素、最大值及平均值输出到一文本文件中保存;3)然后打开该文件,读取其中内容并显示在屏幕上。
16 回复
#2
xlh52252008-08-13 11:41
自己做吧,这么简单!
#3
chenboby2008-08-13 11:58
[bo][un]xlh5225[/un] 在 2008-8-13 11:41 的发言:[/bo]

自己做吧,这么简单!

考试用大家帮我做一下
#4
xlh52252008-08-13 12:00
很无敌...
看奥运...
#5
blueboy820062008-08-13 13:05
真得好简单。。。
#6
YCVSCY2008-08-13 13:57
引用前人的一句话"一看就知道是作业题"~
#7
alaer2008-08-13 15:33
/* 第一题 */
/* 阶乘用函数实现满足你的要求了,不过这种方式计算效率比较低 */
/* 本程序在WIN-TC1.8和VC6.0下编译通过                       */
#include <stdio.h>
#include <conio.h>

long Factorial(long n)
{
    long ReturnVal=0 ;
    if(n>1)
        ReturnVal = n * Factorial(n-1) ;
    else if(n==1)
        ReturnVal = 1L ;
    return ReturnVal ;
}

long SumFactorial(long n)
{
    long ReturnVal=0 ;
    if(n>1)
        ReturnVal = Factorial(n) + SumFactorial(n-1) ;  
    else if(n==1)
        ReturnVal = Factorial(1) ;
    return ReturnVal ;
}

main()
{
    int n = 10 ;
    printf("%d! + ... + 1! = %ld\n",n,SumFactorial(n));
    getch();
}
#8
alaer2008-08-13 15:40
/* 第一题 如果从效率角度来考虑应该用这个方式 */
#include <stdio.h>
#include <conio.h>

long SumFactorial(long n)
{
    long ReturnVal=0,factorial=1,sumfactorial=1 ;
    int i ;
    for (i=2; i<=n; i++)
    {
        factorial    *= i ;
        sumfactorial += factorial ;
    }
    ReturnVal = sumfactorial ;
    return ReturnVal ;
}

main()
{
    int n = 10 ;
    printf("%d! + ... + 1! = %ld\n",n,SumFactorial(n));
    getch();
}
#9
jimn19822008-08-14 09:17
看我用c++的方法我是初学者
tt.h文件内容
class test
{
    int n;
public:
    static long num;
    test(int a);
    long fun();
    void getnum();
};
//定义了一个类
tt.cpp文件内容

#include "TT.H"
#include "iostream.h"

long test::num = 0;
test::test(int a):n(a)
{
}

long test::fun()
{
    long i=1,temp = 1;
    for(i;i<=n;i++)
    {
        temp = temp * i;    
        num += temp;
        //cout<<num<<endl;
    }
    return 1;
}

void test::getnum()
{
    fun();
    cout<<n<<"!="<<test::num<<endl;
}

//实现这个类,注意看静态变量num

main.cpp文件的内容

#include "TT.H"
#include "iostream.h"

int main(int argc,char *argv[])
{
    
    int a;
    cout<<"please insert a int number!"<<endl;
    cin>>a;
    test t(a);    
    t.getnum();
    
    return 1;
}

vc6.0运行正确通过
#10
chenboby2008-08-14 11:20
第二道怎么控制文件不太会.
#include<iostream.h>
void main()
{
int a[6];
int max,average,sum;
cout<<"请输入六个数:"<<endl;
cin>>a[0];//因为数组是从零开始的
sum=a[0];
max=a[0];
for(int i=1;i<6;i++)
{
cin>>a[i];
if(max<=a[i])
{
max=a[i];
}
sum+=a[i];
}
average=sum/6;
cout<<"最大值:"<<max<<" "<<"平均值为:"<<average<<endl;
}
这个只求出最大值和平均值了.
#11
xxp272008-08-15 00:27
既然是用C++,还是建议你使用标准库,省时又省力,不然还不如直接用C
文件部分明天有空再写吧

// 测试.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int> ivec;
    int n=0;
    int num;
    while(n!=6)
    {
        cin>>num;
        ivec.push_back(num);
        n++;
    }
    int sum=0;
    int m=0;
    for(vector<int>::iterator it=ivec.begin();it!=ivec.end();it++)
    {
        cout<<*it<<" ";
        sum+=*it;
    }
    cout<<"平均值为"<<sum/6<<endl;
    cout<<"最大值为"<<*(max_element(ivec.begin(),ivec.end()))<<endl;

}
改好了

#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int> ivec;
    ofstream out("1.txt");
    if(!out)
    {
        cout<<"error"<<endl;
        exit(0);
    }
    int n=0;
    int num;
    while(n!=6)
    {
        cin>>num;
        ivec.push_back(num);
        n++;
    }
    int sum=0;
    int m=0;
    for(vector<int>::iterator it=ivec.begin();it!=ivec.end();it++)
    {
        out<<*it<<" ";
        sum+=*it;
    }
    out<<endl<<"平均值为"<<sum/6<<endl;
    out<<"最大值为"<<*(max_element(ivec.begin(),ivec.end()))<<endl;
    cout<<"已成功储存在1.txt中"<<endl;
    return 0;

}

[[it] 本帖最后由 xxp27 于 2008-8-15 10:30 编辑 [/it]]
#12
独孤剑魔2008-08-15 09:15
真的都号简单
#13
hhitjsj0212008-08-15 13:21
#include <iostream>
using namespace std;
int fun(int );
   
int main()
{
   
    cout<<fun(10)+fun(9)+fun(8)+fun(7)+fun(6)+fun(5)+fun(4)+fun(3)+fun(1)<<endl;
    system("pause");
    return 0;
                    
    }
int fun(int num)
{
   if(1==num)
   {
    return 1;
   }
    else
    return num*fun(num-1);
}
#14
maying_112008-08-15 15:08
程序代码:
#include <iostream>
using namespace std;
//声明函数
int *max(int*,int ,int*);
int avg(int*,int);
int main()
{
    int a[6];
    int ia;
    int i=0;
    int *maxaddr;
    int idx;
    static int m=0;
    while(m<6&&cin>>ia)
    {
      a[i]=ia;
      i++;
      m++;
    }
    maxaddr= max(a,sizeof(a)/sizeof(*a),&idx);
    cout<<*maxaddr<<endl;
    cout<<avg(a,sizeof(a)/sizeof(*a))<<endl;;
    system("pause");
    return 0;
   
}

 //求数组的最大值   

 int *max(int*array,int size1,int*maxa)
{
     *maxa=0;
     for(int i=1;i<size1;i++)
     if(*(array+*maxa)<*(array+i))
     *maxa=i;
     return(array+*maxa);

 }   
//求数组的平均数
int avg(int*pr,int size2)
{
    int avgg=0;
    for(int i=0;i<size2;i++)
    {
       avgg+=*pr++;  
    }
    return avgg/size2;
}        
                  
   
#15
gloomyboy2008-08-16 10:09
我觉得第一道,最简单的算法还是应该用递归来做,我写的程序如下,运行正确,楼主可以参考一下!
#include<iostream.h>
int N=10,sum=0;
long f(int n);
void main()
{
    for(N=10;N>0;N--)
        sum+=f(N);
    cout<<sum<<endl;
}
long f(int n)
{
    if(n==0)
        return 1L;
    if(n==1)
        return 1L;
    else
        return n*f(n-1);
}
#16
lizhigang342008-08-16 10:25
作业还是要自己做的.
#17
细雨斜飞2008-08-18 10:29
#include <iostream>
using namespace std;

template<class T>
T factorial(T x)
{
    if( x == 1)
        return 1;
    else
        return factorial(x-1)*x;


}

void main()
{
    double sum=0;
    for(int i=1;i<=10;i++)
    {
        sum+=factorial(i);
    }
    cout<<"结果是:"<<sum<<endl;

}
1