此处主要以统计字符的个数,单词的个数,行数来练习一些递增的规则和while循环还有for循环
首先写一个统计字符数的小程序,示例如下:
[root@CWG hc]# cat zftj.c
#include <stdio.h>
main()
{
long C_NUM = 0; //声明一个长整形来统计字符的个数,int的长度不够会出现计算溢出的情况
while (getchar() != EOF) //如果getchar获取的值不等于文本结束符的话 就执行循环体
++C_NUM; //”++“ 这个运算等同与 +1,++a == a+1,a++ == a+1,而a++ != ++a 在赋予变量的时候b = a++;是先将a的原始值赋予b之后变量a再执行运算,b = ++a;是先将a++运算完之后,再将a的值赋予b变量
printf("%d\n", C_NUM); //最后打印处C_NUM 所统计的数值
}
getchar每获取一个不等与EOF的值,C_NUM的值就+1,当输入文本结束符的时候此程序将打印处最后C_NUM 所统计的值
结果如下:
[root@CWG hc]# ./zftj
kkk //输入三个k
d //输入了一个d
6 //3+1=4,为什么会打印处6呢?因为没此当我们输入完字符后会输入一个回车符“\n”,此处也统计成了一个字符,所有3+1+2 =6
[root@CWG hc]# ./zftj
cc
3 //此处只统计了一个回车符号,所以是2+1=3
有于双精度浮点型的变量比long长整形的更长,范围更大,所有下个用双精度浮点型(double)来运算这个字符统计程序,同时并练习for循环:
[root@CWG hc]# cat fzftj.c
#include <stdio.h>
main()
{
double C_NUM; //声明一个double类型的变量
for (C_NUM = 0; getchar() != EOF; ++C_NUM) //首先初始化C_NUM的值为0,然后循环条件为getchar函数获得的值不等与EOF,如果执行一次函数体,则C_NUM加1
; //循环体为空,所以不执行任何操作,只是继续循环条件的变更
printf("%.0f\n", C_NUM); //最后打印处C_NUM统计的参数
}
我们将它编译为fzftj,和以上zftj执行的结果一样
以上是字符的个数统计,每一个字符,统计的值++即可,下边我们来统计行数,每行的行末将是一个为“\n”的换行符,一次为据来写这个程序
[root@CWG hc]# cat tjhs.c
#include <stdio.h>
main()
{
int LIN, i;
LIN = 0;
while ((i = getchar()) != EOF) //如果i的值是getchar获取的值,如果getchar获取的值不等与文本结束符,就执行循环体
if (i == '\n') //如果循环条件成立,则判断i的值是否等于换行符“\n”如果是就是另起一行,所以LIN加1
++LIN; //LIN加1
printf("%d\n", LIN); //打印处LIN最后统计的值
}
运行结果是:
[root@CWG hc]# ./tjhs
rrr //输入一行
hello //在输入一行
2 //统计结果为一共两行
下边我们将看一个能统计行数,能统计字符个数,还能统计单词个数的程序
[root@CWG hc]# cat sumtj.c
#include <stdio.h>
#define IN 1 //定义一个字符常量OUT
#define OUT 0 //定义一个字符常量IN
main()
{
int c, hang, ci, gs, zt;
zt = OUT; //将状态的初始值设置成OUT
hang = ci = gs = 0; //将行,单词,字符的个数初始值都设置成0
while ((c = getchar()) != EOF) {
gs++; //每次输入gs都+1统计字符个数
if (c == '\n') //每次输入换行符行数+1
hang++;
if (c == ' ' || c == '\n' || c == '\t') //“||”是或者的意思,如果输入是空格,或者换行符,或者制表符的话设置zt的状态为OUT,如果下次输入不是EOF还能到这儿,而且到这儿输入的不是空格,或者制表符或者换行的话,就算有一个单词了,到这而zt的状态为OUT
zt = OUT;
else if (zt == OUT) {
zt = IN; //状态归位
ci++; //单词的个数+1
}
}
printf("hang %d, danci %d, zifu %d\n", hang, ci, gs);
}
程序的描述大概是这样的,while循环中不管怎么样,只要有输入则gs+1,如果有换行,则行数+1,如果输入是空格,或者制表符或者换行的话就将zt的状态设置为OUT,当if成立了之后else if则不运行开始下一轮的循环,下一轮循环循环到最后一个if的时候,如果输入的是空格,或者制表符或者换行的话继续将zt的状态设置为OUT,如果不是的花判断上一个输入是不是空格,或者制表符或者换行,此处判断这一条件只需要判断zt的状态如果是out则上此的输入是空格,或者制表符或者换行则ci的值+1,如果IN的花就说明上次的输入不是空格,或者制表符或者换行符,所有这个字符和上个单词是同一个单词因此不用加ci的值。
执行结果如下:
[root@CWG hc]# ./sumtj
hh hh
dd
wocaole de
hang 3, danci 5, zifu 20
3行,5个单词,20个字符(算上换行)
以上组要讲了++n的概念,||运算的概念,if简单的判断的概念
####################################
迷途小运维学习C语言笔记
作者:john
转载请注明出处