一些课本中的重要程序段及衍生
1、关于判断一个符合某条件的完整的变量串 标号的作用
//关键在于过滤条件的设定与转化,这里是很巧妙的通过w变量来实现判断一个完整的单词
#include <stdio.h> //判断有多少个单词
#include <stdlib.h>
int main()
{
char s[90];
int i,n=0,w=0;
char c;
gets(s);
for(i=0;(c=s[i])!='\0';i++)
{
if(c==' ') w=0;
else if(w==0)
{
w=1;
n++;
}
}
printf("这里有%d个单词",n);
return 0;
}
判断有多少个数(不是单个数字) 同样体现标记变量的作用,不同条件,变量的不同设置
#include <stdio.h>
#include <string.h>
int main()
{
char s[81]; //数组大小>=81,2 分
int i, n = 0, num=0; //n 初值 1 分,num 初值 1 分
gets(s); //gets 正确 2 分
for(i=0; s[i]!='\0'; i++) //循环正确 2 分
{
if (s[i]<'0' || s[i]>'9') num=0; //非数字判断,2 分
else if (num==0) //计数逻辑正确,4 分
{
num=1;
n++;
}
}
printf("%d", n);
return 0;
}
数组尽可能比原来的大,同时注意注意尽量用gets接收,scanf容易出问题,同样的问题,逻辑错误的改写:
#include <stdio.h> //注意尽量用gets接收,scanf容易出问题,然后仍然是注意计数与标记变量的问题,试着改写一下
#include<stdlib.h>
int main() //本程序深入研究一下逻辑与标号
{
char s[90];
int i,k,n=0;
gets(s);
for(i=0;s[i]!='\0';i++)
{
if(s[i]<='9'&&s[i]>='0') //这种条件的设置意为在该数结束后判断其为一个数,但是如果最
k=1; //后一位是数字,则无法判断其为一个数,从而无法将其计入总数
else if(k==1) //所以不能在其结束时进行计数,应该在该数一开始即将其计入,
{ //这样,无论最后一位是不是数字,均已经计入,如果下一位非数字
k=0; //进行的只是该节点计数结束,与字符串结束在计数上等效
n++;
}
}
printf("%d",n);
return 0;
}
修改后
#include <stdio.h> //注意尽量用gets接收,scanf容易出问题,然后仍然是注意计数与标记变量的问题,试着改写一下
#include<stdlib.h>
int main() //本程序深入研究一下逻辑与标号
{
char s[90];
int i,k,n=0;
gets(s);
for(i=0;s[i]!='\0';i++)
{
if(s[i]>'9'||s[i]<'0') //修改了条件 正确
k=1;
else if(k==1)
{
k=0;
n++;
}
}
printf("%d",n);
return 0;
}