回 帖 发 新 帖 刷新版面

主题:大一计算机专业C语言问题请教

1、求S=2*4*6*8*…*34 
#include<stdio.h> 
void main() 

long double s,i=1; 
s=2; 
for(;s<34;) 
{i=i*s;s=s+2;} 

printf("%d\n",i); 

我自己不管怎么改,要不就是出现负数,要不就与计算器算出来的相差太大了,计算器算出来是20位。。 


2、使用循环编写以下图案,要求用户输入排数。 
* * * * 
* * * 
* * 

这个我跟本不知道怎么用循环写char类型的程序,还有 一个就是如果用户要你输出N个3的程序,会不会用到数学模型10^n*(3/9)? 

3、使用二分迭代法求方程f(x)=2x^3-4x^2+3x-7=0的实根,直到 |Xn-Xn-1|<10^(-6)为止,n和n-1都为下标。 


求求各位大哥了,小弟实在不知道怎么办了。。

回复列表 (共8个回复)

沙发

#include<stdio.h> 
void main() 

long double i=1; 
int t=2;
for(int s=1;s<17;s++) 
{
i=i*t;
t=t+2;


printf("%d\n",i); 


这样我看着顺点

板凳


第2题有点问题:
就是问题是要求输出
*_*_*_*_*
_*_*_*_*_
__*_*_*__
___*_*___
____*____
要求输出排数

3 楼


前面中间后面都是空格,要求输入排数,输出图像。。。先谢谢了

4 楼

稍作改动
#include<stdio.h> 
void main() 

long double s=2,i=2,t;
s=2; 
for(i=2;i<=17;i++) 
{t=2*i;
s=s*t;} 
printf("%f\n",s); //long double定义的是实型变量,

5 楼

第3题已经有人做出来了,程序仅供参考,。。。
首先方程只有一个实根。 
因为:f(2)=-1<0;f(3)=20>0,所以方程在2和3之间必有一根。 
又对函数f(x)求导得 f(x)'=6(x^2-(4/3)x+(4/9))+(1/3)恒大于0,说明函数f(x)递增,故方程有且仅有一解(实根,因为复根是成对出现的)。 
接下来就是编程求解了: 
#include<stdio.h> 
#include<math.h> /* 包含fabs() */ 
const double ep=1e-6; /* 也可以用define 宏,但我建议你用const常变量 */ 
int main() 

double a=2.0; 
double b=3.0; 
double mid=(a+b)/2; 
double f1; 
do 

f1=2*mid*mid*mid-4*mid*mid+3*mid-7; /*计算新的函数值 */ 
if(f1>0) { /* 若大于0,则应mid左移 */ 
b=mid; 
mid=(a+mid)/2; 

else if(f1<0)/*mid右移 */ 

a=mid; 
mid=(mid+b)/2; 

else break; /* 等于0,则说明已取得真实根,但基本不可能,因为实际问题中往往不存在有理数根 */ 
}while(fabs(2*mid*mid*mid-4*mid*mid+3*mid-7-f1)>=ep);/* fabs(double) */ 
printf("the root is : %f\n",mid); 
return 0; 

注意:对double型的数,不能用乘方" ^ ",和abs(int)函数。


上述程序不知道是否正确。。但是希望谁能把第2题做起哈。。。谢谢~了先

6 楼

#include <stdio.h>

int main(void)
{
    int n=0;
    scanf("%d", &n);
    for(int i=0; i<n; i++){
        for(int j=0; j<i; j++)
            printf(" ");
        for(int k=0; k<(n-i); k++)
            printf("* ");
        printf("\n");
    }

    return 0;
}

7 楼


#include "stdafx.h"
#include <iostream>
using namespace std;
void main() 

    long double i=1;
    int s=2;
    while(s<=34) 
    {
        i=i*s;
        if(s<34)
            cout<<s<<"*";
        else if(s=34)
            cout<<s;
        s=s+2;
    } 
    cout<<endl;
    cout<<i<<endl;

我写的,看看啊

8 楼

呵呵,刚才没事干看了看你的程序,其实第一个,你写的程序只有一个地方错了,稍做改动就行了,不用按楼上说的那样做大手术。
错误的原因就是因为你写的这个句子,因为你不理解“%d”是什么
           printf("%d\n",i); //错误的根源
你改成这样就行了:
           cout<<i<<endl;
这时,加个头函数就行了,加这个:
           #include<iostream.h>

我来回复

您尚未登录,请登录后再回复。点此登录或注册