参加面试,公司出的考题,要我回来做,大家帮我一下,高分贡献!

liu800323 2003-01-13 05:14:05
将十名职工的数据从键盘输入,然后输送到磁盘文件worker1.rec中保存,
设职工数据包括:职工号,职工名,性别,年龄,工资。
(1)存放在worker1.rec中的名职工数据按工资高低排序,将排好的记录存放在worker2.rec中
(2)对在worker2.rec基础上,增加一个新职工的数据,要求按工资高低顺序插入到原有文件中,
然后存放到work3.rec中。
(3)打印输出work3.rec中顺序号为奇数的职或记录。

用C语言实现。谢谢各位。好些日子没看C语言了,求助中!
...全文
53 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mousemice 2003-01-22
  • 打赏
  • 举报
回复
int main()
{

FILE *fp;
char choice;
struct stud *head;
int schoice,sechoice;

do{
printf( "\n 1----Creat a new record. Press 1" );
printf( "\n 2----Add new records to file. Press 2." );
printf( "\n 3----Search record. Press 3" );
printf( "\n 4----Sort the student`s informatin. Press 4" );
printf( "\n 5----Print all record. Press 5" );
printf( "\n 6----Quit. Press 6" );

printf( "\nPlease Choice: " );

do{
scanf( "%c", &choice);
}while( choice == '\n' );

switch ( choice){

case '1' : puts( "\nEnter the records" );

head = creat();
printf( "\nFile Created." );
print_list( head );
clear( head );

break;


case '2' :
fp = fopen( "output.txt","r" );
if( !fp ){
printf( "Error!!!" );
break;
}

printf( "\nNow you can add new record: ");
add();

rewind( fp );
print_file( fp );


break;


case '3' :
printf( "\nInput the way of search ");
printf( "\n 1---name. Press 1" );
printf( "\n 2---number. Press 2" );
scanf( "%d", &sechoice );
if( sechoice == 1)
search_name();
else
search_num();
break;

case '4' :
printf( "\nSort according to what ?" );
printf( "\n 1---name. Press 1" );
printf( "\n 2---number. Press 2" );
printf( "\n 3---score. Press3" );

do {
scanf ( "%c", &schoice );
}while ( schoice == '\n' );
switch ( schoice){

case '1' :
head = sort( comp_name );
break;
case '2' :
head = sort( comp_num );
break;
case '3' :
head = sort( comp_score );
break;
}
print_list( head );
clear ( head );

break;

case '5' :
fp = fopen( "output.txt", "r" );
if( !fp ){
printf( "Error!!" );
break;
}

printf( "\nThe records in this file are:" );
print_file( fp );

break;

}
}while( choice != '6' );
}
mousemice 2003-01-22
  • 打赏
  • 举报
回复
一个类似的程序

程序中有下列功能:
1)建立学生数据结构,学生数据结构有学生姓名,学号,20门成绩
2)输入数据功能模块,完成数据输入,添加。数据用文件保存。
3)查询功能模块,可以按姓名,学号查询学生纪录
4)排序输出模块,可以按姓名,学号,平均成绩输出学生纪录

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>

struct stud{
char name[10];
int num;
float score[21];
struct stud *next;
};

//void save (struct stud *head);
int add () ;
void search_name (void);
void search_num (void) ;
int comp_name ( struct stud *left, struct stud *right );
int comp_num ( struct stud *left, struct stud *right );
int comp_score ( struct stud *left, struct stud *right );
void print_list ( struct stud *head );
void print_file ( FILE *fp ) ;
struct stud *sort( int ( *compare )( struct stud*, struct stud* ) );
struct stud *creat();
int clear ( struct stud *head );
/*-----------------------------------------------------------------*/
/*-----------------------------------------------------------------*/

int clear ( struct stud *head ) {

struct stud *p, *q;

p = head->next;
while ( p ){
q = p->next;
free ( p );
p = q;
}
free ( head );
return 0;
}
/*-----------------------------------------------------------------*/
/*-----------------------------------------------------------------*/
int add ()
{

FILE *fp;
struct stud t;
int i;
char goon = 'y';
float temp, sum = 0.0;

fp = fopen( "output.txt","a" );

if ( !fp ){
printf( "Error!!!" );
return 0;
}

while( goon != 'N' && goon != 'n' ){

printf( "\nEnter the student's name : " );
scanf ( "%s", &t.name );
printf( "\nEnter number: " );
scanf ( "%d", &t.num );
printf( "\nEnter the student's marks: " );

for( i = 0; i < 20; ++i ){
scanf( "%f", &temp );
t.score[i] = temp;
sum += temp;
}

t.score[20] = sum/20;
fwrite( &t, sizeof( struct stud ), 1, fp );
printf( "\nGo on input?(Y/N)?" );

do{
goon = getchar();
}while( goon == '\n' );

}
fclose( fp );
return 1;
}
/*-----------------------------------------------------------------*/
int comp_name ( struct stud *left, struct stud *right )
{
if ( strcmp ( left->next->name, right->name ) < 0 )
return 1;
else return 0;
}
/*-----------------------------------------------------------------*/
int comp_num ( struct stud *left, struct stud *right )
{
return (left->next->num) < (right->num);
}
/*-----------------------------------------------------------------*/
int comp_score ( struct stud *left, struct stud *right )
{
return (left->next->score[20]) < (right->score[20]);
}
/*-----------------------------------------------------------------*/

struct stud *sort( int ( *compare )( struct stud*, struct stud* ) )
{

struct stud *p, *q, *head, temp;
int i, j = -1;

FILE *fp;

fp = fopen( "output.txt", "r" );
if( !fp ){
printf("Error");
return 0;
}
head = ( struct stud * )malloc( sizeof( struct stud ) );

head->next = 0;
while( !feof( fp ) ){
q = ( struct stud * )malloc( sizeof( struct stud ) );
q->next = 0;
fread( &temp, sizeof( struct stud ), 1, fp );

if ( temp.num == j)
break;

strcpy( q->name, temp.name );
j = q->num = temp.num;

for( i = 0; i < 20; ++i )
q->score[i] = temp.score[i];

p = head;
while( p->next && ( ( *compare )( p, q ) ) )
p = p->next;

q->next = p->next;
p->next = q;

}
return head;

}
/*-----------------------------------------------------------------*/
void print_list ( struct stud *head ) /* Print according to LinkList */
{
struct stud *p;
int i;

p = head->next;

if( p )
{
printf( "\nThe Records are:" );
while( p )
{
printf( "\n%s\t%d\n", p->name, p->num );

for( i = 0; i < 20; ++i )
printf( "\t%5.2f", p->score[i] );

p = p->next;
}
}
else printf("All records print!");
}

/*-----------------------------------------------------------------*/
void print_file ( FILE *fp ) /* Print according to File */
{
struct stud p;
int i,t = -1;

printf( "\nThe Records are:" );
while ( !feof( fp ) ){
fread( &p, sizeof( struct stud ), 1, fp );

if ( t == p.num )
continue;

printf( "\n%s\t%d\n" , p.name ,p.num );

for( i = 0; i < 20; ++i )
printf( "\t%5.2f", p.score[i] );

t = p.num;
}
}

/*-----------------------------------------------------------------*/
void search_name (void) /* Search according to name */
{
int find = 0;
FILE *fp;

struct stud p;
int i;
char search_name[10];

fp = fopen( "output.txt", "r" );

if( !fp ){
printf( "Error!!!" );
return;
}

printf( "\nEnter the name of the student you want to search: " );

scanf ( "%s", search_name );


while( !feof( fp ) )

{

fread( &p, sizeof( struct stud ), 1, fp );

if( strcmp( p.name, search_name ) == 0 ){

printf( "\n%s", p.name );
printf( "\t%d\n", p.num );
for(i=0;i< 20;++i)
printf( "\t%5.2f", p.score[i] );
find = 1;
continue;
}

}


if( !find)
printf( "NO FOUND!" );

fclose( fp );

}


/*-----------------------------------------------------------------*/
void search_num (void) /* Search according to number */
{
FILE *fp;

struct stud p;
int i,search_num;


fp = fopen( "output.txt", "r" );
if( !fp ){
printf( "Error!!!" );
return ;
}

printf( "\nEnter the number of the student you want to search:" );
scanf ( "%d", &search_num );

while( !feof( fp ) ){

fread( &p, sizeof( struct stud ), 1, fp );
if( p.num == search_num )
break;
}
if(!feof(fp)){

printf( "\n%s", p.name );
printf( "\t%d\n", p.num );
for( i = 0; i < 5; ++i )
printf( "\t%5.2f", p.score[i] );
}
else printf( "NO FOUND!" );

fclose( fp );

}
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*---------------------Creat a list-----------------------------------------*/
struct stud *creat()
{
struct stud *p, *q, *head;
int n=0, i;
float t,sum=0.0;
char goon = 'y';
FILE *fp;

if( ( fp=fopen( "output.txt","w" ) ) == 0 ) {
printf("\nError!!!");
return 0;
}

head = p = ( struct stud * )malloc( sizeof( struct stud ) );


while( goon != 'N' && goon != 'n' ){

q = ( struct stud * )malloc( sizeof( struct stud ) );
q->next = 0;
++n; sum = 0.0; /*---Average Marks---*/


printf( "\nEnter student's name: ",n);
scanf ( "%s", &q->name );

printf( " \nHnter number:" );
scanf ( "%d",&q->num );

printf( "\nEnter the marks : ");
for( i = 0; i < 20; ++i ){

scanf( "%f", &t );
q->score[i] = t;
sum += t;
}
q->score[20] = sum/20; /* score[20] is used to save the average */
p->next = q;
p = q;

printf( "\nGo on input(Y/N)?" );
do{
goon = getchar();
}while( goon == '\n' );
}

p = head->next;
while( p ){
fwrite(p, sizeof( struct stud ), 1, fp );
p = p->next;
}
printf( "\nFile Saved." );
fclose( fp );

return head;
}


apogeecsj 2003-01-18
  • 打赏
  • 举报
回复
我门今年期末考试题和这差不多,哈哈
qing_li73 2003-01-17
  • 打赏
  • 举报
回复
Just want to test basic issues
verifylife 2003-01-17
  • 打赏
  • 举报
回复
en
XYBZ 2003-01-16
  • 打赏
  • 举报
回复

如果是面世,不知道c语言实现,就写伪代码。把算法思路写清楚就行。
这题考c的语法也太简单,说不定公司要的是有点头脑的程序员。
Zark 2003-01-14
  • 打赏
  • 举报
回复
哈,哈
http://expert.csdn.net/Expert/topic/1355/1355125.xml?temp=.9294702

题目中都说了"十名职工",还用什么链表,用数组吧!
ToUpdate 2003-01-14
  • 打赏
  • 举报
回复
up
FishCrazy 2003-01-13
  • 打赏
  • 举报
回复
建立结构体
typedef struct Record
{
int emp_no;
char *emp_name;
BOOL emp_sex;
int emp_age;
float emp_sal;
}Record;

根据Record.emp_sal进行排序和插入

剩下就是对二进制文件的读写了

代码就不写了,我是在网吧呢……
liuwei662656 2003-01-13
  • 打赏
  • 举报
回复

我现在是一名大三的学生。


(帮学校做点广告--辽宁工程技术大学。 学校没名,大部分人没听过)



liu800323 2003-01-13
  • 打赏
  • 举报
回复
继续加分,发觉此考题的确不错,不要以为它是HOMEWORK啊,其实这是个态度的问题,我想大家可以继续畅所欲言的,
有哪位可以完整的给出呢?,这年代,米卢的‘态度决定一切!’很实用。我联系他(她)!
ice119103 2003-01-13
  • 打赏
  • 举报
回复
如果你用的是c++建议用类
liu800323 2003-01-13
  • 打赏
  • 举报
回复
liuwei662656(天堂)那位兄台是哪里的,我发贴7分钟搞定,厉害!
xiaonian_3654 2003-01-13
  • 打赏
  • 举报
回复
中科院也考过这道题
liu800323 2003-01-13
  • 打赏
  • 举报
回复
揭贴了。
这里有个问题。公司的考试是不分难易的。主要考你基础。不过liuwei662656
做的很好,不错,不知现在哪里高就?上学?估计答案你一直拿着吧:)。考官也是从学生过来的,脑子一热,他就出他以前他的导师出过的HOMEWORK,不瞒大家,我以前也是做过的,可是没有印象了,嘿,就这么着,努力中!,
熊主任 2003-01-13
  • 打赏
  • 举报
回复
不过说实话,真要是考试我也做不出来,只能写一下思路和大致的模型,具体函数只能&^$了!
熊主任 2003-01-13
  • 打赏
  • 举报
回复
回来做?分明是学校作业博大家同情吧!建议这里的斑竹可以做一个家庭作业FAQ,谁程序写不来直接查查就可以了。就算是面试题目,你混进去之后能站住脚吗?
这题考了如下知识点:
结构体
链表的建立,插入,排序
二进制文件的读写。

回去自己好好反省吧!
liuwei662656 2003-01-13
  • 打赏
  • 举报
回复
老师留的作业: 读入学生的成绩并排序保存。
希望对楼主有一点点点儿帮助。

#include "stdio.h"//读入程序
#define number 6
void main()
{
//定义学生数组及学科名称,类型
//printf("\nPlease input the count of your class :");

struct stu
{
int id;
float english;
float maths;
float average;
};
printf("Your class have %d students",number);
struct stu stus[number];
//成绩输入

for(int i=1,k=0;i<=number;i++,k++)
{
printf("\nplease input the %d student English:",i);
scanf("%f",&stus[k].english);
stus[k].id=i;
printf("\nplease input the %d student maths:",i);
scanf("%f",&stus[k].maths);
stus[k].average=(stus[k].maths+stus[k].english)/2;
}
//排序
for(int lw=0;lw<number;lw++)
{
struct stu liuwei=stus[lw];
for(int l=lw;l<number;l++)
{
if(liuwei.average<stus[l].average)
{
stus[lw]=stus[l];
stus[l]=liuwei;
liuwei=stus[lw];
}
}
}
//打印输出
printf("\nID\t\tEnglish\t\tmaths\t\taverage\n");
for(int f=0;f<number;f++)
{
printf("%d\t\t%f\t\t%f\t%f\n",stus[f].id,stus[f].english,stus[f].maths,stus[f].average);
}
FILE *p;
if((p=fopen("c:\\student","wb"))==NULL)
{
printf("file open error!");
return ;
}
//写入数据
for(int o=0;o<number;o++)
{
if(fwrite(&stus[o],sizeof(struct stu),1,p)!=1)
printf("\nfile write error!\n");
}

fclose(p);

}
喝醉的咖啡 2003-01-13
  • 打赏
  • 举报
回复
居然有公司考这样的题?也太基础了距离实际较远

64,686

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧