C语言问题求教,有5个学生,每个学生有3门课的成绩,从键盘输入以下数据(包括学号、姓名、语文,数学
#include
float a_stu[4],a_cour[3];//定义两个全局数组,用来表示学生平均成绩和各科平均成绩
int a[4][3]={78,78,99,90,89,96,77,91,90,92,79,89};
int main()
{
void aver_stu(void);
void aver_cour(void);
void fangcha(void);
aver_stu();
aver_cour();
int i,j,m,p,q;
m=a[0][0];
for(i=0;i<4;i++)
for(j=0;j<3;j++)
if(a[i][j]>m)
{m=a[i][j];
p=i,q=j;
}
printf("分数最高是%d分,该学生是第%d个学生 ,其课程是第%d门
",m,p+1,q+1);
fangcha();
return 0;
}
//
void aver_stu(void)
{ int i,j;
float sum1;
for(i=0;i<4;i++)
{for(j=0,sum1=0;j<3;j++)//每算完一位学生的平均成绩后,要重新使sum=0才能计算下一位,所以在第二个for语句sum值要归0
sum1+=a[i][j];
a_stu[i]=sum1/3;
}
printf("四位学生的平均成绩为:
");
for(i=0;i<4;i++)
printf("%f
",a_stu[i]);
}
//
void aver_cour(void)
{int i,j;
float sum2;
for(i=0;i<3;i++)
{
for(j=0,sum2=0;j<4;j++)
{sum2+=a[j][i];
a_cour[i]=sum2/4;}
}
printf("三门课的平均成绩为:
");
for(i=0;i<3;i++)
printf("%f
",a_cour[i]);
}
//
void fangcha(void)
{float sum3=0,sum4=0,h;
int i;
for(i=0;i<4;i++)
{sum3+=a_stu[i]*a_stu[i];
sum4+=a_stu[i];}
h=sum3/4-(sum4/4)*(sum4/4);
printf("平均分方差为:%f
",h);
}
#include
#define STUDENT 2
typedef struct tagSTU
{
char name[11] ;
char stunum[11] ;
float score1,score2,score3 ;
float total,aver ;
} STU;
void input(STU *stu, int num) //stu为学生数组的首地址,num为数组长度
{
int i ;
printf("请输入%d个学生的基本情况:
",num) ;
printf("姓名 学号 成绩一 成绩二 成绩三
") ;
for(i=0; i<num; i++)
{
scanf("%s%s%f%f%f",&stu[i].name,&stu[i].stunum,&stu[i].score1,
&stu[i].score2,&stu[i].score3) ;
}
}
float average(STU *stu, int num) //stu为学生数组的首地址,num为数组长度,返回总平均成绩
{
int i ;
float avertotal = 0 ;
for(i=0; i<num; i++)
{
stu[i].total = 0 ;
stu[i].total = stu[i].score1+stu[i].score2+stu[i].score3 ;
stu[i].aver = stu[i].total/3 ;
avertotal += stu[i].aver ;
}
return avertotal/num ;
}
void max(STU *stu, int num, STU *stuRev, int *stuRevNum) //stu为学生数组的首地址,num为数组长度
//stuRev表示要接收的数组,stuRevNum表示最终接收的个数,即最高成绩同学的个数(有可能不止一个同学)
{
STU temp[5] ;
float maxtotal = 0 ;
int i ,temp_index=0 ;
for(i=0; i<num; i++)
{
if(stu[i].total>maxtotal)
{
maxtotal = stu[i].total ;
temp[0] = stu[i] ;
temp_index = 0 ;
}
else if(stu[i].total==maxtotal)
{
temp[++temp_index] = stu[i] ;
}
}
for(i=0;i<=temp_index;i++)
{
stuRev[i] = temp[i] ;
}
*stuRevNum = temp_index+1 ;
}
void main()
{
STU stu[STUDENT] ;
STU stumax[STUDENT] ;
int stumax_num, i ;
float avertotal ;
input(stu,STUDENT) ;
avertotal = average(stu,STUDENT) ;
max(stu,STUDENT,stumax,&stumax_num) ;
//输出结果
printf("3门课总平均成绩: %4.2f
",avertotal) ;
printf("最高分同学有%d个:
",stumax_num) ;
printf("姓名 学号 成绩一 成绩二 成绩三
") ;
for(i=0; i<stumax_num; i++)
{
printf("%4s %4s %-4.2f %-4.2f %-4.2f
",stumax[i].name,stumax[i].stunum,
stumax[i].score1,stumax[i].score2,stumax[i].score3) ;
}
}
#include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 100
typedef struct student{
int number;
char name[MAXLENGTH];
double chinese, math, english;
struct student *next;
}student;
int main()
{
student *head, *tail, *node, *loc, *prev;
FILE *fout, *fin;
int i;
head = tail = NULL;
for (i = 0; i < 5; i++) //输入信息,建立链表
{
node = malloc(sizeof(student));
node->next = NULL;
printf("输入学号、姓名、语文、数学、英语成绩:
");
scanf("%d %s %lf %lf %lf", &node->number, node->name,
&node->chinese, &node->math, &node->english);
if (head == NULL)
head = tail = node;
else //将新结点接到链表尾部
{
tail->next = node;
tail = node;
}
}
fout = fopen("stu.dat", "wb");
node = head;
while (node != NULL)
{
fwrite(node, sizeof(student), 1, fout);
node = node->next;
}
fclose(fout);
node = malloc(sizeof(student));
printf("输入要添加的学生学号、姓名、语文、数学、英语成绩:");
scanf("%d %s %lf %lf %lf", &node->number, node->name,
&node->chinese, &node->math, &node->english);
loc = head;
prev = NULL; //要插入位置的前趋
while (loc != NULL && loc->number < node->number) //寻找插入位置
{
prev = loc;
loc = loc->next;
}
if (prev == NULL) //插入到链表头
{
node->next = head;
head = node;
}
else
{
node->next = loc;
prev->next = node;
}
fout = fopen("stu1.dat", "wb"); //保存到stu1.dat
node = head;
while (node != NULL)
{
fwrite(node, sizeof(student), 1, fout);
node = node->next;
}
fclose(fout);
node = malloc(sizeof(student));
fin = fopen("stu1.dat", "rb");
fread(node, sizeof(student), 1, fin);
printf("学号:%d 姓名:%s 语文:%lf 数学:%lf 英语:%lf
",
node->number, node->name, node->chinese, node->math, node->english);
while (node->next != NULL)
{
fread(node, sizeof(student), 1, fin);
printf("学号:%d 姓名:%s 语文:%lf 数学:%lf 英语:%lf
",
node->number, node->name, node->chinese, node->math, node->english);
}
fclose(fin);
free(node); //回收内存
while (head != NULL)
{
node = head->next;
free(head);
head = node;
}
return 0;
}
问题求教(C语言)[附有详细问题]
1 可以改变域宽,如用%.nf控制浮点的显示域宽,小数点后的n代表n位域宽 2 float和double是小数点后8位。3 大于时可以舍入数据, 小于就改为有更大精度的类型,没有可用类型时可以自己设计数据结构。4 float 是 6 – 7, double是15 – 16.5 最高位为1代表负,最高位为0代表正。6 截断。
几道C语言问题求教 望高手解答
1、#include”stdio.h”main(){ int x=-10,y=5,z=0;if(x=y+z)printf(“***\\n”);\/\/此处应为x==y+z;混淆了“=”和“==”,“=”是赋值运算符,“==”是等于号,else printf(“$$$”\\n);} 2、(x+y)+z-1&&y+z\/2是逻辑运算,不为0,就为1,3、由于“==”的优先...
c语言问题,新手求教
include<stdio.h> void main(){ int a[5]={12,5,7,8,14},i,k;for(i=0;i<2;i++){ k=a[i];a[i]=a[5-i-1];\/\/数组大小为5,下标是从0开始,到4结束,所以你的程序下标超了 a[5-i-1]=k;} for(i=0;i<5;i++)\/\/输出5个数才对 printf("%d ",a[i]);printf("\\...
一个关于C语言的问题,求教!!
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“...
C语言问题,求教大神……~~~(>_<)~~~
这么大的题目。5分。实在有点少!
C语言的各种小问题求教
解决方法很简单,在scanf里的%c前面加个空格就行了,这样他在下次读取的时候就会自动跳过所有空白字符(空格,回车,制表符)。代码如下:include <stdio.h>int main(void){ char choose; do { printf("输入 Y 或 N:"); scanf(" %c", &choose); printf("Chose: %c\\n"...
C语言问题,求教~~~ 1.注释可以出现在语句的前面吗? 2.“++5与6等价...
1.注释位置问题 比如:int main(){ \/\/输出一行字 printf("你好");return 0;} “\/\/输出一行字”注释就出现在printf("你好");前面了,虽然是在上一行。但是单行注释不能出现在有用的语句同一行的前面。比如 \/\/输出一行字 printf("你好");就不正确了。多行注释可以出现在任意位置,但要注意\/**...
我是新手,求教一些C语言问题,有解析多追加分
你的大小写有问题,C语言区分大写小写。K1,k1 不是同一变量。incldue <stdio.h> void main(){ int k1,k2,k3,k4,x;k1=1;k2=2;k3=3;x=15;if (!k1)x--;else if(k2) x=4;else x=3;printf("%d\\n",x);} 答案 B:4 第二题:p[0] 是 a[5]=6;p[-1]是5,p[-2]是4...
求教一个C语言问题
让我们来看看在处理的主要功能:,PA =环节\/ \/ PA PA值* 2.5 PB = &B; \/ \/ PB点到b的地址指向的地址, * PB值9.0 调用子(BA,PA,PA)BA = 9.0-2.5 = 6.5,每年点的地址,PB b点地址 无效子(浮浮* Y,X,浮法* Z):= 6.5 浮法* Y:y点到由pa指向的地址,也就...
求教C语言中表达式的问题,求解!!!
在c语言中真是1,假是0。任何比较<=,>,!=等的结果只可能是真或假,亦即1或0。1 对于a<=x,不论a和x的值是多少,结果只可能是0或1,而0或1都是小于b(100)的。所以,a<=x<=b的值是1(真)。2 在c中5>2>7>8是允许的。与1同理,5>2>7的结果肯定是小于8的。所以,5>2>7...
政唯盐酸: #include "stdafx.h" #include <stdio.h>struct student {int num;char name[20];float sorce[3]; }stu[5];//10个选手int main(int argc, char* argv[]) {for(int i=0;i<5;i++){printf("请输入第%d个人的学号,姓名,三门课分数\n",i+1);scanf("%d%...
秀城区19594344555: c语言编程 有五个学生,每个学生有语文,英语,数学三门课程的成绩,从主函数中输 - ?
政唯盐酸: #include <stdio.h> double a[11][5]={0}; int i,j; void scanfa(double b[11][5]) {printf("请依次输入每位同学的语文、数学、英语的成绩:\n");for(i=0;i<10;i++)for(j=0;j<3;j++)scanf("%lf",&b[i][j]); } void SumAvgStu(double b[11][5])//计算输出每...
秀城区19594344555: 成绩的编程:如何用C语言编程这个题目:有5个学生,每个学社有四门课程,将有不及格课程的学生成绩输出 - ?
政唯盐酸: 建立一个两维数组,学生为第一个下标,课程为第二个下标,成绩做数组项的值,然后遍历数组,如果小于60就输出成绩就可以了 或者建立五个一维数组,课程做下标,成绩做值,然后遍历输出就可以了
秀城区19594344555: 用C语言编写程序,完成以下功能: (1) 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩 - ?
政唯盐酸: #include <stdio.h>#define STUDENT 2 typedef struct tagSTU { char name[11] ; char stunum[11] ; float score1,score2,score3 ; float total,aver ; } STU; void input(STU *stu, int num) //stu为学生数组的首地址,num为数组长度 { int i ; printf("请输入%...
秀城区19594344555: C语言编程!用姓名,学号,数学成绩和语文成绩描述一个学生的情况.编写程序输入5个人的情况,求每个学 - ?
政唯盐酸: 看代码: #include typedef struct { char name[20]; char id[20]; float math_score; float lang_score; }student; #define N 5 int main(int argc, char** argv) { int i; student stu[N]; for (i = 0; i < N; ++i) { printf ("输入第 %d 个学生的信息(顺序为姓名,学号...
秀城区19594344555: 有5个学生,每个学生的数据包括学号、姓名、三门课的成绩、平均分. - ?
政唯盐酸: //引入必要的头文件 #include<stdio.h> #include<stdlib.h> int main() { int count = 5; char num[count][20]; char name[count][20]; double chinese[count]; double math[count]; double english[count]; double avg[count]; printf("请输入%d名学生的成绩!...
秀城区19594344555: c语言.编写程序:1、一个班有5个学生,输入每个学生的学号,姓名,成绩,输出该班的总分,平均分和不及格学生名单. - ?
政唯盐酸: /*2014/12/11 一个班有5个学生, 输入每个学生的学号,姓名,成绩, 输出该班的总分,平均分和不及格学生名单*/ #define N 5 //N为学生的人数,注意不加分号!! #include<stdio.h> struct Student{ int num; char name[20];//姓名可能是多个字...