威海114分类信息网:编程序的问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 20:54:00
1.定义一个结构体变量(包括年、月、日),输入年、月、日
A.编写函数fun1,计算该日在本年中是第几天?注意闰年问题
闰年的条件:能被4整除,但不能被100整除的年份都是闰年。
能被100整除,但不能被400整除的年份都是闰年。
B.编写函数fun2,计算这一年每月最后一天是本年中的第几天?并将结果存放于文件文件test1.txt。 应用方面:文件、数组、结构体、函数

2.有10个学生的信息(每个学生包括学号、姓名、成绩),存放于文件test1.txt中。
A.要求编写函数fun1对10个学生按成绩升序排序,并将结果(包括名次、学号、姓名、成绩)存放于文件test2.txt中。
B..编写函数fun2,用二分法查找test2.txt中某个成绩,并将结果打印出来。
应用方面:文件、数组、结构体、函数
附:test1.txt内容:
学号 姓名 成绩
0101 小张 81.5
0102 小李 62.0
0103 小王 77.5
0104 小周 96.0
0105 小刘 55.0
0201 小胡 42.0
0202 小赵 69.0
0301 小何 80.0
0302 小黄 60.0
0303 小杨 56.0
是 C 语言

要是做得好的话,我还是会加分的哦

是Turbo C V2.1的哦!!!冠钢的做法无法打开文件!!

/*
美女,你要先把你的
学号 姓名 成绩
0101 小张 81.5
0102 小李 62.0
0103 小王 77.5
0104 小周 96.0
0105 小刘 55.0
0201 小胡 42.0
0202 小赵 69.0
0301 小何 80.0
0302 小黄 60.0
0303 小杨 56.0
用记事本保存为test1.txt文件,并且放在
源程序的目录下,知道吗?

版权所有:陈冠钢
*/

/*
1.A fun1:计算该日在本年中是第几天
B fun2:计算这一年每月最后一天是本年中的第几天?并将结果存放于文件文件test1.txt。
*/
#include<stdio.h>

struct Date
{
int year;
int month;
int day;
};

int fun2(struct Date a)
{
FILE *fp;
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,sum=0;

if((fp=fopen("test1.txt","w+"))==NULL)
{
printf("can not open test1.txt!");
return 0;
}

if( (a.year%4==0 && a.year%100!=0) || (a.year%100==0 && a.year%400==0)) /*判断闰年*/
month[1]=29;
else
month[1]=28;

for(i=0;i<12;i++)
{
sum+=month[i];
printf("month %d : %d\n",i+1,sum);
fprintf(fp,"month %d : %d\n",i+1,sum);
}
}

/*
int fun1 根据日期获得此日期在当年的天数。
*/

int fun1(struct Date a)
{
int i;
int day=0;
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};

if( (a.year%4==0 && a.year%100!=0) || (a.year%100==0 && a.year%400==0)) /*判断闰年*/
month[1]=29;
else
month[1]=28;

for(i=0;i<a.month-1;i++) /*将天数相加*/
{
day+=month[i];
}
day+=a.day;

return day;
}

int main()
{
struct Date a;
int i,day=0;

a.year=2006;
a.month=1;
a.day=3;

printf("day=%d\n",fun1(a));
fun2(a);

getchar();
return 0;
}

/*
2.A fun1:对10个学生按成绩升序排序,并将结果(包括名次、学号、姓名、成绩)存放于文件test2.txt中。
B fun2:用二分法查找test2.txt中某个成绩,并将结果打印出来。
*/
#include<stdio.h>
#include<string.h> /*包含strcpy()函数*/
#include <stdlib.h>

struct Student
{
int number;
char name[20];
float score;
};

void sort()
{
FILE *fp;
struct Student a[10];
struct Student temp;
int i=0,j=0,p=0;
int NUM=10;

if((fp=fopen("test1.txt","r"))==NULL)
{
printf("can not open file test1.txt");
exit(0);
}

for(i=0;i<NUM;i++)
{
fscanf(fp,"%d %s %f",&a[i].number,a[i].name,&a[i].score);
}

fclose(fp);

for(i=0; i<10; i++)
{
p=i;
for(j=i+1;j<=9; j++)
{
if(a[p].score>a[j].score)
p=j;
}

if(p!=i)
{
temp.number=a[p].number;
a[p].number=a[i].number;
a[i].number=temp.number;

strcpy(temp.name,a[p].name);
strcpy(a[p].name,a[i].name);
strcpy(a[i].name,temp.name);

temp.score=a[p].score;
a[p].score=a[i].score;
a[i].score=temp.score;
}
}

if((fp=fopen("test2.txt","w+"))==NULL)
{
printf("can not create file test2.txt");
exit(0);
}

for(i=0;i<10;i++)
{
fprintf(fp,"%d %s %f\n",a[i].number,a[i].name,a[i].score);
}

fclose(fp);
}

int binarysearch(float value, int n) /*查找分数等于value的学生信息,共n个学生*/

{
FILE *fp;

struct Student a[10];

/* 位置和小于查找值的元素个数 */
int m;
int op=0;
int i=0;
int j=n-1;
int k; /* 中间指针 */

if((fp=fopen("test2.txt","r"))==NULL)
{
printf("can not create file test2.txt");
exit(0);
}
for(i=0;i<n;i++)
{
fscanf(fp,"%d %s %f",&a[i].number,a[i].name,&a[i].score);
}

if (n==0) { /* 空列表 */
return 0;
}

i=0; /* 头指针前面的元素小于查找值 */
j=n-1; /* 尾指针和它后面的元素大于等于查找值 */
while (i<j)
{
k=(i+j)/2;
if (a[k].score<value)
i=k+1;
else
j=k;
op++;
}

/* 头尾指针指向同一个位置 */
if (a[i].score>=value) /* 此位置上元素大于等于查找值 */
m=i;
else /* 全部元素都小于查找值 */
m=n;
op++;

if(m<n)
printf("%d %s %f",a[m].number,a[m].name,a[m].score);

}

main()
{
float score=96;
int n=10;
sort();
binarysearch(score,n);

getchar();
}

楼上的做法很完美了

补充一点,不知道你的无法打开文件是无法打开头文件还是程序提示can't open file
如果是头文件的问题,你需要配置一下tc
否则的话,建议你把文件放在c盘根目录下,然后把fopen("字样替换成fopen("c:\\

真有人答?服了...