您当前的位置:首页 > 今日分享头条 > 正文

con和com的前缀区别背单词时总是搞不清什么时候是con什么时候是com之后找到了不同之处,c?问题描述]读入一个C程序,统计程序中代码、注释

本文目录

  • con和com的前缀区别背单词时总是搞不清什么时候是con什么时候是com之后找到了不同之处,c
  • 问题描述]读入一个C程序,统计程序中代码、注释

con和com的前缀区别背单词时总是搞不清什么时候是con什么时候是com之后找到了不同之处,c

区分英语单词前缀是com,还是con一般取决于后续词根的首字母。

1、如果后续词根首字号为b,p,m前面就用com;

2、如果后续词根菌开手不是b,p,m,且为r,l之外的字手前面就用con-。con-con是拉丁语前缀,有with,together的意思,中文意思为“共同,互相,一起”。例如: conclude结束;总结(con+clude关闭一全部关闭结束)。

confirm坚定证实(con+ firm坚定),condense凝结;浓缩(con+dense浓密的),consolidate巩固,加强(con+solid坚固+ate-成为大家的财产-没收),conflict冲突( con+ flict打-一起打斗一冲突)。

com-和com的关系com和con-意思是一样的,只是因为在b,p, m前发m音更方便,所以这些音前的con-变为com。 可以把com-看成con-的一个变体。例如: combine联合,结合(com+bine插捆在一起-结合;compassion同情com+passion爱国者一同胞)。

con-的其它常见变体con的常见变体com col。, cor。选择哪个变体形式,取决于后续词根的首字母,一切都是为 了拼写和拼读的方便, 意思上没什么区别。

扩展资料:

 一个英语单词可以分为三个部分:前缀(prefix),词根(stem)及后缀(suffix)。单词中位于词根前面的部分就是前缀。前缀,可以改变单词的意思。

常见的前缀有如下几类:

第一类:表示正负(或增减)的,如:un- in- im- il- ir- non- mis- mal- dis- anti- de- under- re- over-等;

第二类表示尺寸的,如:semi- equi- mini- micro- macro- mega-等;

第三类表示位置关系。如:inter- super- trans- ex- extra- sub- infra-peri-等;

第四类表示时间和次序,如:ante- pre- prime- post- retro-等;

第五类表示数字,如:semi- mono- bi- tri- quad- penta-hex- sept(em)- oct- dec- multi- 等;其它类别,如:pro- auto- co- con-等。

问题描述]读入一个C程序,统计程序中代码、注释

#include《stdio.h》#include《stdlib.h》#include《string.h》#define TRUE 1#define FALSE 0#define BOOL int#define MAXSIZE 5000#define COUNT 20 // 可以统计的最大的文件个数#define LEN 20 // 文件名的最大长度 #include《stdio.h》#include《stdlib.h》#include《conio.h》 voidcheckfile(char *filename,int i);voidanaly(char filename,int n);BOOLGetIn(int *n);//函数属性结构typedefstruct { char filename; //每一个函数的名字 int length; //每一个函数的长度 int pos; //每一个函数的位置}Fun;//统计结构的声明typedefstruct { int comments; //纯注释的个数 int comment; //混合注释个数 int blank; //空行的个数 Fun fun; //函数的属性 int others; //除去函数中代码外其余的代码个数 int funcount; //函数的个数}Analy;//串的基本操作ADT//检测是否为空串BOOLStrEmpty(char *s){ if(s==’\0’) return TRUE; return FALSE;}//查看S1中是否有值为S2的子串,若有则返回第一个子串的位置,若无则返回-1;intFind(char *s1,char *s2){ int i = 0,j = 0; if(strlen(s1) 《 strlen(s2)) return -1; while (s1!=’\0’) { if(s1) { i++; j++; if(s2==’\0’) return i-j; continue; } i++; j=0; } return -1; }//读取文件中的一行字符voidHaveLine(FILE *fp,char *s){ while(!feof(fp)) { *s = fgetc(fp); if(*s==’\n’){ //若是一行的结尾则表示取完了一行 *s=’\0’; return; } s++; } *s = ’\0’;}//忽略一行字符开头的空格和tab,返回截断后上的串指针char*IgnoreB(char *s){ while (*s== ’ ’ || *s== ’ ’) s++; return s;}//判断一行字符是不是注释intIsCom(char *s){ int posc,pos1,pos2; s= IgnoreB(s); posc = Find(s,“//“); if(posc == 0)//此行仅有注释,无代码; return 1; if(posc == -1) return 0; pos1 = Find(s,“\““); pos2 =Find(&s,“\““); if(posc 》 pos1 && posc 《 pos2) return 0; return 2; }//判断一行字符是不是空白BOOLIsBlank(char *s){ s= IgnoreB(s); if(*s== ’\0’) return TRUE; return FALSE;}intIsFunB(char *s){ int i,j,pos,pos2; //有分号,if while for的不是函数开头 if(Find(s,“;“) != -1 ||Find(s,“if“) != -1 || Find(s,“for“) != -1 ||Find(s,“while“) != -1||Find(s,“switch“) != -1) return FALSE; //没有小括号的不是函数开头 if((pos = Find(s,“(“)) == -1) return FALSE; s = IgnoreB(s); i = Find(s,“ “); j = Find(s,“ “); if (i != -1 && j != -1) i = i 》 j ? j : i; else if (i == -1) i = j; else if (1 == -1 && j == -1) return FALSE; if (i 》 pos) return FALSE; s = &s; s = IgnoreB(s); pos2 = Find(s,“(“); if(*s == ’\0’ || *s == ’(’ ||pos2 》 pos) return FALSE; return TRUE;} voidprintR(int aver ,int comc,int blanks ){ //按代码级别判定标准输出分析结果 int i; char Grade = {“A:Excellent“,“B: Good“,“C: just So-So“,“D:Bad“};//定义四个级别段 //判定代码的级别 if (aver 《= 15 && aver 》=10) i = 0; else if((aver 《=20 && aver 》=16) || aver 《= 9 && aver 》= 8) i = 1; else if((aver 《=7 && aver 》=5) || aver 《= 24 && aver 》=21) i = 2; else if ((aver 《5) || (aver 》 24)) i = 3; printf(“ Grade %s routine code style\n“,Grade); //判定注释的级别 if (comc《= 25 && comc 》= 15) i = 0; else if((comc 《=14 && comc 》=10) || comc 《= 30 && comc 》=26) i = 1; else if((comc 《=9 && comc 》=5) || comc 《= 35 && comc 》=31) i = 2; else if((comc 《5) || (comc 》 35)) i = 3; printf(“ Grade %s routine commenting style\n“,Grade); //判定空行的级别 if (blanks 《= 25 && blanks 》=15) i = 0; else if((blanks 《=14 && blanks》= 10) || blanks 《= 30 && blanks 》=26) i = 1; else if((blanks 《=9 && blanks》= 5) || blanks 《= 35 && blanks 》=31) i = 2; else if((blanks 《5) || (blanks 》 35)) i = 3; printf(“ Grade %s white spacestyle\n“,Grade);}//打印输出结果voidprint(Analy *An){ int sum = 0,funcode = 0; int i, comc , blanks, aver ,code; for(i = 0;i 《 An-》funcount ;i++)//求函数的代码总数 funcode += An-》fun.length; //求所有的代码总数 sum += An-》blank; sum += An-》comments; sum += An-》comment; sum += An-》others; sum += funcode; if(sum == 0)//防止除数sum为0 sum = 1; if(An-》funcount == 0)//防止除数m为0 aver = 0; else aver = funcode/An-》funcount; comc = (An-》comments +An-》comment)*100/sum; blanks = ((An-》blank)*100)/sum; code = 100 - comc - blanks; //((funcode + An-》others)*100)/sum; printf(“ 程序源代码分析结果如下所示\n\n“); printf(“ 代码行数: %d\n“,sum -An-》blank - An-》comment - An-》comments); printf(“ 注释行数: %d\n“,An-》comments +An-》comment); printf(“ 空行数: %d\n“,An-》blank); printf(“ 代码 注释 空行\n“); printf(“ ***** ****** ******\n“); printf(“ ***** ****** ******\n“); printf(“ %d%% %d%% %d%%\n“,code,comc,blanks); printf(“ The program includes %d functions\n“,An-》funcount); printf(“ The average length of section of function is %d\n“,aver); printf(“\n“); //按代码级别判定标准输出分析结果 printR(aver,comc,blanks);} voidcheckfile(char *filename,int i){ FILE *fp; while((fp = fopen(filename,“r“))== NULL) { printf(“对不起!文件不存在%s\n“,filename); printf(“\n请重新输入第%d个源文件: “,i+1); scanf(“%s“,filename); }}BOOLGetIn(int *n)//规范输入的数据,只能为数字{ char c; *n = 0; fflush(stdin); c = getchar();//当输入一串数据并按回车后,getchar()取出缓存队列中的第一个字符 while(c != ’\n’){ if(c == ’0’ && n == 0) printf(“输入有误!请重新输入....\n“); if(c 》= ’0’ && c 《= ’9’) *n = (*n) * 10 +c - 48; else{ printf(“输入有误!请重新输入....\n“); fflush(stdin);//清空(刷新)缓存里的内容,以防被下次getchar()取用 return FALSE; } c = getchar(); } return TRUE;}voidanaly(char filename,int n){ FILE *fp;//分析源文件指针 FILE *fpp;//日志文件指针 Analy An;//程序统计结构体 char s;//存储每行的文件 BOOL begin = 0,start = 0;//设置函数开始标记 int i,j = -1,pos = 0;//函数的位置 长度信息 //c检测函数内大括号的匹配,comtype是注释的类型 int c=0,comtype; An.blank = 0; An.comments = 0; An.comment = 0; An.others = 0; An.funcount = 0; if((fpp =fopen(“log.txt“,“w“)) == NULL)//建立日志文件 printf(“cannot open the file%s\n“); for (i = 0 ;i 《 n; i++)//遍历所有的文件 { if((fp =fopen(filename,“r“)) == NULL) { printf(“cannot open the file%s\n“,filename getchar(); exit(0); } pos = 0; //函数在新一个文件中的位置初始化 while (!feof(fp)) { HaveLine(fp,s); //从文件中读取一行数据 pos++; //每个函数在文件中开始的位置 //分类统计文件中的代码个数 comtype = IsCom(s); if (comtype ==1) { An.comment++; continue; } if (comtype == 2) An.comments++; if (IsFunB(s)) { fprintf(fpp,“%s\n“,s);//提取每个函数的名字写入到文件 j++; //j为函数的个数-1; c = 0;//大括号个数初始化为0 begin = TRUE; strcpy(An.fun);//记录函数在哪个文件中 An.fun.pos = pos; An.fun.length = 1; } else if(IsBlank(s)) An.blank++; else if(begin){ An.fun.length++; if (Find(s,“{“) !=-1) //检测是否进入到了函数体内 { c++; start = TRUE; } if (Find(s,“}“) != -1)//检测是否一个函数的结束 c--; if (c==0 && start) { begin = FALSE; start = FALSE; } } else An.others++; } fclose(fp);//关闭分析文件 } fclose(fpp);//关闭日志文件An.funcount= j+1; //把函数的个数保存print(&An); //打印分析结果} voidmain(){ int n,i; char c; char filename; printf(“\t-------------------------------------------------------------\n“); printf(“\t 程序源代码分析软件 BY 沈航电子信息工程学院--王盼 \n“); printf(“\t--------------------------------------------------------------\n“); while(1){ n=0; printf(“\t\t\t**********程序分析*********\n“); printf(“请输入您要分析的源文件的个数: “); while(!GetIn(&n) || n 《= 0){ printf(“请输入您要分析的源文件个数:“); } for(i = 0 ;i 《 n ;i++) { printf(“\n请输入第%d个源文件: “,i+1); scanf(“%s“,filename); checkfile(filename,i); fflush(stdin); } analy(filename,n); printf(“\t********您需要继续使用本软件吗?Y/N***********\n“); c =getchar(); if(c == ’Y’ || c == ’y’) continue; break; }}


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 插卡游戏机游戏大全集(有谁知道几款以前插卡式游戏机的经典游戏!)

下一篇: 东北菜菜谱大全做法(东北简单菜谱大全做法)



推荐阅读