c语言程序(在线等)
发布网友
发布时间:2022-05-27 13:22
我来回答
共3个回答
热心网友
时间:2023-10-25 04:46
scanf("%f",&a[j]);
改为
scanf("%lf",&a[j]);
double输入不是%f,虽然输出可以用%f
另外你排序好像也有问题,交换的函数也不对
#include <stdio.h>
void sort(double *p);
double average(double *q);
void exchange1(double *a,double *b);
void exchange2(int *a,int *b);
int main()
{
double a[5];
double b[10];
int c[10];
for(int i=0;i<10;i++) {
printf("请输入第%d个学生的成绩:",i+1);
for(int j=0;j<5;j++)
scanf("%lf",&a[j]);
sort(a);
b[i]=average(a);
}
for(int q=0;q<10;q++)
c[q]=q+1;
for(int m=0;m<9;m++)
for(int n=0;n<9-m;n++)
if(b[n]>b[n+1]) {exchange2(&c[n],&c[n+1]);exchange1(&b[n],&b[n+1]);}
printf("一等奖是:%d:%f\n",c[9],b[9]);
printf("二等奖是:%d:%f\n%d:%f\n",c[8],b[8],c[7],b[7]);
printf("三等奖是:%d:%f\n%d:%f\n%d:%f\n%d:%f\n%d:%f\n%d:%f\n",c[1],b[1],c[2],b[2],c[3],b[3],c[4],b[4],c[5],b[5],c[6],b[6]);
return 0;
}
void exchange2(int *a,int *b)
{
int t;
t=*a;*a=*b;*b=t;
}
void exchange1(double *a,double *b)
{
double t;
t=*a;*a=*b;*b=t;
}
void sort(double *p)
{
for(int i=0;i<4;i++)
for(int j=0;j<4-i;j++)
if(p[j]>p[j+1])
exchange1(&p[j],&p[j+1]);
exchange1(&p[0],&p[3]);
}
double average(double *q)
{
double m=0;
for(int i=0;i<3;i++)
m+=q[i];
return(m/3);
}
热心网友
时间:2023-10-25 04:47
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
void sort(double *p);
double average(double *q);
void exchange1(double &a,double &b);
void exchange2(int &a,int &b);
int main(int argc, char* argv[])
{
double a[5];
double b[10];
int c[10];
for(int i=0;i<10;i++)
{
printf("请输入第%d个学生的成绩:",i+1);
for(int j=0;j<5;j++)
{
scanf("%lf",&a[j]);
}
sort(a);
b[i]=average(a);
}
for(int q=0;q<10;q++)
c[q]=q+1;
for(int m=0;m<9;m++)
for(int n=0;n<9-m;n++)
if(b[n]<b[n+1])//只是把大的放前面
{exchange2(c[n],c[n+1]);exchange1(b[n],b[n+1]);}
printf("一等奖是:%d:%lf\n",c[0],b[0]);
printf("二等奖是:%d:%lf\n%d:%lf\n",c[1],b[1],c[2],b[2]);
printf("三等奖是:%d:%lf\n%d:%lf\n%d:%lf\n%d:%lf\n%d:%lf\n%d:%lf\n",c[3],b[3],c[4],b[4],c[5],b[5],c[6],b[6],c[7],b[7],c[8],b[8]);
return 0;
}
void exchange2(int &a,int &b)
{
int t;
t=a;a=b;b=t;
}
void exchange1(double &a,double &b)
{
double t;
t=a;a=b;b=t;
}
void sort(double *p)
{
for(int i=0;i<4;i++)
for(int j=0;j<4-i;j++)
if(p[j]>p[j+1])
exchange1(p[j],p[j+1]);
//exchange1(p[0],p[3]);
}
double average(double *q)
{
double m=0;
for(int i=1;i<4;i++) //已经排好序了,就算中间三个就够了
m+=q[i];
return(m/3);
}
热心网友
时间:2023-10-25 04:47
主要问题是exchange函数,定义时参数用的是地址,但调用时形参却不是地址。
比如这句
if(b[n]>b[n+1]) {exchange2(c[n],c[n+1]);exchange1(b[n],b[n+1]);}
最好改成如下:
void exchange2(int *a,int *b)
{
int t;
t=*a;*a=*b;*b=t;
}
void exchange1(double *a,double *b)
{
double t;
t=*a;*a=*b;*b=t;
}
之后每次调用时,形参变量前加上&
比如:
if(b[n]>b[n+1]) {exchange2(&c[n],&c[n+1]);exchange1(&b[n],&b[n+1]);}