救,C艹初学者做书上练习但结果不正确

img

以下是我的源代码
求各位佬指点为什么得不到正确答案


#include<iostream>
#include <cmath>
using namespace std;

int Multiplication(int n)  //求阶乘 
{
    int Result=1;
    while(n>0)
    {
        Result*=n;
        n--;
    }
    return Result;
}

double Tsin(double x)  //求sinx近似值
{
    const double threshold=1e-10;
    double square=x*x;
    double initial=x;
    double Result=0;
    int i=1;
    while(initial/Multiplication(i)>=threshold)
    {
        double f=initial/Multiplication(i);
        i%4!=1?Result+=f:Result-=f;
        initial*=square;
        i+=2;
    }
    return Result;
}

int main()
{
    double k,r,s;
    cout<<"Please input r:";
    cin>>r;
    cout<<"Please input s:";
    cin>>s;
    
    if(r*r>s*s)
    {
        k=Tsin(r*s)/2;
    }
    
    else
    {
        k=sqrt(Tsin(r)*Tsin(r)+Tsin(s)*Tsin(s));
    }
    
    cout<<"k="<<k<<endl;
    
    system("pause");
    return 0;
}

试试把求阶段的返回值改为double类试试,因为阶乘的结果可能超过int的取值范围;

然后把计算符号位那里修改下。

修改如下:

参考链接:


 
 
#include<iostream>
#include <cmath>
using namespace std;
 
// https://blog.csdn.net/civil_dog985/article/details/118611836 
double Multiplication(int n)  //求阶乘 
{
    double Result=1;
    while(n>0)
    {
        Result*=n;
        n--;
    }
    return Result;
}
 
double Tsin(double x)  //求sinx近似值
{
    const double threshold=1e-10;
    double square=x*x;
    double initial=x;
    double Result=0;
    int i=1;
    int flag=1;
    while(initial/Multiplication(i)>=threshold)
    {
        double f=initial/Multiplication(i);
        i%4==1?Result+=f:Result-=f;
  //      Result += flag*f;
     //   flag=-flag;
 //       cout<<"f="<<f<<",Result="<<Result<<",initial="<<initial<<",Multiplication("<<i<<")="<<Multiplication(i)<<endl; 
        initial*=square;
        i+=2;
    }
    return Result;
}
 
int main()
{
    double k,r,s;
    cout<<"Please input r:";
    cin>>r;
    cout<<"Please input s:";
    cin>>s;
    
    if(r*r>s*s)
    {
        k=Tsin(r*s)/2;
    }
    
    else
    {
        k=sqrt(Tsin(r)*Tsin(r)+Tsin(s)*Tsin(s));
    }
    
    cout<<"k="<<k<<endl;
    
    system("pause");
    return 0;
}

 


img

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7689715
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言项目工程实践----学生成绩管理系统 多源文件(部分功能未实现,新人小白求大佬指正)
  • 除此之外, 这篇博客: C语言学生成绩管理系统源代码中的 直接获取作者之前收藏的学习资源,谢谢网友们的分享。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 以后有时间再给大家继续分享,有任何问题欢迎留言区交流。

    大学C语言实训课,C语言学生成绩管理系统。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    struct student
    	{
    		int num;
    		char name[20];
    		float pingshi;
    		float shiyan;
    		float kaoshi;
    		double zongping;
    	}stu[4];
    void main()
    {
    	void a();
    	void b();
    	void c();
    	void d();
    	void e();
    	int n;
    	while(n!=6)
    	{	printf("\t大学计算机基础成绩管理系统\n");
    		printf("1:输入一个班学生大学计算机基础成绩记录\n");
    		printf("2:显示所有成绩记录\n");
    		printf("3:计算并输出平均成绩,均方差\n");
    		printf("4:输出成绩与排名\n");
    		printf("5:结果存入文件chengji.txt\n");
    		printf("6:退出系统\n");
    		printf("输入选项代码:");
    		scanf("%d",&n);
    		switch(n)
    		{
    			case 1:a();break;
    			case 2:b();break;
    			case 3:c();break;
    			case 4:d();break;
    			case 5:e();break;
    			case 6:printf("\n*******************谢谢使用!*******************\n");break;
    			break;    
    		}	
    	}
    getchar();
    }
    /* 子  函  数*/
    void a() /* 输入一个班的学生记录*/
    
    {
    	int i;
    
    	for(i=0;i<4;i++)
    
    	{   
    
    		printf("请输入学号 姓名 平时成绩 实验成绩 考试成绩:");
    
    		scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].pingshi,&stu[i].shiyan,&stu[i].kaoshi);
    		
    	}for(i=0;i<4;i++)
    stu[i].zongping=0.1*stu[i].pingshi+0.3*stu[i].shiyan+0.6*stu[i].kaoshi;
    }
    void b()/* 显示所有记录*/
    
    {
    	int i;
    
    	printf("学号        姓名       平时成绩       实验成绩      考试成绩     总评成绩\n");
    
    	for(i=0;i<4;i++)
    
    		printf("%d%14.2s%14.2f%14.2f%14.2f%14.2f\n",stu[i].num,stu[i].name,stu[i].pingshi,stu[i].shiyan,stu[i].kaoshi,stu[i].zongping);
    
    }
    
    void c()/* 求出全班平均成绩,显示均方差*/
    {  
    	int a[4]={0,1,2,3};
        int i,j;
        double total=0,pfc=0,bzc=0;
        double ave;
        for(i=0;i<4;i++)
    	{
    		total=total+stu[i].zongping;
    	}
        ave=total/4.0;
        printf("总评平均成绩是%f\n",ave);
    	for(i=0;i<4;i++)
    	{
    		pfc=pow((stu[i].zongping-ave),2)/4;
    	}
    	bzc=sqrt(pfc);
    	printf("\n平方差是%f\n",pfc);
    	printf("\n标准差是%f\n",bzc);
    }
    void d()
    
    {
    	int a[4]={0,1,2,3};
    	int i,j,temp;
    	for(j=0;j<3;j++)
    	{
    		for(i=0;i<3-j;i++)
    		if(stu[a[i]].zongping>stu[a[i+1]].zongping)
    		{	
    			temp=a[i];a[i]=a[i+1];
    			a[i+1]=temp;
    
    		}
    	}
    
    	printf("顺序为:\n");
    
    	printf("学号     姓名      总评成绩\n");
    
    	for(i=0;i<4;i++)
    
    		printf("%d%10.2s%15.2f\n",stu[a[i]].num,stu[a[i]].name,stu[a[i]].zongping);
    
    	printf("\n");
    
    }
    
    void e()
    {int i;
    FILE *fp;
    fp=fopen("chengji.txt","w");
    
    	fprintf(fp,"学号        姓名       平时成绩       实验成绩      考试成绩     总评成绩\n");
    
    	for(i=0;i<4;i++)
    
    		fprintf(fp,"%d%14.2s%14.2f%14.2f%14.2f%14.2f\n",stu[i].num,stu[i].name,stu[i].pingshi,stu[i].shiyan,stu[i].kaoshi,stu[i].zongping);
    
    printf("\n\n*******************恭喜,保存完成!*******************\n\n");
    }
    

    简单记录。

    关注微信公众号“资料在线”,回复“C语言源码”,即可获得C语言源码包

    更多资源等着你

    最新文章:

    0、C语言学生成绩管理系统(课程设计报告书)★★★

    1、 C语言学生成绩管理系统源代码 ★★★★★

    2、 C语言学籍管理系统源代码 ★★

    3、C语言学生成绩管理系统设计 《C语言程序设计》实训报告 ★★★

    4、C语言学生信息管理系统源代码 ★★★★

  • 您还可以看一下 包东华老师的C语言学生信息管理系统课程中的 用户登录操作的三个小界面以及倒计时小节, 巩固相关知识点