急急急急!c语言编程题、谢谢各位大侠啦、、

编写一个程序、三个要求
1、编写函数把30名学生的学号、姓名、四项成绩及平均成绩放在一个结构体中、学生的学号姓名和思四项成绩由键盘输入、然后计算出平均成绩放在结构体对应的区域中。
2、编写函数输出30名学生的记录。
3、main函数调用上述两个函数、实现全部程序功能、

#include <stdio.h>
#include <stdlib.h>
//#include <memory.h>

#define NO_LENGTH 10
#define NAME_LENGTH 20
#define NO_OF_STUDENTS 30
struct StuSco
{
char m_stuNo[NO_LENGTH + 1]; //学号
char m_name[NAME_LENGTH + 1]; //姓名
double m_socre1; //成绩1
double m_socre2; //成绩2
double m_socre3; //成绩3
double m_socre4; //成绩4
double m_perSocre; //平均成绩
};

StuSco * InPutStuInfo()
{
StuSco *pNewStructs = (StuSco *)malloc(sizeof(StuSco) * NO_OF_STUDENTS);
// memset(pNewStructs, 0, sizeof(StuSco) * NO_OF_STUDENTS);
for (int i = 0; i != NO_OF_STUDENTS; ++i)
{
printf("请依次输入第 %d 个学生的学号、姓名和四项成绩(以空格分隔,回车结束):\n", i + 1);
StuSco *p = pNewStructs + i;
scanf("%s ",p->m_stuNo);
scanf("%s ",p->m_name);
double k;
scanf("%lf %lf %lf %lf", &p->m_socre1, &p->m_socre2, &p->m_socre3, &p->m_socre4);
p->m_perSocre = (p->m_socre1 + p->m_socre2 + p->m_socre3 + p->m_socre4)/4;
}
return pNewStructs;
}

void OutPutInfo(StuSco * pInfoStructs)
{
for (int i = 0; i != NO_OF_STUDENTS; ++i)
{
StuSco *p = pInfoStructs + i;
printf("第 %d 个学生的学号:%s 姓名:%s \n四项成绩:%.2lf,%.2lf,%.2lf,%.2lf \n平均成绩:%.2lf\n",\
i+1, p->m_stuNo, p->m_name, p->m_socre1, p->m_socre2, p->m_socre3, p->m_socre4, p->m_perSocre);
}
}

void ReleaseStuInfo(StuSco * pInfoStructs)
{
free(pInfoStructs);
}

int main()
{
StuSco * pInfoStructs = InPutStuInfo();
OutPutInfo(pInfoStructs);
ReleaseStuInfo(pInfoStructs);
return 0;
}
参考一下,我运行没有问题。^_^
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-20
// 程序基本能满足要求,格式上可能需要你自己调整一下, 希望能帮到你
#include <stdio.h>
#define STUDENT_NUM 30 //最大学生数量

// 学生记录结构体
typedef struct _tagMark
{
int ID;
char name[20];
int chengJi[4];
float average;
}Mark;

Mark studentTable[STUDENT_NUM];// 存放学生记录的全局变量

// 读入学生的记录
bool readData()
{
bool result = true;
int index = 0;
printf("Please input the record(ID name Chinese English Maths Computer):\n");
while (index < STUDENT_NUM && scanf("%d %s %d %d %d %d", &studentTable[index].ID, &studentTable[index].name, &(studentTable[index].chengJi[0]), &(studentTable[index].chengJi[1]), &(studentTable[index].chengJi[2]), &(studentTable[index].chengJi[3])))
{
studentTable[index].average = ((studentTable[index].chengJi[0] + studentTable[index].chengJi[0] + studentTable[index].chengJi[0] + studentTable[index].chengJi[0])) / 4;
index++;
}
return result;
}

// 打印学生的记录
void printData()
{
printf("ID name Chinese English Maths Computer Average\n");
for (int index = 0;index < STUDENT_NUM; ++index)
{
printf("%d %s %d %d %d %d %.1f\n", studentTable[index].ID, studentTable[index].name, (studentTable[index].chengJi[0]), (studentTable[index].chengJi[1]), (studentTable[index].chengJi[2]), (studentTable[index].chengJi[3]), studentTable[index].average);
}
}

int main()
{
if (readData())
{
printData();
}

// 等待用户输入结束程序
getchar();
getchar();
return 0;
}
第2个回答  2010-12-20
#include <stdio.h>
#define N 3 //学生人数,自己改

struct stu
{
int no;
char name[12];
float scores[4];
float average;
};
stu stus[N]={0};

int input();
int scan();
int main()
{
printf("输入信息记录数:%d\n",input());
printf("总共信息记录数:%d\n",scan());

fflush(stdin);
getchar();
return 0;
}

int input()
{
int i;
printf("请输入学生信息:\n");
printf("请依次输入学号 姓名 四项成绩:\n");
for (i=0;i<N;i++)
{
printf(" record%d ",i+1);
scanf("%d%s",&stus[i].no,stus[i].name);
for (int j=0;j<4;j++)
{
scanf("%f",stus[i].scores+j);
stus[i].average+=stus[i].scores[j];
}
stus[i].average/=4;
}

return i;
}
int scan()
{
int i;
printf("学号\t姓名\t四项成绩\t\t平均成绩\n");
for (i=0;i<N;i++)
{
printf("%d\t%s\t",stus[i].no,stus[i].name);
for (int j=0;j<4;j++)
{
printf("%-5.1f",stus[i].scores[j]);
}
printf("\t%.1f",stus[i].average);
printf("\n");
}

return i;
}
第3个回答  2010-12-20
和一楼的大致一样 只是我用了动态数量输入而已
#include "stdafx.h"

struct student
{
int nId;
char szName[10];
float fLesson[4];
float fAverage;
};

bool inputRecord(struct student stu[],int nCount)
{
for (int i=0; i<nCount; i++)
{
printf("please input NO.%d's id :",i+1);
scanf("%d",&stu[i].nId);

printf("please input NO.%d's name :",i+1);
scanf("%s",stu[i].szName);

printf("please input NO.%d's item1 :",i+1);
scanf("%f",&stu[i].fLesson[0]);

printf("please input NO.%d's item2 :",i+1);
scanf("%f",&stu[i].fLesson[1]);

printf("please input NO.%d's item3 :",i+1);
scanf("%f",&stu[i].fLesson[2]);

printf("please input NO.%d's item4 :",i+1);
scanf("%f",&stu[i].fLesson[3]);

float fSum = 0.00;
for (int j=0; j<4; j++)
{
fSum += stu[i].fLesson[j];
}
stu[i].fAverage = fSum/4.0f;

printf("---------------------------------\n");
}

return true;
}

void printRecord(struct student stu[],int nCount)
{
printf("==>\t学号\t姓名\t项一\t项二\t项三\t项四\t平均分\n");

for (int i=0; i<nCount; i++)
{
printf("%2d\t%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",i+1,
stu[i].nId,stu[i].szName,stu[i].fLesson[0],stu[i].fLesson[1],
stu[i].fLesson[2],stu[i].fLesson[3],stu[i].fAverage);
}
}

int main(void)
{
int nCount = 0;
printf("please input record number :");
scanf("%d",&nCount);

struct student *pstu = NULL;
pstu =(struct student *) malloc(sizeof(student)*nCount);
memset(pstu,0,sizeof(student));

inputRecord(pstu,nCount);
printRecord(pstu,nCount);

free(pstu);

return 0;
}
第4个回答  2010-12-20
#include <stdio.h>

//添加一个求阶乘的函数(递归)
double myJC(double n)
{
if ( n <= 1 )
{
return 1;
}
else
{
return n * myJC(n-1);
}
}

//用double可以一定程度上防止溢出.
double fun(int n)
{
double rtv = 0.0;
for ( int i = n ; i >= 1 ; i-- )
{
rtv += myJC(i);
}
return rtv;
}

int main(void)
{
printf("%.0lf",fun(20));

getchar();
return 0;
}

C语言 谢谢各位大侠了!!!
D char s[]中不能使用*++s或*s++,因为s是数组名

会c语言的来,麻烦各位大侠了。我怎么做都不对~~
(1)用于产生三位数中不包含0且是某个整数平方的三位数,且满足三位数的各个数字不重复。(片断)……int i,j,m,a[30],x,y,z;j=0;for(i=10,i<32,i++){m=i*i; x=m%10; y=m%100; z=m%1000;if(x!=y)&&(x!=z)&&(y!=z)&&(x*y*z!=0) \/*三位数的各个数字不为0...

c语言编程,输入一个负整数,要求反序输出,注意是负数,各位大侠们,帮帮忙...
void main(){ long a,b,r;scanf("%ld",&a);b=0;do{ r=a%10;a=a\/10;b=b*10+r;}while(a);printf("%ld",b);} 呵呵,正负数没有限制的。输入一个数都可以反序的

C语言中y=(b=2,3*2)怎么理解?谢谢各位大侠的帮助啊
1.大体来看,这个表达式分两层。最外层的赋值表达式以及括号内的逗号表达式。2.赋值表达式从右往左进行,同时括号的优先级高于赋值符号 = ,因此先计算括号内的逗号表达式。3.在C的所有操作符中,逗号操作符优先级最低,而逗号操作符又是双目操作符,结合性从左往右。因此先执行逗号左侧的赋值表达式b =...

各位大侠小弟遇到一题C语言小难题:程序已编译通过(用二进制方式读写文件...
原因很简单,就是因为你错误地使用了记事本之类的程序(注意:记事本只能正常显示纯文本内容的文件!!!)来打开这个二进制文件!要想在记事本得到你所希望的所谓无“乱码”的显示结果的话,也很简单,只需将程序中的写操作代码修改如下:if 0 if(fwrite(&Student[i],sizeof(struct Student_...

新手求助,C语言编程一元二次方程
下面这个程序是搜索并修改的,保证能用,可以解y=ax^2+bx+c之类的一元二次方程。你运行的时候输入a,b,c的值就可以了。祝你顺利!你的题目还有点问题,上面是x+1,下面是下x^2+x+1那是什么呢?有问题再补充吧。include<stdio.h> include<stdlib.h> include<math.h> main(){ double a,b...

各位大侠们 求一个简单的C语言编程 调优运算的 俩个变量 求最优值 跪...
求什么的最优值啊?这个是求大小的 include<stdio.h> void main(){ int a,b;printf("请输入两个数(用,隔开):\\n");scanf("%d,%d",&a,&b);if(a>b)printf("%d较大\\n",a);else if(a==b)printf("两个数相等\\n");else printf("%d较大\\n",b);} ...

一个C语言求整数的开方的问题!急求高手解答!
a=10000000000 -- 整型数 数值超界太多。要用 double 型。double a;

各位C语言的大侠们,小弟又遇一道C语言小问题,这个函数是输出学生不及...
float *search(float(*pointer)[4]){ int i=0;float *pt;pt=NULL;for(i=0;i<4;i++)if(*(pointer+i)<60) pt=*pointer; \/\/这里的*(pointer+i)改为:*(*(pointer)+i)return (pt);}

用C语言编程,便一个计算器 题为3+5=8
main(){ int a,b,c;a=3;b=5;c=a+b;printf("%d",c);} 已经通过编译了.

相似回答