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