C语言程序设计笔记(2017/3/27)

1.5 字符输入/输出

...上一次笔记

1.5.1 文件复制

字符在键盘、屏幕或其他任何地方无论以什么形式表现,它在机器内部都是以位模式存储的。char类型专门用于存储字符型数据,注意,任何整型也可以用于存储字符型数据。

#include<stdio.h>

/*将输入复制到输出;版本1*/

main()

{

  int c;

  c=getchar();

  while(c!=EOF){

    putchar(c);

    c=getchar();

  }

}

C语言中,在没有输入时,getchar函数返回一个特殊值EOF(end of file,文件结束,EOF定义在头文件<stdio.h>中,是一个整型数)。在声明变量c时,必须让它大到足以存放getchar函数返回的任何值,甚至是存储文件结束符EOF,所以这里不把c声明成char类型。

为了使这段程序更加精炼一些,可以改写为:

#include<stdio.h>

/*将输入复制到输出;版本2*/

main()

{

  int c;

  while((c=getchar())!=EOF){

    putchar(c);

  }

}

因为在C语言中,类似于c=getchar()之类的赋值操作是一个表达式,且具有一个值,即赋值后左边变量保存的值。

注意:赋值表达式两边的圆括号不能省略,因为不等于号的优先级比赋值运算符的优先级要高。

1.5.2 字符计数

#include<stdio.h>

/*统计输入的字符数;版本1*/

main()

{

  long nc;

  nc=0;

  while((getchar())!=EOF){

    ++nc;

    putchar(“%ld\n”,nc);

  }

}

这里引入了一个新的运算符++,其表示执行加1操作,即实现nc=nc+1。与该运算符相应的是自减运算符——。++和——既可以作为前缀运算符(++nc),也可以作为后缀运算符(nc++),但是这两种形式在表达式中具有不同的值。

该程序中使用long类型的变量存储计算值,这是因为long整数一般比int类型的长度要长,使用long类型是为了避免计算变量溢出。当然,使用double类型可以处理更大的数字。转换说明%ld告诉printf函数其对应的参数是long整型。

 

1.6 数组

首先,我们编写一个程序以统计各个数字、空白符以及所有其他字符出现的次数。

#include <stdio.h>

/*统计各个数字、空白符及其他字符出现的次数*/

main()

{

  int c,i,nwhite,nother;

  int ndigit[10];

  for (i=0;i<10;++i)

    ndigit[i]=0;

  while((c=getchar())!=EOF)

    if(c>='0'&&c<=‘9’)

      ++ndigit[c-'0'];

    else if (c==' '||c== '\n' || c=='\t')

      ++nwhite;

    else

      ++nother;

  printf("digits=");

  for(i=0;i<10;i++)

    printf("%d",ndigit[i]);

  printf(",while space=%d,other=%d\n,nwhite,nother);

}

 

posted @ 2017-03-30 11:22  kimmyfa  阅读(303)  评论(0)    收藏  举报