程序设计题目(用C语言)

1 .有五个学生,每个学生的数据包括学号,姓名,三门课的成绩,从键盘输入五个学生的数据,要求打印出每个学生的平均成绩,以及最高分的

学生的数据 ( 包括学号,姓名,三门课的成绩,平均分数 ) 。

实验步骤与要求:

用一个函数 input 输入五个学生的数据;用一个函数 average 求总平均分;用函数 max 找出最高分学生数据,总平均分和最高分的学生的数据都

在主函数中输出。

2 .在屏幕上模拟显示一个数字式时钟。

定义一个时钟结构体类型:

struct clock{

int hour;

int minute;

int second;

};

typedef struct clock CLOCK;

然后,将下列用全局变量编写的时钟模拟显示程序改成用 CLOCK 结构体变量类型重新编写。

3 .下表为学生学习情况,编写一个程序,用冒泡法对此学生学习情况表按成绩( grade )从高到低进行排序。

学号 (num)
姓名 (name)
性别 (sex)
年龄 (age)
成绩 (grade)

101
Wangyi
M
16
82.7

102
Zhaoyi
M
17
99.0

103
Liming
M
15
85.6

104
Gaoben
F
16
77.8

105
Chenping
F
17
67.4

106
Zhangjing
F
16
99.5

107
Handong
M
15
82.7

108
Mengguang
M
16
60.5

109
Xucong
F
17
94.5

110
Chengcheng
F
16
96.7

对程序要求如下:

(1) 定义结构体类型为:

struct 结构体名

{

int num;

char name[15];

char sex;

int age;

double grade;

}

(2) 在程序中用一个结构体指针数组,其中每一个指针元素指向结构体类型数组的各元素。

(3) 要求先输出排序前的情况,再输出排序后的结果(表的框线可以不要)。

方法提示:

冒泡排序过程为:从前到后扫描结构体数组中各元素,比较相邻两元素中成绩( grade )的大小,若发现逆序就交换,最后使最小者换到最后。

第二轮同样可以把剩余元素中成绩最小者换到后面,剩余元素排序原理相同。

实际排序过程中,并不交换结构体数组的各元素,由于用指针指向各元素,所以只是交换指针数组中的各指针。因此,排序的最后结果,其结构

体数组中的各元素的存贮顺序关系并没有改变,而只是按结构体指针数组中各指针元素顺序指向的结构体数组元素关于成绩( grade )是有序的。

四道题目,挺急的 希望各位大虾帮忙 谢谢!!! (全对的话补100分)

(用C语言编程)

#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct stu //一个学生的档案
{
char num[20];//学号
char name[20];//姓名
float score[5]; //成绩,前三门是单科成绩,第四个是总分,最后一个是平均分
}student;
student s[10]; //所有学生的信息

void main()
{
void init();//初始化函数申明
void sort();//排序函数申明
void print();//输出函数申明
init();
sort();
print();
}
void init()//初始化所有学生的档案
{
int i,j;
for(i=0;i<10;i++) //逐个键入学生的信息
{
printf("请输入一学生的学号:");
scanf("%s",s[i].num);
printf("请输入该学生的姓名:");
scanf("%s",s[i].name);
printf("请输入该学生的三门成绩:");
s[i].score[3]=0;
for(j=0;j<3;j++)
{
scanf("%f",&s[i].score[j]);
s[i].score[3]+=s[i].score[j]; //求总分
}
s[i].score[4]=s[i].score[3]/3; //求平均分
}
printf("学生档案建立成功!\n");
}
void sort()
{
int i,j,k;
char str[20];
float temp;
for(i=0;i<9;i++) //主循环,进行排名
for(j=i+1;j<10;j++)
if(s[j].score[3]>s[i].score[3])
{
strcpy(str,s[i].num); //交换学号
strcpy(s[i].num,s[j].num);
strcpy(s[j].num,str);
strcpy(str,s[i].name); //交换姓名
strcpy(s[i].name,s[j].name);
strcpy(s[j].name,str);
for(k=0;k<5;k++) //交换成绩
{
temp=s[i].score[k];
s[i].score[k]=s[j].score[k];
s[j].score[k]=temp;
}
}
}
void print()
{
int i;
for(i=0;i<10;i++)
printf("%s %s %.1f %.1f %.1f %.1f %.1f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4]
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-09-14
1,
#include <stdio.h>
#define m 5
#define n 3
struct cheng
{
int num; //your number
char name[81]; //your name
int mark[3]; //the three points
int ave; //the result
};
void input(struct cheng s[5])
{
int i,j;
for (i=0;i<m;i++){
printf("enter your num:");
scanf("%d",&s[i].num);
printf("and your name:");
scanf("%s",s[i].name);
printf("your got is ");
for (j=0;j<n;j++)
scanf("%d",&s[i].mark[j]);
}
}
void average (struct cheng s[5])
{
int i,j,maxi;
float sum;
for (i=0;i<m;i++){
sum=0;
for (j=0;j<n;j++)
sum+=s[i].mark[j];
s[i].ave=sum/3;
}
}
int max (struct cheng s[5])
{
int big=0,maxi=0,i;
big=s[0].ave;
for (i=0;i<m;i++)
if (s[i].ave>big)
{
big=s[i].ave;
maxi=i;
}
return maxi;
}
int main (void)
{
struct cheng student[5];
int bigi,i;
printf("input the five students' information:\n");
input(student);
average(student);
bigi=max(student);
printf("the three studnets' got is :");
for (i=0;i<m;i++)
printf("%d ",student[i].ave);
printf("\n");
printf("of the three students'bigest is :%d-------%d\n",(bigi+1),student[bigi].a
ve);
return 0;
}

3,
#include <stdio.h>
#define n 5
struct maopao
{
int num;
char name[15];
char sex;
int age;
double grade;
};
void input (struct maopao *zhen[n])
{
int i;
printf("***************************************************************\n");
printf("enter the five students' grade\n");
for (i=0;i<n;i++){
printf("input your number:");
scanf("%d",&((*zhen[i].num));//input your num
printf("input your name:");
scanf("%s",*(zhen[i].name);//input your name
printf("input your sex");
scanf("%c",&(*(zhen[i].sex));//input your sex
printf("input your sex:");
scanf("%d",&(*(zhen[i].age));//input your age
printf("input your grade:");
scanf("%lf",&(*(zhen[i].grade));//input your grade
}
}
void sortnum (struct maopao *p[n])
{
int i,j;
struct maopao *temp;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (*p[i].grade<*p[j].grade)
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
void output (struct maopao *p[n])

{
int i,j;
printf(" the sort is \n");
printf("***************************************************************\n");
printf("\tnum\tsex\tage\tgrade\t\n");
for (i=0;i<n;i++){
printf("%d\t%s\t%c\t%d\t%.2lf\n",*p[i].num,*p[i].name,*p[i].sex,*p[i].age,*p[i].
grade);
}
printf("***************************************************************\n");
}
int main (void)
{
struct maopao sort[n];
struct maopao *point[n];
int i;
for (i=0;i<n;i++)
point[i]=&sort[i];
input(point);
printf("the information which your input is \n");
output(point);
sortnum(point);
output(point);
return 0;
}本回答被提问者采纳
第2个回答  2007-06-21
有一个班的10学生信息包括,学号,姓名,以及门课的成绩,要求从键盘上面输入每个学生的学号,姓名,三门课程的成绩,然后要求求出每个学生的总成绩,和每个学生的平时成绩,然后按照总成绩的从高到低输出每个学生的信息,包括 学号 姓名 三门课成绩,总成绩,平均成绩,)用结构体完成
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct stu //一个学生的档案
{
char num[20];//学号
char name[20];//姓名
float score[5]; //成绩,前三门是单科成绩,第四个是总分,最后一个是平均分
}student;
student s[10]; //所有学生的信息

void main()
{
void init();//初始化函数申明
void sort();//排序函数申明
void print();//输出函数申明
init();
sort();
print();
}
void init()//初始化所有学生的档案
{
int i,j;
for(i=0;i<10;i++) //逐个键入学生的信息
{
printf("请输入一学生的学号:");
scanf("%s",s[i].num);
printf("请输入该学生的姓名:");
scanf("%s",s[i].name);
printf("请输入该学生的三门成绩:");
s[i].score[3]=0;
for(j=0;j<3;j++)
{
scanf("%f",&s[i].score[j]);
s[i].score[3]+=s[i].score[j]; //求总分
}
s[i].score[4]=s[i].score[3]/3; //求平均分
}
printf("学生档案建立成功!\n");
}
void sort()
{
int i,j,k;
char str[20];
float temp;
for(i=0;i<9;i++) //主循环,进行排名
for(j=i+1;j<10;j++)
if(s[j].score[3]>s[i].score[3])
{
strcpy(str,s[i].num); //交换学号
strcpy(s[i].num,s[j].num);
strcpy(s[j].num,str);
strcpy(str,s[i].name); //交换姓名
strcpy(s[i].name,s[j].name);
strcpy(s[j].name,str);
for(k=0;k<5;k++) //交换成绩
{
temp=s[i].score[k];
s[i].score[k]=s[j].score[k];
s[j].score[k]=temp;
}
}
}
void print()
{
int i;
for(i=0;i<10;i++)
printf("%s %s %.1f %.1f %.1f %.1f %.1f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4]);//保留一位小数输出
}
这是我刚刚帮人家做的一个和你差不多的题目,你只要稍微改改就可以完成第一题了,下面的我也没做过,呵呵~~~~

八楼的家伙,你拷贝我的程序干嘛,真郁闷。。。。
第3个回答  2007-06-21
#include<stdio.h>
main()
{
int i=0,h=0,w=0,y=0,A=0,wa=-1;
double a[100],x,t,s=0;
char ha;
for(i=0;i<=100;i++)
{
a=0;
}
i=0;
printf("输入您的数值,输入一个按一次回车,若输入完了请一次性输入阿拉伯数字1234567890在按回车(输入完在按)\n");
do{
scanf("%lf",&a[w]);
w++;
wa=w-1;
}while(a[wa]!=1234567890&&w!=100);
a[wa]=0;
x=a[0];
for(i=0;i<=99;i++)
{
printf("%4g",a);
}
printf("\n以上为您输入的数据\n要求平均数请输入a按回车\n要求最大值请输入b按回车\n要找相同的数输入c按回车\n要结束本程序输入g按回车\n请输入命令:");

scanf("%c",&ha); //这一句好象有问题 总是不能输入不知道咋了

if(ha=='a')
{
for(i=0;i<=100;i++)
{
s=a+s;
s=s/w;
}
printf("%g",s);
}
if(ha=='b')
{
for(y=0;y<=100;y++)
{
if(a[y]>x)
x=a[y];
}
printf("%g",x);
}
if(ha=='c')
{
printf("请输入要找的数字:");
scanf("%d",&t);
for(A=0;A<=100;A++)
{
if(t==a[A])
printf("第%d个数据为%g\n",A,a[A]);
}
}
}
第4个回答  2007-06-22
汗。。。。。 这种题帮你写出来是害你。 最简单的冒泡排序和指针操作 基础的东西,自己写吧,多练习练习还是有好处的 回答者:匿名 6-21 10:56这个朋友说的是实话啊 楼主 你要是为了学会 看看正确答案 老师能帮你如果为了应付 我坦率说 这几个是你期末考试必考的题 你乐意现在弄会还是 补考的时候再研究基本随你了 c语言入门重点内容 考试必考
相似回答