求一道C语言课程题的编程过程

题目如下:一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过了多少米?第10次反弹多高?
要求:用while do......while for三种语句分别编程,

VC+Win2000下调试通过,今天刚做的。有点长,慢慢读吧。

/*
1)课程按本科生课(或研究生课)、适用年级、所属院系和所属专业等四各属性
进行设置,请建立课程的数据结构;
2)以C语言提供的文件方式,进行“课程数据库”的设计,请按定义的课程数据
结构描述文件的格式,以及文件与课程数据结构的关系;
3)开发课程的“查询系统”,要求以人机对话的方式直接输入本科生课(或研究生课
)、适用年级、所属院系和所属专业等四各属性的“代码”后,显示全部课程
4)开发“课程修改系统”,要求给定课程名称后,查出该课程,并能修改该课程的
所属院系和所属专业的属性。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct courses
{
char name[20];
int isgraduate;
long grade;
char academy[50];
char department[50];
}course[2000];

void Show(int n, int *index);
int Add();
void Delete(int n, int *index);
int Search(courses info, int *index);
void Initcourse(courses& info);
void SaveData();
void OpenData();
void main()
{
int nSel,n,i,index[2000];
char IsSure;
courses info;
for(i=0;i<2000;i++)
{
Initcourse(course[i]);
index[i]=-1;
}

do{
printf("\t\t\tThe Course Information Maneger\n");
printf("\t1.Insert a new information.\t2.Delete an information.\n");
printf("\t3.Search an information.\t4.Modify an information.\n");
printf("\t5.Show all information.\t\t6.Save current all information.\n");
printf("\t7.Open data file.\t\t8.Clean Screen.\n");
printf("\t9.Qite system.\n");
printf("What are you going to want:");
cin>>nSel;

switch(nSel)
{
case 1:
Add();
break;
case 2:
printf("The course you want to delete is :");
Initcourse(info);
gets(info.name);
n=Search(info,index);
if(n)
{
printf("%d course is found. Are you sure to delete?(Y/N):\n",n);
scanf("%c",&IsSure);
if(IsSure=='y' || IsSure=='Y')
{
Delete(n,index);
printf("The information is deleted.\n");
}
}
else printf("The information isn't found.\n");
break;
case 3:
printf("The course you want to search is :\n");
Initcourse(info);
printf("Course name:"); gets(info.name);
printf("Course grade:"); scanf("%d",&info.grade);
printf("Is this graduate student's course(Y/N):");
scanf("%c",&IsSure);
info.isgraduate=(IsSure=='y'||IsSure=='Y');
printf("Academy:"); gets(info.academy);
printf("Department:"); gets(info.department);
n=Search(info,index);
if(n) Show(n,index);
else printf("The information isn't found.\n");
break;
case 4:
printf("The course you want to modify is :");
Initcourse(info);
gets(info.name);
n=Search(info,index);
if(n)
{
for(i=0;i<n;i++)
{
Show(1,&index[i]);
printf("Course name:"); gets(course[index[i]].name);
printf("Course grade:"); scanf("%d",&course[index[i]].grade);
printf("Is this graduate student's course(Y/N):");
scanf("%c",&IsSure);
course[index[i]].isgraduate=(IsSure=='y'||IsSure=='Y');
printf("Academy:"); gets(course[index[i]].academy);
printf("Department:"); gets(course[index[i]].department);
}
}
else printf("The information isn't found.\n");
break;
case 5:
Show(0,NULL);
break;
case 6:
SaveData();
break;
case 7:
OpenData();
break;
case 8:
system("cls");
break;
case 9:
return;
}
}while(nSel!=9);
}

int Add()
{
char IsOther;
int i;
for(i=0;i<2000;i++) if(course[i].grade<0) break;
if(i==2000)
{
printf("Course is full!\n");
return -1;
}
printf("Input courses infomation:\n");
do
{
printf("Course name:"); gets(course[i].name);
printf("Course grade:"); scanf("%d",&course[i].grade);
printf("Is this graduate student's course(Y/N):");
scanf("%c",&IsOther);
course[i].isgraduate=(IsOther=='y'||IsOther=='Y');
printf("Academy:"); gets(course[i].academy);
printf("Department:"); gets(course[i].department);
printf("Do you input other?(Y/N):");
scanf("%c",&IsOther);
}while(IsOther=='y'||IsOther=='Y');
return i;
}

void Show(int n, int *index)
{
printf("Course\t\tGrade\tType\tAcademy\t\tDepartment\n");
if(n>0)
{
for(int i=0;i<n;i++)
{
printf("%s\t\t",course[index[i]].name);
printf("%d\t",course[index[i]].grade);
if(course[n].isgraduate) printf("Graduate\t");
else printf("Under\t");
printf("%s\t\t",course[index[i]].academy);
printf("%s\n",course[index[i]].department);
}
}
else
{
while(course[n].grade>0)
{
printf("%s\t\t",course[n].name);
printf("%d\t",course[n].grade);
if(course[n].isgraduate) printf("Graduate\t");
else printf("Under\t");
printf("%s\t\t",course[n].academy);
printf("%s\n",course[n].department);
n++;
}
}
}

void Delete(int n,int *index)
{
int i;
for(i=0;i<n;i++)
{
memset(course[index[i]].academy,0,20);
memset(course[index[i]].department,0,20);
memset(course[index[i]].name,0,20);
course[index[i]].grade=-1;
course[index[i]].isgraduate=-1;
}
}

int Search(courses info, int *index)
{
int i,j=0,k[5];
k[0]=(info.grade!=-1);
k[1]=(info.isgraduate!=-1);
k[2]=(info.name[0]!=0);
k[3]=(info.academy[0]!=0);
k[4]=(info.department[0]!=0);

for(i=0;i<2000;i++)
{
if(k[0]&&course[i].grade==info.grade) index[j]=i;
if(k[1]&&course[i].isgraduate==info.isgraduate) index[j]=i;
if(k[2]&&!strcmp(info.name,course[i].name)) index[j]=i;
if(k[3]&&!strcmp(info.academy,course[i].academy)) index[j]=i;
if(k[4]&&!strcmp(info.department,course[i].department)) index[j]=i;
if(index[j]>=0) j++;
}
return j;
}

void SaveData()
{
FILE *fp;
int i=0;
if((fp=fopen("C:\\Courses.dat","w+"))==NULL)
{
printf("Save Fault!\n");
return;
}

for(i=0;i<2000;i++)
{
if(course[i].grade>0) fwrite(&course[i],sizeof(courses),1,fp);
}
fclose(fp);
printf("Save Success!\n");
}

void OpenData()
{
FILE *fp;
int status,i=0;
if((fp=fopen("C:\\Courses.dat","r+"))==NULL)
while(!feof(fp))
{
status=fread(&course[i],sizeof(courses),1,fp);
if(status) i++;
else
{
course[i].grade=-1;
i--;
}
}
fclose(fp);
printf("Read Success!\n");
}

void Initcourse(courses& info)
{
info.academy[0]=0;
info.department[0]=0;
info.grade=-1;
info.isgraduate=-1;
info.name[0]=0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-08
#include <stdio.h>
main()
{float height=100.0,sum_height=100;

for(int i=1;i<10;i++) {
height=height/2;
sum_height+=height*2;
}
printf("%fm\n",sum_height);
printf("%fm\n",height);
return 0;
}

#include <stdio.h>
main()
{float height=100.0,sum_height=100;
int i=1;
while(i<10) {
height=height/2;
sum_height+=height*2;
i++;
}
printf("%fm\n",sum_height);
printf("%fm\n",height);
return 0;
}

#include <stdio.h>
main()
{float height=100.0,sum_height=100;
int i;
do {
height=height/2;
sum_height+=height*2;
i++;
}whlie(i<10)
printf("%fm\n",sum_height);
printf("%fm\n",height);
return 0;
}本回答被提问者和网友采纳
第2个回答  2010-12-08
#include <stdio.h>

void main()
{
float i=100;
float j=100;
for(int k=1;k<=10;k++)
{
j=j/2;
i+=j;
}
printf("一共%5.2f\n第十次弹%5.2f",i,j);

}