C语言 高分求助

题目一用指向指针的方法对N个字符串排序输出。解答过程(要有设计思路和程序语句。)题目二(电子英汉词典设计)(1)问题描述:英汉电子词典作为一种常用的学习工具,是我们经常要... 题目一
用指向指针的方法对N个字符串排序输出。
解答过程(要有设计思路和程序语句。)
题目二(电子英汉词典设计)
(1)问题描述:
英汉电子词典作为一种常用的学习工具,是我们经常要使用的。该系统能完成一个简单的电子词典的功能,如:单词的查找,増词,删除,修改和维护等工作。
(2)功能描述:
【1】在计算机中建立有限规模的电子词典)(文件),利用程序实现电子英汉词典的单词的查找,増词,删除,修改和维护等工作。
【2】词典的内容为:每行对应一个词条,每个词条由两个字符串组成,字符串用若干个空格符分开;前一个是由单词字符串(英文),后一个是由释义字符串(中文),使用分号作为多个释义的分隔符(无空格)
【3】对单词释义字符串长度不少于20个与40个字符,词条数限定在不多于200条。
【4】采用菜单工作方式。在一个操作执行之后,程序询问是否继续执行该操作。如输入Y与y,则属于同一操作,不退回到菜单;如输入其他信息,则回到菜单等待另一次选择。仅当选择退出操作时,程序应询问是否将修改后的词典存盘,并根据用户选择存盘退出或不存盘退出。
【5】要求整个设计以人为本,用户界面友好。
(3)算法提示:
【1】数据结构:结构体数组
【2】简单的程序设计
【3】友好的窗口菜单的设计
(4)测试数据:
要求被选用的词条有200的左右,以中学的词典为主。
解答过程(本题要有设计思路,流程图,程序结果。)
展开
 我来答
enochwills
2010-07-04 · TA获得超过4793个赞
知道大有可为答主
回答量:2031
采纳率:96%
帮助的人:1625万
展开全部
/*题目一
用指向指针的方法对N个字符串排序输出。
解答过程(要有设计思路和程序语句。)
设计思路
定义一个长度为n的指针数组,使第i个数组元素保存第i个字符串的首地址(i=0~n-1);这样指针数组里记录的是未排序前的n个字符串首地址。
然后,调用strcmp函数比较两个字符串的大小。strcmp函数只要输入两个字符数组的首地址,就可以判断两个字符数组中字符串的大小。
排序的算法有多种,本程序为冒泡法。程序如下:*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void SortString(int n, char *str[])
{
char *c;
int i,j;
for(i=0;i<=n-2;i++)
for(j=0;j<=n-2-i;j++)
{
if(strcmp(str[j],str[j+1])>0)
{c=str[j];str[j]=str[j+1];str[j+1]=c;}
}
}
main()
{
int i;
char *lang[]={"China","France","English"};
SortString(3,lang);
for(i=0;i<3;i++)
printf("\n%s ", lang[i]);
}
/*程序运行的结果为:
China
English
France
*/
/*第二题 字典
基本设计思路,是用随机文件的方式进行字典词条的新增、删除、编辑、查询操作。
定义一个ITEM结构用于存储一个词条。
所有操作都基于一个查询。查询是根据单词进行操作的,返回是该单词在文件中的位置。
新增词条的程序是,先检查词条是否存在,如果不存在,则在文件尾部追加。
编辑词条的程序时,如果词条存在,则将新释义保存到单词在文件中的同一位置,进行覆盖操作。
删除词条的程序是,直接将随机文件已经查询到的单词清空,置为空白记录(即“删除”标志位。
还有一个功能,就是字典文件的设置。
以下是程序源代码:
*/

/*基本的库函数*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define szWORD 32
#define szSTRN 224
#define szITEM sizeof(struct TItem)
char fileDict[szSTRN];

typedef struct TItem {
char word[szWORD];
char mean[szSTRN];
} Item;

fpos_t lookup(char *word, char *mean)
{
FILE * f = 0; Item i;
int r = 0; fpos_t p = 0;
if(!word) return 0;
f = fopen(fileDict, "rb");
if (!f) return 0;
while(!feof(f)) {
fgetpos(f, &p);
r = fread(&i, szITEM, 1, f);
if(r < 1) break;
if(i.word[0] == 0) continue;
if(strcmp(i.word , word)) continue;
if(mean) strcpy(mean, i.mean );
fclose(f);
return p+1;
}
fclose(f);
return 0;
}

void append(void)
{
Item i; FILE * f = 0; fpos_t p = 0;
memset(&i, 0, szITEM);
printf("请输入单词:"); scanf("%s", i.word );
p = lookup(i.word, 0 );
if(p) {
printf("字典内已经有该单词记录!\n");
return;
}
printf("请输入释义,按回车结束:");
fflush(stdin);
gets(i.mean );
f = fopen(fileDict, "ab");
fwrite(&i, szITEM, 1, f);
fclose(f);
printf("词条已新增\n");
}

void erase(void)
{
Item i; FILE * f = 0; fpos_t p = 0;
memset(&i, 0, szITEM);
printf("请输入单词:"); scanf("%s", i.word );
p = lookup(i.word, 0 );
if(p==0) {
printf("字典内没有该单词记录!\n");
return;
}
p--;
memset(&i, 0, szITEM);
f = fopen(fileDict, "rb+");
fsetpos(f, &p);
fwrite(&i, szITEM, 1, f);
fclose(f);
printf("词条已删除\n");
}

void edit(void)
{
Item i; FILE * f = 0; fpos_t p = 0;
memset(&i, 0, szITEM);
printf("请输入单词:"); scanf("%s", i.word );
p = lookup(i.word, 0 );
if(p==0) {
printf("字典内没有该单词记录!\n");
return;
}
p--;
printf("请输入释义,按回车结束(输入abort放弃修改):");
fflush(stdin);
gets(i.mean );
if(strstr(i.mean ,"abort")) {
printf("已放弃修改!\n");
return ;
}
f = fopen(fileDict, "rb+");
fsetpos(f, &p);
fwrite(&i, szITEM, 1, f);
fclose(f);
printf("词条已保存\n");
}

void query(void)
{
Item i; fpos_t p = 0;
memset(&i, 0, szITEM);
printf("请输入单词:"); scanf("%s", i.word );
p = lookup(i.word, i.mean );
if(p==0) {
printf("字典内没有该单词记录!\n");
return;
}
printf("【词条】%s\n【释义】%s", i.word , i.mean );
}

void set(void)
{
int cmd = 0;
printf("当前字典为%s,需要改变吗(选择y或Y改变)?", fileDict);
cmd = getch();
if(cmd == 'y' || cmd == 'Y') {
printf("请输入字典文件名称(包含路径):");
scanf("%s", fileDict);
printf("设置成功!\n");
}
}
int main(int argc, char * argv[])
{
int cmd = 0;
if(argc >1)
strcpy(fileDict, argv[1]);
else
strcpy(fileDict, "c:\\dict.txt");
/*end if*/
for(;;) {
printf("\n\
************************\n\
** 欢迎使用迷你字典!**\n\
************************\n\
** 0 - 设置字典 **\n\
** 1 - 查询词条 **\n\
** 2 - 新增词条 **\n\
** 3 - 编辑词条 **\n\
** 4 - 删除词条 **\n\
** 5 - 退出字典 **\n\
************************\n");
cmd = getch() - '0';
switch(cmd) {
case 0: set(); break;
case 1: query(); break;
case 2: append(); break;
case 3: edit(); break;
case 4: erase(); break;
default: return 0;
}
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式