实验一 Linux系统
实验目的:
(1) 熟悉Linux操作系统,并尝试在Linux环境下编程。
(2) 使用vi编辑器,了解用C语言编写文本处理程序的具体过程。
实验要求:
(1)根据报告册上的提示进行操作,创建自己的目录,以及输入编译和执行C程序。
(2)使用C语言编写一个词频(限英文文章)统计程序,使之能够给出各个单词在输入文件中的出现次数。
(3)使用C语言编写一个反向打印程序,使之能够按与输入文件中文本行相反的次序来打印(即后出现的文本行先打印)。
问题分析:
1.1实验没有具体要求英语文章是从文件中读出,还是直接由用户从屏幕上输入一篇,因此要根据自己的情况确定读取方式。
1.2统计每个单词出现的次数及频率。
1.3将结果输出到屏幕上,要解决如何不重复输出相同单词出现的频率。
1.4如何把用户输入的文本行以相反的顺序输到屏幕上的算法。
实验程序清单:
#include #include void main() { char str[500][26]; //定义一个二维字符数组存放单词 const char str1[4]=\"000\"; //定义一个const变量,用于停止输入 const char str2=' '; //定义一个const变量,用于初始化二维数组 int num[500]; //定义一个整型数组,用于单词出现频率的计数 int mark[500]; //定义一个整型数组,用来标记已出现过的单词 int i,j,m,x; int len; double q[500]; //定义一个浮点型数组,用来存放出现频率的数值 again: m=0;j=0;i=0;x=0; //对m,j,i,x进行初始化 for(m=0;m<500;m++) { num[m]=0; mark[m]=0; q[m]=0; } for(m=0;m<500;m++) { strcpy(str[m],&str2); } //对num,mark,q数组初始化 //对二维数组str进行初始化 printf(\"请输入英文文章(单词数限制在500以内,每个单词不大于25个字符)\\n\"); //对用户的引导语句 printf(\"输入“000”代表文章输入终止!\\n\"); //对用户的引导语句 for(m=0;m<500;m++) //使用for循环,将用户输入的单词依次放入二维数组 { scanf(\"%s\ if(strcmp(str[m],str1)==0)//直到用户输入000,结束输入 break; } for(i=0;i for(j=0;j if(strcmp(str[i],str[j])==0) { if(j>i) //当j大于i时 { mark[i]=1; //标记此时的mark } num[i]++; //当两个单词相同,num[i]加1 } } q[i]=(double)num[i]/m; //获得单词出现的频率 } for(i=0;i if(mark[i]==0) //当标记为0时 { printf(\"%s出现%d次\ //打印结果 printf(\" 频率为%lf\\n\ } } printf(\"重新输入按1,其它键退出程序\"); //用户输入1时,程序结束;其他任意键继续操作 scanf(\"%d\ switch(x) //使用switch语句进行判断 { case 1: //当检测到x=1时 goto again; //运用goto语句返回again操作 break; default: //否则结束程序 return; } } (2) include int main() { int ch=0 ; //初始化为0 ,不然存储字符数据时可以出现问题 char character[1000]; // 定义一个字符数组 int i=0; //用i来对字符计数 printf(\"请输入需要转换的文本内容:\\n\"); //提示语 scanf(\"%c\ while(i < 1000 && ch != '\\n' )// ch读取到换行符的话就表明这一行的结束 { character[i++]=ch; //把用户输入的字符变量赋给数组character scanf(\"%c\ } i--; printf(\"转换后的文本:\"); //提示语 while(i >= 0) //当i大于等于0时,字符以倒序输出到屏幕上 printf(\"%c\ printf(\"\\n\"); return 0; } 运行结果 词频统计结果如下: 因篇幅问题不能全部显示,请点此查看更多更全内容