求一道c语言题目

liet2008 2008-01-19 02:20:10
有一个文件test.txt内容如下:
2005001 80
2005002 90
2005003 70
.........
前面的代表学号,后面代表成绩
要求用户任意输入一个学号,则显示出相应的成绩。
...全文
186 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Just4life 2008-01-20
  • 打赏
  • 举报
回复
楼主可以在我的例子基础上再做一下修改就可以了
Just4life 2008-01-20
  • 打赏
  • 举报
回复
// MyLink.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include "MyLink.h"
#include <stdio.h>

student* Create()
{
student *head;
student *p1, *p2;
int n = 0;

p1 = p2 = (student*)malloc(StructLen);
head = NULL;

scanf("%ld, %f", &p1->Num, &p1->Score);

while ( p1->Num != 0) {
n += 1;
if ( n == 1) {
head = p1;
}
else{
p2->Next = p1;
}
p2 = p1; //让p2始终指向链表的结尾
p1 = (student*)malloc(StructLen);
scanf("%ld, %f", &p1->Num, &p1->Score);
}
p2->Next = NULL;
return head;
}

student* delPoint(student* head, long Num)
{
//p1指向被删除的节点,p2指向被删除节点的上一个节点
student *p1, *p2;
if ( head == NULL ) {
printf("This is a null link!");
return NULL;
}

p1 = head;
while ( ( Num != p1->Num ) && ( p1->Next != NULL ) ) {
p2 = p1;
p1 = p1->Next;
}
if ( Num == p1->Num ) {
//需要判断p1是不是头节点
if ( p1 == head ) {
head = p1->Next;
}
else{
p2->Next = p1->Next;
}
return head;
}
else{
printf("%ld not been found!", Num);
return head;
}
}

student* insertPoint(student* head, student* stud)
{
student *p0, *p1, *p2;

p1 = head;
p0 = stud;
if ( head == NULL ) {
head = p0;
// p0->Next = NULL;
return head;
}
else{
while ( ( p0->Num > p1->Num ) && ( p1->Next != NULL ) ) {
p2 = p1;
p1 = p1->Next;
}
}

if ( p0->Num <= p1->Num ) {
//检测p1是否为头节点
if ( head == p1 ) {
head = p0;
p0->Next = p1;
return head;
}
else{
p2->Next = p0;
p0->Next = p1;
return head;
}
}

if( (p0->Num > p1->Num) && ( p1->Next == NULL ) ) {
p1->Next = p0;
p0->Next = NULL;
return head;
}

return NULL;
}

void print(student *head)
{
student *p;
p = head;

if( head != NULL ) {
do {
printf("%ld %f\n", p->Num, p->Score );
p = p->Next;
} while( p != NULL );
}
}
Just4life 2008-01-20
  • 打赏
  • 举报
回复
#ifndef _MYLINK_H
#define _MYLINK_H

#ifdef _cplusplus
extern "C" {
#endif

struct student{
long Num; //学号
float Score; //分数
student *Next;
};

#define StructLen sizeof(student)

student *Create(); //创建链表
student *delPoint( student* head, long Num); //删除节点
student *insertPoint( student* head, student* stud); //插入节点
void print(student *head); //打印链表

#ifdef _cplusplus
}
#endif

#endif
Just4life 2008-01-20
  • 打赏
  • 举报
回复
先将txt文本里面的内容读出,然后放在一个链表里面,根据输入的学好进行遍历,不就可以了?

struct Node
{
int iStdNumber;
int iPoint;
Node *pNext;
};

szutyang 2008-01-19
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
struct student
{
unsigned int number;
unsigned int grade;
}stu[3];
int main()
{
FILE *fp;
unsigned int search,i;
if((fp=fopen("test.txt","r"))==NULL)
printf("打开文件不成功!!\n");
for(i=0; i<3; i++)
{
fscanf(fp,"%d %d",&stu[i].number,&stu[i].grade);
}
scanf("%d",&search);
for(i=0; i<3; i++)
{
if(stu[i].number==search)
printf("%d\n",stu[i].grade);
}
fclose(fp);
return 0;
}
冰矿 2008-01-19
  • 打赏
  • 举报
回复
打错了,
strstr(ReadStr, SearchStr)函数是在读取得到的ReadStr字串中查找SearchStr字串,如找到返回字串出现的起始位置的指针,如没有,则返回NULL
冰矿 2008-01-19
  • 打赏
  • 举报
回复
不一定是空格,只要不是回车,可以吧读取字串char ReadStr[20];的长度设长一些嘛;
fgets(ReadStr, 20, F);是按行读取指定长度的字串到ReadStr中
strstr(ReadStr, SearchStr)函数是在读取得到的字串中SearchStr字串,
用不着Map来兴师动众吧。
你运行下,应该没什么问题
liet2008 2008-01-19
  • 打赏
  • 举报
回复
学号与成绩是在同一行,但不一定是一个空格
liet2008 2008-01-19
  • 打赏
  • 举报
回复
文件里面的的记录不止三个 只是举个例子
liet2008 2008-01-19
  • 打赏
  • 举报
回复
学过 C++但没用过map
能给出具体程序吗
冰矿 2008-01-19
  • 打赏
  • 举报
回复
简单些了个
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *F;
char SearchStr[9];
char ReadStr[20];
char *p;
F = fopen("D:\\file.txt", "rt");
scanf("%s", SearchStr);
do{
fgets(ReadStr, 20, F);
p = strstr(ReadStr, SearchStr);
if(p != NULL)
printf("%s", ReadStr);
}while(!feof(F));

fclose(F);
system("PAUSE");
return 0;
}
SIMONJZF 2008-01-19
  • 打赏
  • 举报
回复
hehe...
如果是在excel, 用VLOOKUP 函数就行了
liyuzhu_1984 2008-01-19
  • 打赏
  • 举报
回复
先设计一个数据结构

struct Node
{
int number;
int score;
};


然后定义个一结构体类型的数组
struct Node info[num] ; /* num的值根据自己的需要来设定吧 */
然后用读文件操作 楼上已经有写了 把test.txt文件里的内容放到数组里
接下来 就是根据查找需要便利数组来查找结果了


如果楼主会c++的话 用 map 容器来存学号和成绩 那么查找就相当简单了 因为这个容器提供了一个查找的方法 你就不用自己写查找了
guanbenben 2008-01-19
  • 打赏
  • 举报
回复
有一种要倒分的预感
chenzhp 2008-01-19
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <stdlib.h>
#include "string.h"
#include "stdio.h"

int main()
{
FILE *fp;
int number[3];
int score[3];
int i = 0;
int rece_Number = 0;
if((fp = fopen("test.txt","r")) == NULL)
{
fprintf(stderr,"Error opening file!\n");
}
for(i =0;i<3;i++)
{
fscanf(fp,"%d %d",&number[i],&score[i]);//学号与成绩用空格
}
printf("Please input number:\n");
scanf("%d",&rece_Number);
for(i = 0;i<3;i++)
{
if(rece_Number == number[i])
break;
}
printf("The Number's score is %d\n",score[i]);
fclose(fp);
return 0;
}
lyg_wangyushi 2008-01-19
  • 打赏
  • 举报
回复
按行读入字符串,将前一个储存在学号中,后一个储存成绩。
给一个伪代码:

struct Stu_Info
{
char num[7];
char score[4];
};

void main()
{
读入一行信息;
while(未读到文件末尾)
{
将这行信息存储在一个字符数组里,
将前一个字符数组存储到结构体的num成员里,将后一个数组存放到结构体的score成员里。
}
}
liet2000 2008-01-19
  • 打赏
  • 举报
回复
用getchar()可以啊

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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