⑴ c語言程序設計----電子英漢詞典設計
要做GUI的,還是命令行的?
要做什麼樣功能,什麼顯示的詞典?
你所提供的信息不夠全面,我無法為你解答。
⑵ 大蝦看看我的代碼 老出錯 求正解 給高分 急急急急急急急急:問題是C語言關鍵字中英翻譯機
可以了。
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
int EN();
int CN();
void main()
{
char a[]="1";
char b[]="2";
char d[]="bye";
char ch;
printf("**************************************\n");
printf(" 歡迎使用C語言關鍵字中英翻譯機\n");
printf("**************************************\n");
printf("1.通過輸入英文來查找\n");
printf("2.通過輸入中文意思來查找\n");
printf(" 輸入b退出程序\n\n\n\n");
do{
ch=getch();
switch(ch)
{
case '1':EN();break;
case '2':CN();break;
case 'b':exit(0);break; //單引號中內容不可為字元串
default: ;
}
}while(1);
}
int EN()
{
char r[20] ;
int s; int n=34;
struct word//詞庫
{
char key[20];
char mean[80];
}word[1000]={{"auto","聲明自動變數"},
{"double","聲明雙精度變數或函數"},
{"int","基本整形"},
{"struct","聲明結構體變數或函數"},
{"break","跳出當前循環"},
{"else","條件語句否定分支(與if 連用)"},};
printf("\n請輸入要查找的關鍵字的英文:\n");
scanf("%s",r);
for(s=0;s<=n;s++){
if(s<=n-1)
if(strcmp(word[s].key,r)==0)
break;
else
continue;
else
if(strcmp(word[n].key,r)==0)
break;
else
{
printf("\n抱歉,詞庫中沒有收入此關鍵字");
}
}
printf("\n關鍵字:%s", word[s].key);
printf("\n關鍵字含義:%s\n", word[s].mean);
return 0;
}
int CN(){
char r[20] ;
int s;
int n=34;
struct word//詞庫
{
char key[20];
char mean[80];
}word[1000]={{"auto","聲明自動變數"},
{"double","聲明雙精度變數或函數"},
{"int","基本整形"},
{"struct","聲明結構體變數或函數"},
{"break","跳出當前循環"},}; //多了一個分號
printf("\n請輸入要查找的關鍵字的中文:\n");
scanf("%s",r);
for(s=0;s<=n;s++)
{
if(s<=n-1)
if(strcmp(word[s].mean,r)==0)
break;
else
continue;
else
if(strcmp(word[n].mean,r)==0)
break;
else
{
printf("\n抱歉,詞庫中沒有收入此關鍵字");
}
}
printf("\n關鍵字:%s", word[s].mean);
printf("\n關鍵字含義:%s", word[s].key);
return 0;
}
⑶ C語言關鍵字中英翻譯機。
因為這是翻譯機,所以你應該准備一個英漢漢英互譯詞庫,然後用C對這個詞庫進行操作,最直接的方法就是窮搜,這是很簡單的,但是詞庫大了就會很慢。。。所以詞庫可以做一些調整,比如按字母序排列,或者加一些字母索引,這樣查找就會快些。。。
如果你能把詞庫給我我就能寫出來,如果詞庫自己做的話,就只能譯幾個詞,其它的詞可以自己加入詞庫。。。
⑷ c語言關鍵字中英文翻譯機的程序源代碼
C語言中有大概30多個關鍵字:
auto 局部變數(自動儲存)
break無條件退出程序最內層循環
case switch語句中選擇項
char單位元組整型數據
const定義不可更改的常量值
continue中斷本次循環,並轉向下一次循環
default switch語句中的默認選擇項
do 用於構成do.....while循環語句
double定義雙精度浮點型數據
else構成if.....else選擇程序結構
enum枚舉
extern在其它程序模塊中說明了全局變數
float定義單精度浮點型數據
for構成for循環語句
goto構成goto轉移結構
if構成if....else選擇結構
int基本整型數據
long長整型數據
registerCPU內部寄存的變數
return用於返回函數的返回值
short短整型數據
signed有符號數
sizoef計算表達式或數據類型的佔用位元組數
static定義靜態變數
struct定義結構類型數據
switch構成switch選擇結構
typedef重新定義數據類型
union聯合類型數據
unsigned定義無符號數據
void定義無類型數據
volatile該變數在程序中執行中可被隱含地改變
while用於構成do...while或while循環結構
⑸ 用C語言編寫一個簡單翻譯程序
LZ 的那種方法 可以實現 ,但很顯然是不實用,因為那樣記錄的也太多了吧,,,
我覺得,你可以記錄下常用的特殊短語 像: hello China就可以了,因為很大一部分就是按照順序翻譯的,「有道」也經常出現這種問題的,以下是自己在用參考「有道」的時候的實現的一些想法,可以作為參考:
如果想智能點的話,你就得「教會」這個 【 英語和漢語 】這兩門課 教的方法,就是把你會的東西全都教給他,比如說:
首先,你可以為每個單詞定義一個struct數據結構,裡麵包含的是這個單詞的 1. 【字義】(一個單詞總不止一個意思吧)2.【詞性】(你學習語法的時候要用到吧)3.【其他】(片語了什麼的,有發音功能的話還得記錄音標吧、、呵呵)
然後,要教它語法吧、、、這其實是最難的,語法就相當於你的演算法了,程序的靈魂所在;
這也許就是C一直吸引著我們的地方,將抽象變為具體,呵呵、、祝你學習愉快、、、
⑹ void是什麼意思,c語言是什麼
void 被翻譯為"無類型",相應的void *為"無類型指針"。常用在程序編寫中對定義函數的參數類型、返回值、函數中指針類型進行聲明。
void 的作用
1.對函數返回的限定,這種情況我們比較常見。
2.對函數參數的限定,這種情況也是比較常見的。
一般我們常見的就是這兩種情況:
(1)當函數不需要返回值值時,必須使用void限定,這就是我們所說的第一種情況。例如:void func(int a,char *b)。
(2)0當函數不允許接受參數時,必須使用void限定,這就是我們所說的第二種情況。例如:int func(void)。
(6)c語言關鍵字中英翻譯機總體設計擴展閱讀:
2011年10月12日,C語言之父丹尼斯·里奇辭世,在眾多的國際互動論壇上,計算機愛好者們以特有的方式紀念這位編程語言的重要奠基人。許多網友的發帖中沒有片言隻字,僅僅留下一個分號「;」。
在日益紛繁復雜的程序設計語言王國中,C語言因其簡潔、有效、通用的特性而始終占據一席之地。被譽為「C語言之父」,同時也是操作系統Unix之父的C語言發明人之一——丹尼斯·里奇10月9日以70歲之齡辭世。
盡管通過Unix拿獎拿到手軟,但令里奇引起最大關注和反響的則是C語言的問世。1999年,里奇和湯普遜為發展C語言和Unix操作系統一起獲得了美國國家技術獎章。
網路-Void
網路-C語言關鍵字
⑺ C語言關鍵字中英翻譯機(只是翻譯C語言中的關鍵字)。求高手幫忙......
#include<stdio.h>
#include<string.h>
char* bijiao(char* s1,char* s2[],char* s3[])
{
int i,j;
for(i=0;i<32;i++)
{
for(j=0;j<(int)strlen(s2[i]);j++)
{
if(s1[j]!=s2[i][j]) break;
}
if(j==(int)strlen(s2[i]))
return s3[i];
for(j=0;j<(int)strlen(s3[i]);j++)
{
if(s1[j]!=s3[i][j]) break;
}
if(j==(int)strlen(s3[i]))
return s2[i];
}
return "沒有找到數據";
}
void main()
{
char str[50];
char* str1[32]={"auto","break","case","char","const","continue","default"
,"do","double","else","enum","extern","float","for","goto","if","int"
,"long","register","return","short","signed","static","sizeof","struct"
,"switch","typedef","union","unsigned","void","volatile","while"};
char* str2[32]={"自動變數","跳出當前循環","開關語句分支","字元型變數","只讀變數","結束當前循環","其他分支"
,"循環語句的循環體","雙精度變數","條件語句否定分支","枚舉類型","聲明變數是在其他文件正聲明","浮點型變數","循環語句","跳轉語句","條件語句","整型變數"
,"長整型變數","寄存器變數","返回語句","短整型變數","有符號類型變數","靜態變數","計算數據類型長度","結構體變數"
,"開關語句","用以給數據類型取別名","共用數據類型","無符號類型變數","無返回值","說明變數在程序執行中可被隱含地改變","循環語句的循環條件"};
while(1)
{
gets(str);
if(str[0]=='b'&&str[1]=='y'&&str[2]=='e'&&str[3]=='\0')return ;
puts(bijiao(str,str1,str2));
printf("\n");
}
}
⑻ c語言關鍵字中英翻譯機,要求創建文件搜索
程序使用結構鏈表實現。
由於我寫的函數已經自動識別中英文輸入,中英文翻譯功能其實可以合並成一個選項(3,4選項),但你題目既然要求2項目,所以沒合並。
根據題目,創建字典是覆蓋性,既每次創建輸入,都會覆蓋掉原文件,但考慮後期擴展,我的函數writeFile可以不覆蓋,在原文件後新增,具體看備注。
菜單顯示是利用遞歸函數,如果你想新增功能,參照我選項改。
(另外所有函數異常,我都是採取拋出,沒有處理,你想處理根據我的函數返回值寫處理吧!)
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define FPATH "C:\keyWord.txt"
typedef struct keyWord
{
char kwCN[20];// 中文名
char kwEN[10];// 英文名
struct keyWord *next;
}KW;
void freeKWS(KW *kwsHead);//釋放鏈表內存
int createDictionary(char *path);//創建字典。成功返回1 失敗返回0
int writeFile(char *path,KW *kwsHead,int flag);//寫入文件。成功返回1,失敗返回0。flag:0新增;1修改或刪除
KW *readFile(char *path);//讀取文件。成功返回頭節點,失敗返回NULL。
int isCN(char *strCN);//判斷字元串是否是全中文,是返回1,否返回0
void showKWS(char *path,char*keyCN,char *keyEN);//參數全部傳NULL列印整個鏈表。keyCN!=NULL列印對應英文,keyZN!=NULL列印對應中文
void showMenu(int n);//遞歸函數列印菜單,第一次調用傳值-1
void selectByKey(char *keyN);//輸入中文輸出英文,輸入英文輸出中,自動識別中英文關鍵字
int main()
{
//createDictionary("C:\keyWord.txt");
//showKWS(NULL,NULL);
showMenu(-1);
}
void showMenu(int n)//列印菜單
{
char cn[20],en[10];
switch(n)
{
case 1:
createDictionary(FPATH);
break;
case 2:
printf("當前中英文詞典的內容: ");
showKWS(FPATH,NULL,NULL);
break;
case 3:
printf("請輸入英文關鍵字:");
scanf("%s",en);
getchar();
selectByKey(en);
break;
case 4:
printf("請輸入中文關鍵字:");
scanf("%s",cn);
getchar();
selectByKey(cn);
break;
case 5:
exit(0);
break;
case -1:
while(1)
{
system("cls");
printf("|***********************電子詞典模擬軟體***********************| ");
printf("1、創建關鍵字中英文詞典 ");
printf("2、顯示關鍵字中英文詞典 ");
printf("3、輸入英文關鍵字,查閱英漢詞典 ");
printf("4、輸入中文關鍵字,查閱漢英詞典 ");
printf("5、退出 ");
printf("|*********************All rights reserved**********************| ");
printf("請選擇菜單中的1或2或3或4或5 ");
scanf("%d",&n);
getchar();
showMenu(n);
}
break;
}
n=-1;
printf("----------按任意鍵返回上級菜單----------- ");
getchar();
}
void selectByKey(char *keyN)//輸入中文輸出英文,輸入英文輸出中,自動識別中英文關鍵字
{
if(isCN(keyN))
showKWS(FPATH,keyN,NULL);
else
showKWS(FPATH,NULL,keyN);
}
int isCN(char *strCN)//判斷字元串是否包含中文,是返回1,否返回0
{
char *p=strCN;
while(*p!=0)
{
if((*p&0x80)==0x80)
return 1;
p++;
}
return 0;
}
void showKWS(char *path,char *keyCN,char *keyEN)//參數全部傳NULL列印整個鏈表。keyCN!=NULL列印對應英文,keyZN!=NULL列印對應中文
{
KW *kwsHead=NULL;
kwsHead=readFile(path);
if(kwsHead)
while(kwsHead->next)
{
if(keyCN!=NULL && keyEN==NULL && strcmp(kwsHead->next->kwCN,keyCN)==0){
printf("對應英文關鍵字:%s ",kwsHead->next->kwEN);
break;
}
if(keyEN!=NULL && keyCN==NULL && strcmp(kwsHead->next->kwEN,keyEN)==0){
printf("對應中文關鍵字:%s ",kwsHead->next->kwCN);
break;
}
if(keyEN==NULL && keyCN==NULL)
printf("%s %s ",kwsHead->next->kwEN,kwsHead->next->kwCN);
kwsHead=kwsHead->next;
}
freeKWS(kwsHead);
}
int createDictionary(char *path)//創建字典。成功返回1 失敗返回0
{
char cn[20],en[10];
KW *kwsHead=NULL,*kwTail=NULL,*kwNew=NULL;
kwsHead=(KW *)malloc(sizeof(KW));
if(!kwsHead)
return 0;
kwsHead->next=NULL;
printf("請輸入關鍵字中文及英文(每行一組空格分割,輸入NULL退出輸入): ");
while(1)
{
cn[0]=en[0]=0;
scanf("%s",cn);
if(strcmp(cn,"NULL")==0)
break;
scanf("%s",en);
if(strcmp(en,"NULL")==0)
break;
kwNew=(KW *)malloc(sizeof(KW));
kwNew->kwCN[0]=kwNew->kwEN[0]=0;
kwNew->next=NULL;
strcpy(kwNew->kwCN,cn);
strcpy(kwNew->kwEN,en);
if(kwsHead->next)
kwTail->next=kwNew;
else
kwsHead->next=kwNew;
kwTail=kwNew;
}
getchar();
return writeFile(path,kwsHead,1);
}
KW *readFile(char *path)//讀取文件。成功返回頭節點,失敗返回NULL。
{
FILE *fp=NULL;
char cn[20],en[10];
KW *kwsHead=NULL,*kwTail=NULL,*kwNew=NULL;
kwsHead=(KW *)malloc(sizeof(KW));
if(!kwsHead)
return NULL;
kwsHead->next=NULL;
fp=fopen(path,"r");
if(!fp)
{
printf("文件打開失敗! ");
return NULL;
}
fseek(fp,0,SEEK_SET);
while(fscanf(fp,"%s%s",cn,en)!=-1)
{
kwNew=(KW *)malloc(sizeof(KW));
if(!kwNew)
return NULL;
kwNew->next=NULL;
strcpy(kwNew->kwCN,cn);
strcpy(kwNew->kwEN,en);
if(kwsHead->next)
kwTail->next=kwNew;
else
kwsHead->next=kwNew;
kwTail=kwNew;
}
fclose(fp);
return kwsHead;
}
int writeFile(char *path,KW *kwsHead,int flag)//寫入文件。成功返回1,失敗返回0。flag:0新增;1修改或刪除
{
FILE *fp=NULL;
if(flag)
fp=fopen(path,"wt+");
else
fp=fopen(path,"rt+");
if(!fp)
{
printf("文件打開失敗! ");
return 0;
}
fseek(fp,0,SEEK_END);
while(kwsHead->next)
{
fprintf(fp,"%s %s ",kwsHead->next->kwCN,kwsHead->next->kwEN);
kwsHead=kwsHead->next;
}
fclose(fp);
printf("數據寫入文件成功! ");
freeKWS(kwsHead);
return 1;
}
void freeKWS(KW *kwsHead)//釋放鏈表內存
{
KW *kwDel=NULL;
while(kwsHead->next)
{
kwDel=kwsHead->next;
kwsHead=kwsHead->next;
free(kwDel);
}
free(kwsHead);
}
⑼ C語言編程題,設計英漢詞典的課設題型
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
#define min(A,B) (A<B?A:B)
#define max(A,B) (A<B?B:A)
typedef struct Dict
{
char en[30];
char zh[30];
struct Dict* next;
} Dict;
int main(void)
{
Dict* head = 0;
int stucount=0;//數量
while(1)
{
printf("輸入操作號:1:詞彙輸入 2:瀏覽 3:漢英 4:英漢 5:刪除 6:退出:");
int quest;
scanf("%d",&quest);
scanf("%*[^ ]");
if(quest==6)break;
else if(quest==1)
{
Dict* newDict = (Dict*)malloc(sizeof(Dict));
printf("請輸入中文:");
scanf("%29s", newDict->zh);
scanf("%*[^ ]");
printf("請輸入英文:");
scanf("%29s", newDict->en);
scanf("%*[^ ]");
//插入鏈表首,這樣最新添加的顯示在最上面,容易看見效果
newDict->next=head;
head=newDict;
++stucount;
}
else if(quest==2)
{
if(head==0)
printf("沒有單詞! ");
else
{
printf("開始瀏覽單詞: ");
while(1)
int st=0,en=min(st+10,stucount);
{
printf("瀏覽:%d個到%d個單詞 ",st+1,en);
Dict* stu = head;
for(int i=0; i<st; ++i)
{
stu=stu->next;
}
for(int i=st; i<en; ++i)
{
printf("中文:%s 英文:%s ",stu->en,stu->zh);
stu=stu->next;
}
printf("輸入操作號:1 向後翻頁;2 向前翻頁;-1 退出:");
int squest;
scanf("%d",&squest);
scanf("%*[^ ]");
if(squest==1)
{
if(en!=stucount) st=en;
}
else if(squest==2)
{
st=max(0,st-10);
}
else if(squest==-1)break;
en=min(st+10,stucount);
}
}
}
else if(quest==3 || quest==4 || quest==5)
{
char a[30];
if(quest==3)printf("請輸入漢語詞彙:");
else if(quest==4) printf("請輸入英語詞彙:");
else if(quest==5) printf("請輸入待刪除的詞彙(漢英均可):");
scanf("%29s", a);
scanf("%*[^ ]");
Dict* stu = head;
Dict* lststu = 0;
int flag=0;
while(stu!=0 && flag==0)
{
if(quest==3)
{
if(strcmp(a,stu->zh)==0)
{
printf("英語為:%s ",stu->en);
flag=1;
}
}
else if(quest==4)
{
if(strcmp(a,stu->en)==0)
{
printf("漢語為:%s ",stu->zh);
flag=1;
}
}
else if(quest==5)
{
if(strcmp(a,stu->en)==0 || strcmp(a,stu->zh)==0)
{
stucount--;
if(lststu!=0)
lststu -> next = stu -> next;
else
head = stu -> next;
printf("已刪除! ");
flag=1;
}
}
lststu=stu;
stu=stu->next;
}
if(flag==0)
{
printf("沒有查到詞彙! ");
}
}
}
return 0;
}
你看看對不對,能不能跑吧。如果有新的需求我可以繼續寫。代碼應該很清晰了,如果你哪不懂可以給你解釋。歡迎追問。