急求一百行左右的C语言编程!
答案:5 悬赏:40 手机版
解决时间 2021-03-05 04:42
- 提问者网友:人生佛魔见
- 2021-03-04 08:33
急求一百行左右的C语言编程!
最佳答案
- 五星知识达人网友:夜风逐马
- 2021-03-04 09:25
#include
#include
struct student
{
int number;//学号
double sum;//三门课的总成绩
double average;//三门课的平均分
char name[20];//学生姓名
double score[3];//三门课的成绩
};
student stu[10];//定义10个结构体对象
double ave1=0,ave2=0,ave3=0;//0个学生的每门课的平均分
void input()//输入10个学生的信息的函数
{
int i,j;
for(i=0;i<10;i++)
{
scanf("%d",&stu[i].number);//输入学号
scanf("%s",stu[i].name);//输入姓名
for(j=0;j<3;j++)//输入三门成绩
scanf("%lf",&stu[i].score[j]);
}
}
void average1()//求每个学生的三门课的平均分的函数
{
int k,j;
for(k=0;k<10;k++)
{
stu[k].sum=0;
for(j=0;j<3;j++)
stu[k].sum=stu[k].score[j]+stu[k].sum;
stu[k].average=stu[k].sum/3;
}
}
void average2()//求10个学生的每门课的平均分
{
int i;
for(i=0;i<10;i++)
{
ave1=ave1+stu[i].score[0];
ave2=ave2+stu[i].score[1];
ave3=ave3+stu[i].score[2];
}
ave1=ave1/10;
ave2=ave2/10;
ave3=ave3/10;
}
void scort()//根据三门课的平均分排序 选择法排序
{
int i,j,k;
student st;
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
if(stu[j].average>stu[k].average)
k=j;
if(i!=k)
{
st=stu[i];
stu[i]=stu[k];
stu[k]=st;
}
}
}
void output()//输出排名后的信息
{
int i,j;
printf("the first course average of the 10 students is:%0.2lf\n",ave1);
printf("the second course average of the 10 students is:%0.2lf\n",ave2);
printf("the third course average of the 10 students is :%0.2lf\n",ave3);
printf("After the ranking:\n");
for(i=0;i<10;i++)
{
printf("Rank %d",i+1);//排名
printf(" studentnumber:%d studentname:%s the average of the three course is:%0.2lf\n",stu[i].number,stu[i].name,stu[i].average);
printf("the total score of the three course is:%0.2lf\n",stu[i].sum);
printf("the score of the three course is: ");
for(j=0;j<3;j++)
{
printf("%0.2lf ",stu[i].score[j]);
}
printf("\n\n");
}
}
void main()
{
printf("please intput 10 students information\nstudentnumber,studentname,the score of three course\n");
input();
average1();
average2();
scort();
output();
}
//自己数数有多少行吧,反正绝对是原创,这是以前给别人编写的一个程序,就是不知道你能不能看懂,有输入输出提示的不过是英文提示追问这个编程的题目是什么?追答题目大致是用C语言的结构体,建立一个学生结构体,数据成员包括学生姓名,学号,三门课程,平均分,总成绩。输入10个学生的信息,计算个人平均分,和10个人的总平均分,根据个人三门课的平均分排名,输出排名后的学生信息。追问怎么运行错误啊?追答你能把错误信息给我看下吗?也可能是编译器的问题!要不你直接把题目给出来,让大家能为你量身定制
#include
struct student
{
int number;//学号
double sum;//三门课的总成绩
double average;//三门课的平均分
char name[20];//学生姓名
double score[3];//三门课的成绩
};
student stu[10];//定义10个结构体对象
double ave1=0,ave2=0,ave3=0;//0个学生的每门课的平均分
void input()//输入10个学生的信息的函数
{
int i,j;
for(i=0;i<10;i++)
{
scanf("%d",&stu[i].number);//输入学号
scanf("%s",stu[i].name);//输入姓名
for(j=0;j<3;j++)//输入三门成绩
scanf("%lf",&stu[i].score[j]);
}
}
void average1()//求每个学生的三门课的平均分的函数
{
int k,j;
for(k=0;k<10;k++)
{
stu[k].sum=0;
for(j=0;j<3;j++)
stu[k].sum=stu[k].score[j]+stu[k].sum;
stu[k].average=stu[k].sum/3;
}
}
void average2()//求10个学生的每门课的平均分
{
int i;
for(i=0;i<10;i++)
{
ave1=ave1+stu[i].score[0];
ave2=ave2+stu[i].score[1];
ave3=ave3+stu[i].score[2];
}
ave1=ave1/10;
ave2=ave2/10;
ave3=ave3/10;
}
void scort()//根据三门课的平均分排序 选择法排序
{
int i,j,k;
student st;
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
if(stu[j].average>stu[k].average)
k=j;
if(i!=k)
{
st=stu[i];
stu[i]=stu[k];
stu[k]=st;
}
}
}
void output()//输出排名后的信息
{
int i,j;
printf("the first course average of the 10 students is:%0.2lf\n",ave1);
printf("the second course average of the 10 students is:%0.2lf\n",ave2);
printf("the third course average of the 10 students is :%0.2lf\n",ave3);
printf("After the ranking:\n");
for(i=0;i<10;i++)
{
printf("Rank %d",i+1);//排名
printf(" studentnumber:%d studentname:%s the average of the three course is:%0.2lf\n",stu[i].number,stu[i].name,stu[i].average);
printf("the total score of the three course is:%0.2lf\n",stu[i].sum);
printf("the score of the three course is: ");
for(j=0;j<3;j++)
{
printf("%0.2lf ",stu[i].score[j]);
}
printf("\n\n");
}
}
void main()
{
printf("please intput 10 students information\nstudentnumber,studentname,the score of three course\n");
input();
average1();
average2();
scort();
output();
}
//自己数数有多少行吧,反正绝对是原创,这是以前给别人编写的一个程序,就是不知道你能不能看懂,有输入输出提示的不过是英文提示追问这个编程的题目是什么?追答题目大致是用C语言的结构体,建立一个学生结构体,数据成员包括学生姓名,学号,三门课程,平均分,总成绩。输入10个学生的信息,计算个人平均分,和10个人的总平均分,根据个人三门课的平均分排名,输出排名后的学生信息。追问怎么运行错误啊?追答你能把错误信息给我看下吗?也可能是编译器的问题!要不你直接把题目给出来,让大家能为你量身定制
全部回答
- 1楼网友:逃夭
- 2021-03-04 13:18
要求是什么
- 2楼网友:拾荒鲤
- 2021-03-04 12:14
问题非常笼统
- 3楼网友:何以畏孤独
- 2021-03-04 11:46
#include
#include
#define N 100000
void make_num(int t[],int x,int y)//产生100000位小数,存在数组a中
{
int i,k=0,m,temp;
temp=x;
for(i=0;i {
temp=temp%y*10;//分子除以分母再余
t[i]=temp/y;//余数除以分母,得到一位小数
if(temp==0)
k++;
if(k>=100) //如果除尽100次以上,就认为是有限小数
{
system("cls");
printf("%d/%d不是循环小数为%d.",x,y,x/y);
for(i=0;i<=20;i++)
printf("%d",t[i]);
printf(" ");
exit(0);
}
}
}
int start(int t[])// 找循环体的起始位置
{
int i,j,m=0,n=0,b[1000];
for(i=0,j=N-1000;i<1000;j++,i++)//将a中后1000位放在数组b中
b[i]=t[j];
for(i=0;i //此时得到n的值就是,使它们相等的初始位置
{
if(t[i]==b[m])
{
if(m==0) n=i;
m++;
}
else if(m!=0 && t[i]!=b[m])
m=0;
if(m==999)
break;
}
for(i=n-1,j=N-1001;i>=0;i--,j--)//从a[n-1]与a[N-1001]的位置开始比较,当不相等时的位置即为
//循环体的起始位置
{
if(t[i]!=t[j])
break;
}
return i+1;
}
int find(int t[],int x) //找循环体的结束位置
{
int i,j,k,m;
for(i=x+1,k=x;i //相等,则此位置就是循环体的结束位置
{
if(t[i]==t[k])
{
k++;
m=i-k+x;
}
else
k=x;
}
return m;
}
main()
{
int i,m1,start_n,end,son,mon,a[N];
printf("请输入分子和分母: ");
scanf("%d %d",&son,&mon);
make_num(a,son,mon);
start_n=start(a); //循环体的起始位置
system("cls");
printf(" 循环的起始的小数位为: %d ",start_n+1);
end=find(a,start_n); //循环体的结束位置
if(end-start_n>=1000) //如果结束位置减去起始位置大于1000位,则认为此分数为无限不循环
//理论上没有无限不循环的分数,本人也不大清楚,可能这个if可以不要
{
system("cls");
printf("%d/%d为无限不循环小数为: %d.",son,mon,son/mon);
for(i=0;i<=1000;i++)
printf("%d",a[i]);
printf(" ");
exit(0);
}
printf("%d/%d的无限循环小数如下: %d.",son,mon,son/mon);//输出分数的整数部分和小数点
for(i=0;i printf("%d",a[i]);
printf("[");
for(i=start_n;i<=end;i++)//输出循环的部分
printf("%d",a[i]);
printf("] 说明:[]中的数字是循环体 ");
}
找无限循环小数的循环体及循环的起始位置,如下:
#include
#define N 100000
void make_num(int t[],int x,int y)//产生100000位小数,存在数组a中
{
int i,k=0,m,temp;
temp=x;
for(i=0;i
temp=temp%y*10;//分子除以分母再余
t[i]=temp/y;//余数除以分母,得到一位小数
if(temp==0)
k++;
if(k>=100) //如果除尽100次以上,就认为是有限小数
{
system("cls");
printf("%d/%d不是循环小数为%d.",x,y,x/y);
for(i=0;i<=20;i++)
printf("%d",t[i]);
printf(" ");
exit(0);
}
}
}
int start(int t[])// 找循环体的起始位置
{
int i,j,m=0,n=0,b[1000];
for(i=0,j=N-1000;i<1000;j++,i++)//将a中后1000位放在数组b中
b[i]=t[j];
for(i=0;i
{
if(t[i]==b[m])
{
if(m==0) n=i;
m++;
}
else if(m!=0 && t[i]!=b[m])
m=0;
if(m==999)
break;
}
for(i=n-1,j=N-1001;i>=0;i--,j--)//从a[n-1]与a[N-1001]的位置开始比较,当不相等时的位置即为
//循环体的起始位置
{
if(t[i]!=t[j])
break;
}
return i+1;
}
int find(int t[],int x) //找循环体的结束位置
{
int i,j,k,m;
for(i=x+1,k=x;i
{
if(t[i]==t[k])
{
k++;
m=i-k+x;
}
else
k=x;
}
return m;
}
main()
{
int i,m1,start_n,end,son,mon,a[N];
printf("请输入分子和分母: ");
scanf("%d %d",&son,&mon);
make_num(a,son,mon);
start_n=start(a); //循环体的起始位置
system("cls");
printf(" 循环的起始的小数位为: %d ",start_n+1);
end=find(a,start_n); //循环体的结束位置
if(end-start_n>=1000) //如果结束位置减去起始位置大于1000位,则认为此分数为无限不循环
//理论上没有无限不循环的分数,本人也不大清楚,可能这个if可以不要
{
system("cls");
printf("%d/%d为无限不循环小数为: %d.",son,mon,son/mon);
for(i=0;i<=1000;i++)
printf("%d",a[i]);
printf(" ");
exit(0);
}
printf("%d/%d的无限循环小数如下: %d.",son,mon,son/mon);//输出分数的整数部分和小数点
for(i=0;i
printf("[");
for(i=start_n;i<=end;i++)//输出循环的部分
printf("%d",a[i]);
printf("] 说明:[]中的数字是循环体 ");
}
找无限循环小数的循环体及循环的起始位置,如下:
- 4楼网友:掌灯师
- 2021-03-04 10:13
你如果从这里拷走了代码
1 你是在抄袭,
2 你不是在自己编程
3 这没有一点儿意义
你不觉的很讽刺吗.
1 你是在抄袭,
2 你不是在自己编程
3 这没有一点儿意义
你不觉的很讽刺吗.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯