学习杂记(1)

一些课本中的重要程序段及衍生

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;
}

猜你喜欢

转载自blog.csdn.net/m0_62167955/article/details/121057629