解释下面C语言程序
题目:输入任意一个英文句子,输出最长的单词..
程序:#include<stdio.h>
int zm(char ch)
{
if(ch>='a' && ch<='z' || ch>='A'&&ch<='Z')
return 1;
else return 0;
}
main()
{
char a[80];
int i,len,pos,maxpos,maxlen,flag;
printf("please input:\n");
gets(a);maxlen=0;flag=0;
for(i=0;1;i++)
{
if(zm(a[i])==1)
{
if(flag==0)
{len=1;pos=i;}
else len++;
flag=1;
}
else
{
if(flag==1)
if(len>maxlen)
{maxlen=len;maxpos=pos;}
flag=0;
}
if(a[i]=='\0')
break;
}
for(i=maxpos;i<=maxpos+maxlen;i++)
printf("%c",a[i]);
printf("\n");
}
要求.详细的解释一下这个程序的过程..从main到 printf详细的解释一下这个程序的运行过程
答案:#include<stdio.h>
int zm(char ch) /*函数功能:判断字符是不是大小写*/
{
if(ch>='a' && ch<='z' || ch>='A'&&ch<='Z') /*比较是不是大小写字母*/
return 1; /*是大小写返回1*/
else return 0; /*不是返回0*/
}
main()
{
char a[80]; /*声明一个长度为80的字符数组*/
int i,len,pos,maxpos,maxlen,flag; /*声明变量*/
printf("please input:\n"); /*提示输入*/
gets(a); /*要求输入一串字符串*/
maxlen=0;flag=0; /*maxlen为最长单词的长度,flag标志符*/
for(i=0;1;i++) /*循环开始,是一个始终为真的循环真*/
{
if(zm(a[i])==1) /*如果字符是大小写字母*/
{
if(flag==0) /*如果flag=0,则本单词结束*/
{len=1;pos=i;}
else len++; /*否则单词长度加1*/
flag=1;
}
else
{
if(flag==1)
if(len>maxlen) /*如果该单词的长度大于maxlen*/
{maxlen=len;maxpos=pos;} /*则将len的值赋给maxlen,并将单词的位置赋给maxpos*/
flag=0; /*标志置0,获取下一个单词*/
}
if(a[i]=='\0') /*如果a[i]='\0'即字符结束,则跳出循环体*/
break;
}
for(i=maxpos;i<=maxpos+maxlen;i++) /*输出最长的单词*/
printf("%c",a[i]);
printf("\n");
}
int zm(char ch)
{
if(ch>='a' && ch<='z' || ch>='A'&&ch<='Z')//判断是不是a-z和A-Z中是返回1不是返回0
return 1;
else return 0;
}
main()
{
char a[80]; //定义数组变量
int i,len,pos,maxpos,maxlen,flag; //定义变量
printf("please input:\n");//输出换行
gets(a);maxlen=0;flag=0;//输入一a给maxlen,flay付值
for(i=0;1;i++)//循环一次
{
if(zm(a[i])==1)//判断zm(a[i])是不是等于1
{
if(flag==0))//判断zm(a[i])是不是等于1
{len=1;pos=i;}
else len++;
flag=1;
}
else
{
if(flag==1)
if(len>maxlen)
{maxlen=len;maxpos=pos;}//给值
flag=0;
}
if(a[i]=='\0')
break;
}
for(i=maxpos;i<=maxpos+maxlen;i++)
printf("%c",a[i]);
printf("\n");
#include<stdio.h>
int zm(char ch)
{
if(ch>='a' && ch<='z' || ch>='A'&&ch<='Z')//如果是字母,返回一
return 1;
else return 0;//不是字母就返回零
}
int main()
{
char a[80];//存放英文句子
int i,len,pos,maxpos,maxlen,flag;
printf("please input:\n");
gets(a);
maxlen=0;
flag=0;//flag 用来标示是否读到一个新的单词了
for(i=0;1;i++)//一直循环下去
{
if(zm(a[i])==1)//进入函数,判断是否为字符
{
if(flag==0)//如果读到下一个单词了
{
len=1;
pos=i;
}
else len++;//如果还在同一个单词,则是长度增加1
flag=1;//标示仍然再度同一个单词
}
else
{
if(flag==1)
if(len>maxlen)//存放最长单词的长度和下标
{
maxlen=len;//用更长的做最大值
maxpos=pos;//记录下标
}
flag=0;
}
if(a[i]=='\0')
break;
}
for(i=maxpos;i<=maxpos+maxlen;i++)//将最长的单词逐个字母输出
printf("%c",a[i]);
printf("\n");
}
上一个:c语言万年历代码
下一个:C语言一些单词