用C语言编程实现秦九韶

Python019

用C语言编程实现秦九韶,第1张

/*修改n,n代表f(x)为n次多项式*/

#define n 5/*暂且设定为5*/

#include<stdio.h>

void main()

{

float a[n],x,sum

int i

printf("Please input the value of x=")

scanf("%f",&x)

for(i=ni>=0i--)

{

printf("Please input the value of a%d=",i)

scanf("%f",&a[i])

}

sum=a[n]

for(i=ni>=1i--)

{

sum=sum*x+a[i-1]

}

printf("f(x)=%f\n",sum)

}

/*互相学习哈*/

这个又称为海伦公式,是计算三角形面积的,首先看你测试输入的abc是否可以构成一个三角形,在满足这个条件下,你公式里面的s=(i+j+k)/2

等式右边会先依照整型进行计算然后再转为double类型,这样会差生相应的误差,可能就导致你的结果为0了,可以改为s=(i+j+k)/2.0你可以修改试试。

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <string.h>

#define N 30

typedef struct

{

char name[20]

char No[20]

char sex[20]

float score[5]

float avg

}STUDENT

void sort(STUDENT* s)   //按平均成绩由高到低排序 

{

STUDENT t

int i,j

for(i=0i<N-1i++)

{

for(j=0j<N-1-ij++)

{

if(s[j].avg<s[j+1].avg)

{

t=s[j+1]

s[j+1]=s[j]

s[j]=t

}

}

}

}

void input(STUDENT* s)   //输入函数 

{

system("cls")

int i,j

for(i=0i<Ni++)

{

printf("\n请输入第%d个同学的姓名:",i+1)

fflush(stdin)

scanf("%s",s[i].name)

printf("\n请输入第%d个同学的学号:",i+1)

fflush(stdin)

scanf("%s",s[i].No)

printf("\n请输入第%d个同学的性别:",i+1)

fflush(stdin)

scanf("%s",s[i].sex)

for(j=0j<5j++)

{

printf("\n请输入第%d个同学的第%d门课成绩:",i+1,j+1)

fflush(stdin)

scanf("%f",&(s[i].score[j]))

}

}

}

void prt(STUDENT* s)  //输出函数 

{

int i

printf("\n\n")

for(i=0i<Ni++)

{

printf("%s  %s  %s  %5.1f  %5.1f  %5.1f  %5.1f  %5.1f  %5.2f\n",s[i].name,s[i].No,s[i].sex,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4],s[i].avg)

}

}

float calc(STUDENT* s)  //计算函数--计算第三门课平均分 

{

float all=0

int i,j

for(i=0i<Ni++)

{

all+=s[i].score[2]

}

return all/N

void find(STUDENT* s)    //查找函数---平均分在95以上的女生和全部成绩在85分以上的女生 

{

int i,j

printf("\n平均成绩在90分以上的女生有:\n")

for(i=0i<Ni++)

{

if(s[i].avg>=90.0 && strcmp(s[i].sex,"女")==0)

{

printf("%s  %s  %s  %5.1f  %5.1f  %5.1f  %5.1f  %5.1f  %5.2f\n",s[i].name,s[i].No,s[i].sex,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4],s[i].avg)

}

}

printf("\n全部成绩在85分以上的女生有:\n")

for(i=0i<Ni++)

{

if(strcmp(s[i].sex,"女")==0)

{

for(j=0j<5j++)

{

if(s[i].score[j]<85.0)

{

break

}

}

if(j>=5)

{

printf("%s  %s  %s  %5.1f  %5.1f  %5.1f  %5.1f  %5.1f  %5.2f\n",s[i].name,s[i].No,s[i].sex,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4],s[i].avg)

}

}

}

}

int main()

{

STUDENT s[N]

int i,j

////----------------如果要用手动输入全部数据,请注释掉虚线间的代码---------开始-------//

char* name1[20]={"张","王","李","赵","钱","孙","蒋","秦","任","刘","周","郑","吴","朱","许","何","吕","谢","方","叶"}

char* name2[20]={"子","欣","晨","紫","诗","梦","嘉","一","思","静","可","佳","心","梓","俊","明","浩","博","文","天"}

char* name3[20]={"轩","勇","涛","军","浩","豪","宇","俊","鸣","熙","文","国","佑","泽","然","杰","远","平","秋","飞"}

srand((unsigned)time(0))

int n

float f,avg

for(i=0i<Ni++)    //随机初始30个同学姓名学号成绩等数据 

{

n=rand()%20

strcpy(s[i].name,name1[n])

n=rand()%20

strcat(s[i].name,name2[n])

n=rand()%20

strcat(s[i].name,name3[n])

//以上为随机生成姓名 

n=0

for(j=0j<5j++)

{

n=n*10+rand()%10

}

sprintf(s[i].No,"%05d",n)

//以上为随机生成学号 

if(rand()%2==0)

{

strcpy(s[i].sex,"男")

}

else

{

strcpy(s[i].sex,"女")

}

//以上为随机生成性别

avg=0

for(j=0j<5j++)

{

n=rand()%50+51

f=(float)n

if(rand()%2==1 && f<100.0)

{

f+=0.5

}

s[i].score[j]=f

avg+=f

}

s[i].avg=avg/5

//以上为随机生成5门成绩和平均分 

}

////----------------如果要用手动输入全部数据,请注释掉虚线间的代码---------结束-------//

// input(s)  //如果不用随机生成姓名学号成绩等数据,请用此函数 

sort(s)

printf("按平均成绩由高到低打印\n")

prt(s)

printf("\n\n第三门课的平均分为: %.2f\n",calc(s))

find(s)

return 0

}