关于c语言的一个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于c语言的一个问题相关的知识,希望对你有一定的参考价值。

有N个学生,每个学生的数据包括学号、姓名、性别,年龄,班级、C语言成绩。从键盘输入N 个学生数据,要求打印出最高分的学生信息以及不及格学生的信息要求:
(1)定义学生结构体。
(2)用一个函数实现N 个学生数据的输入;
(3) 用一个函数实现N个学生数据的输出;
(4) 用一个函数完成返回C语言成绩最高及最低人的信息。
(5) 在主函数中显示(4)的信息。
(6) 打印优秀及不及格同学的信息
百度的答案我不要,我要自己做的!!!!!!

Visual C++ 平台运行调式:

#include <stdio.h>

#define SIZE 10 //学生数
#define FAILSCORE 60 //低于60分为不及格
#define FINESCORE 80 //高于或等于80分为优秀

void get_studdata( void ); //输入所有的学生数据
void display_studdata( void ); //输出所有的学生数据
void find_maxlowstscore( int *maxram, int *lowram ); //找到最高和最低分的学生
void display_maxlowscore( int , int ); //打印最高和最低分的学生信息(有可能同时有几个最高或最低分)
void sort_studdata( int n ); //从低分到高分排序
void print_finefailstuddata( void ); //打印优秀和不及格学生的信息

struct student

int numb;
char name[20];
char sex;
int age;
int team;
float score;
stud[SIZE];

int main( void )

int max_count, lowest_count;
int *maxscore_count, *lowestscore_count; //最高分和最低分

maxscore_count = &max_count;
lowestscore_count = &lowest_count;
get_studdata(); //输入所有的学生数据
printf( "\n下面输出各个学生的数据:\n" );
display_studdata(); //输出所有的学生数据
sort_studdata( SIZE ); //从低分到高分排序
//display_studdata(); //输出所有的学生数据
find_maxlowstscore( maxscore_count, lowestscore_count ); //找到最高和最低分的学生
display_maxlowscore( max_count, lowest_count); //打印最高和最低分两个学生的信息
print_finefailstuddata(); //打印优秀和不及格学生的信息
return 0;

void get_studdata( void )

int i;
printf( "请分别输入%d个学生的数据,包括学号、姓名、性别、年龄、班级和C语言成绩:\n", SIZE );
for( i = 0; i < SIZE; i++ )

printf( "\n第%d个学生 学号 姓名 性别 年龄 班级 成绩:\n", i+1 );
printf( "--------- ---- ---- ---- ---- ---- ----\n" );
scanf( "%d %s %c %d %d %f", &stud[i].numb, &stud[i].name, &stud[i].sex, &stud[i].age, &stud[i].team, &stud[i].score );



void display_studdata( void )

int i;
printf( "\n-------------------------------------------------------------------------\n" );
for( i = 0; i < SIZE; i++ )

printf( "学号:%-8d 姓名:%-8s 性别:%-3c 年龄:%-3d 班级:%d %2c C语言成绩为%.2f分\n", stud[i].numb, stud[i].name, stud[i].sex, stud[i].age, stud[i].team, ' ', stud[i].score );


void find_maxlowstscore( int *maxram, int *lowram )

int i;
//从最小的分数开始查找,如果有相同的分数,继续往后查找直到高于当前的分数为止
for( i = 0; stud[i].score == stud[i+1].score; i++ )

;

*lowram = i;
//从最大的分数开始查找,如果有相同的分数,继续往前查找直到低于当前的分数为止
for( i = SIZE - 1; stud[i].score == stud[i-1].score; i-- )

;

*maxram = i;

void display_maxlowscore( int r_fine, int r_low )

int i;
printf( "\n-------------------------------------------------------------------------\n" );
printf( "打印最低分的学生信息:\n" );
for( i = 0; i <= r_low; i++ )

printf( "学号:%-8d 姓名:%-10s 性别:%-3c 年龄:%-3d 班级:%d %2c C语言成绩为%.2f分\n", stud[i].numb, stud[i].name, stud[i].sex, stud[i].age, stud[i].team, ' ', stud[i].score );

printf( "\n-------------------------------------------------------------------------\n" );
printf( "打印最高分的学生信息:\n" );
for( i = r_fine; i < SIZE; i++ )

printf( "学号:%-8d 姓名:%-10s 性别:%-3c 年龄:%-3d 班级:%d %2c C语言成绩为%.2f分\n", stud[i].numb, stud[i].name, stud[i].sex, stud[i].age, stud[i].team, ' ', stud[i].score );



void sort_studdata( int n ) //冒泡法排序

int i, j;
struct student temp;

for( j = 0; j < n - 1; j++ ) //趟数

for( i = 0; i < ( n - 1) - j; i++ ) //次数

if( stud[i].score > stud[i+1].score )

temp = stud[i];
stud[i] = stud[i+1];
stud[i+1] = temp;





void print_finefailstuddata( void )

int i, f_fail, f_fine;
f_fail = 0;
f_fine = 0;
printf( "\n-------------------------------------------------------------------------\n" );
printf( "打印不及格的学生信息:\n" );
for( i = 0; stud[i].score < FAILSCORE; i++ )

f_fail = 1; //已经有不及格的学生
printf( "学号:%-8d 姓名:%-10s 性别:%-3c 年龄:%-3d 班级:%d %2c C语言成绩为%.2f分\n\n", stud[i].numb, stud[i].name, stud[i].sex, stud[i].age, stud[i].team, ' ', stud[i].score );

if( f_fail == 0 )

printf( "没有不及格的学生." );

printf( "\n-------------------------------------------------------------------------\n" );
printf( "打印优秀的学生信息:\n" );
for( i = 0; i < SIZE ; i++ )

if( stud[i].score >= FINESCORE )

f_fine = 1; //已经有优秀的学生
printf( "学号:%-8d 姓名:%-10s 性别:%-3c 年龄:%-3d 班级:%d %2c C语言成绩为%.2f分\n\n", stud[i].numb, stud[i].name, stud[i].sex, stud[i].age, stud[i].team, ' ', stud[i].score );


if( f_fine == 0 )

printf( "没有成绩优秀的学生." );



//你可以用下面两种情况运行:
学号 姓名 性别 年龄 班级 分数
1)
10001 JiXi M 21 202 79
10002 HeGi M 21 202 68
10003 LiBo M 22 202 91
10004 WuZe F 21 202 84
10005 WuLi F 23 202 72
10006 HuangKai M 23 202 65
10007 YangJie M 21 202 64
10008 YiCun F 23 202 64
10009 LiMi F 23 202 91
10010 ZhouHun M 21 202 84
2)
10001 JiXi M 21 202 79
10002 HeGi M 21 202 58
10003 LiBo M 22 202 41
10004 WuZe F 21 202 84
10005 WuLi F 23 202 72
10006 HuangKai M 23 202 65
10007 YangJie M 21 202 64
10008 YiCun F 23 202 64
10009 LiMi F 23 202 91
10010 ZhouHun M 21 202 84
参考技术A 要得明白函数的定义.

[返回值类型] [函数名] [(变量列表)]

//函数的实现

--------------------------------
至于要不要返回值,就是返回值类型是什么了.
是void的话,返回空类型,也就是不用return返回
void myfun1(int a, int &b)

b = a*a+2*a;
//不返回

int的话, 返回int类型.

int myfun2(int a)

int b = a*a+2*a;
return b;//返回int类型的值b


其它double, float等等, 类推.
-----------------------------
到于返回到拿.
看下面的例子,

#include <iostream>
using namespace std;
int myfun(int a)

int b = a*a+2*a;
return b;//返回int类型的值b

void main()

int a = 0;
int b = 0;
cout<<"plear input a:";
cin>>a;
cout<<"b="<<b;
b = myfun(a); //myfun(int)返回的一个是int值,记录在b中.
cout<<"b=myfun(a)="<<b<<endl;



2007年8月27日1时9分
参考技术B 首先你要考虑 你这些数学的数据怎么保存 是用数组还是链表

我就简单点 用个数组吧

typedef struct tagStuInfo

char m_szName[32];
int m_nScore; //成绩
... //其他略 自己写
;STUINFO

STUINFO g_StuInfo[100] = 0;
void InsertInfo()

int i = 1;
char cExit = '\0';
while(TRUE)

printf("输入第%d个学生的姓名:", i);
scanf("%31s", g_StuInfo.m_szName);
....

printf("是否继续输入?? 输入Y键继续输入 其他则返回\r\n");
scanf("%c", &cExit);
if(cExit != 'y' && cExit != 'Y')
break;



其他就是统计信息了 反正学生信息都在g_StuInfo里面 你可以把所有的分数加起来

然后除总人数 就得到平均了本回答被提问者和网友采纳
参考技术C 分给的太少了,划不来 参考技术D 比较繁琐

关于C语言数据类型转换的一个小问题,很简单哦!!

chara;intb;floatc;doubled; 则表达式a*b+c-d值的类型是什么? 请解释一下原理啊,谢谢

参考技术A 数据类型转换有两种:
a强制类型转换,通过函数实现,如
charc='a';inti;i=int(a);//强制转换,但不会改变a本身的类型。
b自动类型转换,通过编译器自动实现,
不同类型的数据在一个表达式中会自动转换为最长的类型:
如你定义的chara;intb;floatc;doubled;
计算a*b+c-d时,按计算顺序说明类型转换:
1a*b//char类型的a转换为int类型的值,再和int类型的b相乘
2a*b+c//int类型的a*b转换为float类型值,再和float类型的c相加
3a*b+c-d//float类型的(a*b+c)转换为double类型的值,再和double类型的d相减
不考虑过程,最终表达式的值为最长类型(这里是double)的值

以上是关于关于c语言的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

关于C语言指针的问题

关于C语言里面指针赋值的类型问题,还有一些关于指针的问题

关于C语言关闭窗口的问题

关于C语言的位运算的问题

关于C语言的语法中类型转换的一个问题。求教C语言高手。

c语言一个关于printnum的问题