找个大神帮我把这段C语言程序的各个部分逻辑作用详细讲解一下

#include<stdio.h>
#include<string.h>
#define MAX_size 1000
int flag=1,degree=0;
void change(char s[])
{
int i;
for(i=0;i<=1000;i++)
{
if(s[i]>='A'&&s[i]<='Z')
{
s[i]+=32;
}
}
}
void Index(char str[],char word[],int position[])
{
int i,len_str,len_word,pos_str,pos_word,k=0,word_number=0;
len_word=strlen(word);
len_str=strlen(str);
for(i=0;i<len_str;i++)
{
while(str[i]==' '||str[i]==','||str[i]=='.')
i++;
word_number++;
for(pos_str=i,pos_word=0;pos_str<len_str && pos_word<len_word;pos_str++,pos_word++)
{
if(str[pos_str]!=word[pos_word])
break;
}
if(pos_word==len_word && (str[pos_str]=='\0'|| str[pos_str]==' '||str[pos_str]==','||str[pos_str]=='.'))
{
position[k++]=word_number;
degree++;
flag=0;
}
else
{
while(str[pos_str]!=' '&&str[pos_str]==','&&str[pos_str]=='.'&& pos_str<len_str)
pos_str++;
}
i=pos_str;
}
}
void main()
{
char str[MAX_size],word[20],ch;
int position[100],i;

int k=0; FILE *fp;
if((fp=fopen("d:\\temp.txt","r"))!=NULL)
{
while(1)
{
ch=fgetc(fp);
if(ch==EOF) break;
str[k]=ch;
k++;
}
}
change(str);
printf("请输入要检索的单词: \n");
gets(word);
change(word);
Index(str,word,position);
if(flag)
printf("您输入的单词不在短文中。\n");
else
{
printf("您输入的单词在短文中,它共出现 %-d 次\n",degree);
}
fclose(fp);
}

我们课程设计答辩要用,帮我每个部分讲一下逻辑作用吧,谢谢了,要是好的话可以加分
int flag=1,degree=0;

比如这句就讲下输入的这两个值代表什么这样

课程设计题目是这样的:在一篇文章中查找某个单词出现的次数
要求: 输入:一个文本文件和需要查找的单词 输出:单词出现的次数提示: 最好输出以文件方式,显示在屏幕上也可

可行程序网上我找到了,就是到时候答辩我要能讲出各部分的逻辑作用

以下是改写后的代码,原来的代码不能完成预定 任务。
#include <stdio.h>
#include <stdlib.h>
#define MAX_size 2000
int flag = 1,degree = 0;
void change(char s[]) { /* 将大写字母转换为小写 */
int i;
for(i = 0;s[i];i++) { /* 循环条件有改动,也很重要 */
if(s[i] >= 'A' && s[i] <= 'Z') {
s[i] += 'a' - 'A';
}
}
}
int Index(char str[],char word[]) {
int i,j,k,sum = 0;
for(i = 0;str[i];i++) {
if(str[i] == word[0]) { /* 只要当前字符与word中的相同,则继续核对其他字符。 */
k = i;
j = 0;
while((str[k] == word[j]) && (str[k] && word[j])) { /* 核对整个单词 */
++k; ++j;
}
/* 比较到word末尾后,则该单词出现次数增1. */
if(word[j] == '\0' && (str[k] > 'z' || str[k] < 'a')) {
++sum;
i = k;
}
}
}
return sum;
}
int main() {
char str[MAX_size],word[20],ch;
int sum = 0,k = 0;
FILE *fp;
if((fp = fopen("F:\\VC\\example.txt","r")) == NULL) {
printf("打开文件出错!\n");
exit(1);
}
printf("请输入要检索的单词: ");
gets(word);
change(word);
while((ch = fgetc(fp)) != EOF) {
if(ch == '\n') {
str[k] = '\0';
change(str);
sum += Index(str,word);
k = 0;
}
else str[k++] = ch;
}
if(k) {
str[k] = '\0';
sum += Index(str,word);
}
if(sum == 0) printf("您输入的单词不在短文中。\n");
else printf("您输入的单词%s在短文中,它共出现 %-d 次\n",word,sum);
fclose(fp);
getchar();
return 0;
}追问

我们老师给我的修改要求是运行之后可以先把文档内容显示在界面上,然后加上搜索完提问是否继续搜索,关闭,或者继续搜索的循环,谢谢了

追答

#include

#include
#define MAX_size 2000
int Index(char str[],char word[]) {
int i,j,k,sum = 0;
for(i = 0;str[i];i++) {
if(str[i] == word[0]) { /* 只要当前字符与word中的相同,则继续核对其他字符。 */
k = i;
j = 0;
while((str[k] == word[j]) && (str[k] && word[j])) { /* 核对整个单词 */
++k; ++j;
}
/* 比较到word末尾后,则该单词出现次数增1. */
if(word[j] == '\0' && (str[k] > 'z' || str[k] < 'a')) {
++sum;
i = k;
}
}
}
return sum;
}
int main() {
char str[MAX_size],word[20],ch;
int i = 0,sum = 0,k,an;
FILE *fp;
if((fp = fopen("F:\\VC\\example.txt","r")) == NULL) {
printf("打开文件出错!\n");
exit(1);
}
while((str[i] = fgetc(fp)) != EOF) {
putchar(str[i]);
++i;
}
fclose(fp);
str[i] = '\0';
putchar('\n');
do {
printf("请输入要检索的单词: ");
gets(word);
k = 0;
sum = Index(str,word);
if(sum == 0) printf("您输入的单词不在短文中。\n");
else printf("您输入的单词%s在短文中,它共出现 %-d 次\n",word,sum);
printf("继续请输入1,其他结束。\n");
printf("请选择 : ");
scanf("%d",&an);
}while(an == 1);
getchar();
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-15
#include<stdio.h>
#include<string.h>
#define MAX_size 1000
int flag=1,degree=0;
void change(char s[]) //大小写转换
{
int i;
for(i=0;i<=1000;i++)
{
if(s[i]>='A'&&s[i]<='Z')
{
s[i]+=32;
}
}
}

void Index(char str[],char word[],int position[]) //查找单词的功能函数
{
int i,len_str,len_word,pos_str,pos_word,k=0,word_number=0;
//len_str是文章长度,len_word是要查找的单词的长度,pos_str是用来记录当前查找文章字符串的当前位置
len_word=strlen(word);
len_str=strlen(str);
for(i=0;i<len_str;i++) //开始查找的循环,光标一个个字符向后移动查找
{
while(str[i]==' '||str[i]==','||str[i]=='.') //遇到空格和标点跳过
i++;
word_number++;
for(pos_str=i,pos_word=0;pos_str<len_str && pos_word<len_word;pos_str++,pos_word++)
{ //这个循环是从第i个字符开始向后对比len_word个长度的字符,如果每个字符都与word一样,则pos_word=len_word,期间有一个字符不一样都会跳出这个循环
if(str[pos_str]!=word[pos_word])
break;
}
if(pos_word==len_word && (str[pos_str]=='\0'|| str[pos_str]==' '||str[pos_str]==','||str[pos_str]=='.')) //如果每个字符都与word一样,则pos_word=len_word,即出现一个匹配单词,增加记录数degree。
{
position[k++]=word_number;
degree++;
flag=0;
}
else
{
while(str[pos_str]!=' '&&str[pos_str]==','&&str[pos_str]=='.'&& pos_str<len_str) //这个估计有问题,怎么应该是||运算符吧
pos_str++;
}
i=pos_str;
}
}
void main() //主函数
{
char str[MAX_size],word[20],ch;
int position[100],i;

int k=0; FILE *fp; //文件指针
if((fp=fopen("d:\\temp.txt","r"))!=NULL) //打开文件
{
while(1) //把文件中的字符串赋值给字符数组str[ ]
{
ch=fgetc(fp);
if(ch==EOF) break;
str[k]=ch;
k++;
}
}
change(str);
printf("请输入要检索的单词: \n");
gets(word);
change(word);
Index(str,word,position); //搜索你要查找的单词,如果有出现过则flag为0。
if(flag)
printf("您输入的单词不在短文中。\n");
else
{
printf("您输入的单词在短文中,它共出现 %-d 次\n",degree); //degree当然是次数啦
}
fclose(fp);
}

先写这些注释吧本回答被网友采纳
第2个回答  2012-11-15
这个代码实现就不对,为什么把人家的任意输入转换为小写,我就要匹配‘aBcD’怎么办?
还有一个需求不明,查找的单词,这个单词怎么定义为匹配上?比如说输入‘word’,前后没有字母的才是匹配“this is a word?”,这样的“my words” 能不能匹配,“word---word”这样的呢。
你不弄清楚这些问题,先不要说实现,实现了也经不起别人的询问和推敲的。

请大家帮我讲解下这个c语言每行代码都起什么作用
非标准语法的使用需要先声明int main(void) { \/\/ 这个是C程序的入口,返回值类型是int,传入参数类型void int i, j, length; \/\/ 定义变量及类型,i和j只是计数器, char temp, ch = 0; \/\/ 定义变量temp\/ch,并且给ch赋值为0 printf("Please input an uppercase letter:"); \/\/...

C语言一道简单的代码,麻烦帮我解析一下,我表示看不懂。。。
if(x<y) 由于10<20,所以 跳到if(!ok1) 这里ok1=5 表示非0 ,所以 !ok=0,所以程序接着执行else后面的 if(ok2) 因为ok2=0;所以接着执行a=-1 整个流程是:if (x<y)->if(!ok1)->else->if(ok2)->a=-1

这是个调速系统的C语言程序,谁能帮我注解一下各语句的主要功能
呵呵,这个是一个单片机的问题,我可以给你解释,但是必须把分给我 include <reg51.h> 头文件包含 include <math.h> define uchar unsigned char 用Uchar 定义unsigned char define uint unsigned int define ON 0 \/\/电动机开关的宏 define OFF 1 sbit PWM=P3^5; \/\/与电动机通信的端口...

高手们帮我看看c语言程序,请给每行代码和功能注释
顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的...

C语言,可以的话讲一下每一步呗。求大佬帮忙
2、圆环参数需要输入,因此要定义一个输入函数,负责输入参数,验证参数,并存储到对应的结构变量。3、解析功能需求,实现体积和面积分别需要计算圆的面积、周长和柱侧面积。所以程序应包含所有实现功能的函数,分别为:计算圆面积,计算圆周长,计算圆柱侧面积,计算圆柱体积。(这里部分函数很简单,你可能想...

C语言高手帮我看看这个break的作用,请说的具体点
i];a[i]=number;} \/\/这里的 } 可以省略 for(j=i+1;j<11;j++){ temp2=a[j];a[j]=temp1;temp1=temp2;} break;\/\/开始自己写的没有这个break,运行就错了 } \/\/ end of for 这样这一段的逻辑就清楚了: 在找到输入的位置后, 把当前位置的数往后移,然后就可以结束了 (break)...

C语言的题,都不难,帮忙解答,追加悬赏喔。麻烦把各个选项都解释解释最好...
这段程序,中fun函数的作用是;首先有个char型指针数组s[]参数,还有一个n表示长度,从数组(每个数组元素中存放的是字符串)的下标为0的元素开始到下标为n-1的元素为止一共n个元素,依次与该元素后面的一共n-1个元素进行比较(比较数组元素中的字符串),就是s[0]要和s[1]到s[n—1]中的每个...

哪位大哥大姐能帮我把这个程序代码解释一下,尤其是clock,rand函数的作...
clock()是C\/C++中的计时函数,该函数返回值是硬件滴答数,要换算成秒或者毫秒,需要除以CLK_TCK或者 CLOCKS_PER_SEC。而与其相关的数据类型是clock_t,clock_t其实就是long,即长整形。其中clock_t是用来保存时间的数据类型,typedef long clock_t clock_t是一个长整形数。在time.h文件中,还...

C语言,帮我解释一下,看不懂
第1句,由于程序中使用printf语句,这句包含stdio.h头文件就是向编译程序说明这个函数的调用规则,具体可以百度百科printf,那里告诉你这个函数必须要引用的头文件 第2句,main函数是你的程序开始位置,程序从这里开始执行,前面的void修饰表示这个函数不返回任何值,也说明函数的返回(结束)语句可以写return;...

关于c语言程序设计的问题求大神帮忙!万分感谢!
(1)编辑(把程序代码输入,交给计算机)(2)编译(成目标程序文件.obj)编译是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码...

相似回答
大家正在搜