TCPL知识点总结(一)

变量与表达式

1 整数除法操作将执行舍位。

2 浮点常量取的是整数,在书写时最好还是为它加上一个显示的小数点,这样可以强调其浮点信息,便于阅读。

3 在允许使用某种类型变量值的任何场合,都可以使用该类型的更复杂的表达式。

for语句

4 for语句比较适合初始化和增长步长都是单条语句并且逻辑相关的情形,因为它将循环控制语句集中放在一起,且比while语句更紧凑。

符号常量

5 #define指令可以把符号常量定义为一个特点的字符串:

#define 名字   替换文本

6 符号常量名通常用大写字母拼音,这样可以很容易和小写字母拼音的变量名区别

7 #define指令行的末尾没有分号。

字符输入\输出

8 文本流是由多行字符构成的字符序列,而每行字符则由0个或多个字符组成,行末是一个换行符。标准库负责使每个输入输出流都能够遵循这一模型。

9 文件复制10 任何整型( int )也可以用于存储字符型数据。

  void main()
   {
       int c;
       c = getchar(); /*Each time it is called, getchar reads the next input
                   character from a text stream and returns that as its value*/
       while (c != EOF) {
           putchar(c);
           c = getchar();
       }
   }

11 EOF定义在头文件<stdio.h>中,是一个整型数。其具体数值并不重要,它与任何char型的值都不相同。

12 赋值可以作为更大的表达式的一部分出现。

   #include<stdio.h>
   /* copy input tooutput; 2nd version  */
   void main()
   {
       int c;
       while ((c =getchar()) != EOF)
          putchar(c);
   }

13 for循环改写

    #include <stdio.h>

   /* count characters in input; 2nd version */
    void main()
   {
       double nc;

       for (nc = 0; gechar() != EOF; ++nc)
           ;
       printf("%.0f\n", nc);/*%.0f强制不打印小数点和小数部分*/
   }

14 行计数

   /*程序虽然简单,但是确实是经典!*/
   #include <stdio.h>
   /* count lines in input */
    void main()
   {
       int c, nl;
       nl = 0;
       while ((c = getchar()) != EOF)
           if (c == '\n')
               ++nl;
       printf("%d\n", nl);
   }

15 单词计数

   #include <stdio.h>
   /*常量,让程序更易读*/
   #define IN   1  /* 在单词内 */
   #define OUT  0  /* 在单词外 */
   /* 统计输入的行数、单词数与字符数 */
   void main()
   {
       int c, nl, nw, nc, state;
       state = OUT;/*state记录程序当前是否位于一个单词之中*/
       nl = nw = nc = 0;
       while ((c = getchar()) != EOF) {
           ++nc;
           if (c == '\n')
               ++nl;
           if (c == ' ' || c == '\n' || c = '\t')
               state = OUT;
           else if (state == OUT) {
               state = IN;
               ++nw;
           }
       }
       printf("%d %d %d\n", nl, nw, nc);
   }

16 &&比||高一个优先级。由&&或||连接的表达式由左至右求值,并保证求值过程中只要能够判断最终的结果为真或假,求值就立即终止。

数组

17 统计各个数字、空白符(包括空格、制表符及换行符)及其他字符出现的次数

    #include <stdio.h>
    void main()
   {
       int c, i, nwhite, nother;
       int ndigit[10];
       nwhite = nother = 0;
       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(", white space = %d, other = %d\n",
           nwhite, nother);
   }

函数

18 C语言中,被调函数不能直接修改主调函数中变量的值,只能修改其私有临时副本的值。

字符数组

19 读入一行文本并把最长的文本打印出来。

基本框架:

   while (there's another line)
       if (it's longer than the previous longest)
           (save it)
           (save its length)
   print longest line
   #include <stdio.h>
   #define MAXLINE 1000   /* maximum input line length */
   int getline(char line[], int maxline);
   void copy(char to[], char from[]);
   /* print the longest input line */
   void main()
   {
       int len;            /* current line length */
       int max;            /* maximum length seen so far */
       char line[MAXLINE];    /* current input line */
       char longest[MAXLINE]; /* longest line saved here */
       max = 0;
       while ((len = getline(line, MAXLINE)) > 0)
           if (len > max) {
               max = len;
               copy(longest, line);
           }
       if (max > 0)  /* there was a line */
           printf("%s", longest);
       return 0;
   }
   /* getline:  read a line into s, return length  */
   int getline(char s[],int lim)
   {
       int c, i;
       for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
           s[i] = c;
       if (c == '\n') {
           s[i] = c;
           ++i;
       }
       s[i] = '\0';
       return i;
   }
   /* copy:  copy 'from' into 'to'; assume to is big enough */
   void copy(char to[], char from[])
   {
       int i;

       i = 0;
       while ((to[i] = from[i]) != '\0')
           ++i;
   }

外部变量与作用域

20 在每个需要访问外部变量的函数中,必须声明相应的外部变量,此时说明其类型。声明可以用extern语句显式声明,也可以通过上下文隐式声明。

   #include <stdio.h>
   #define MAXLINE 1000    /* maximum input line size */
   int max;                /* maximum length seen so far */
   char line[MAXLINE];     /* current input line */
   char longest[MAXLINE];  /* longest line saved here */
   int getline(void);
   void copy(void);
   /* print longest input line; specialized version */
   void main()
   {
       int len;
       extern int max;
       extern char longest[];
       max = 0;
       while ((len = getline()) > 0)
           if (len > max) {
               max = len;
               copy();
           }
       if (max > 0)  /* there was a line */
           printf("%s", longest);
       return 0;
   }
   /* getline:  specialized version */
   int getline(void)
   {
       int c, i;
       extern char line[];
       for (i = 0; i < MAXLINE - 1
            && (c=getchar)) != EOF && c != '\n'; ++i)
                line[i] = c;
       if (c == '\n') {
           line[i] = c;
           ++i;
       }
       line[i] = '\0';
       return i;
   }
   /* copy: specialized version */
   void copy(void)
   {
       int i;
       extern char line[], longest[];
       i = 0;
       while ((longest[i] = line[i]) != '\0')
           ++i;
   }

21 在源文件中,如果外部变量的定义出现在使用它的函数之前,那么那个函数就没有必要使用extern声明。因此,main,getline,copy中的几个extern声明都是多余的。

转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/45064991

时间: 2024-10-06 13:11:15

TCPL知识点总结(一)的相关文章

TCPL知识点总结(三)

坚持阅读经典代码,以下是<The C programming language>中的经典例子,每次读来都觉经典,遂摘录下来,此文为第三讲,后面讲陆续更新. 1 折半查找 /* binsearch: find x in v[0] <= v[1] <= ... <= v[n-1] */ int binsearch(int x, int v[], int n) { int low, high, mid; low = 0; high = n - 1; while (low <=

TCPL知识点总结(四)(完)

1 static类型的内部变量是一种只能在某个特定函数中使用但一直占据存储空间的变量. 2 在不进行显式初始化的情况下,外部变量和静态变量都将被初始化为0,面自动变量和寄存器变量的初值则没有定义(即初值为无用的信息). 3 打印出数字 #include <stdio.h> /* printd: print n in decimal */ void printd(int n) { if (n < 0) { putchar('-'); n = -n; } if (n / 10) printd

H5移动端知识点总结

移动开发基本知识点 一. 使用rem作为单位html { font-size: 100px; }@media(min-width: 320px) { html { font-size: 100px; } }@media(min-width: 360px) { html { font-size: 112.5px; } }@media(min-width: 400px) { html { font-size: 125px; } }@media(min-width: 640px) { html { f

Spring知识点回顾(01)

Spring知识点回顾(01) 一.依赖注入 1.声明Bean的注解 @Component @Service @Repository @Controller 2.注入Bean的注解 @Autowired @Inject @Resource 二.加载Bean 1.xml方式 - applicationcontext.xml : Beans, Bean, Component-Scan 2.注解方式 - @Configuration,@ComponentScan,@Bean 用@Configurati

Javascript易错知识点

? JS易错知识点总结: == 和 === 的区别: ==:判断两个变量的值是否相等. ===:判断两个变量的类型和值是否都相等,两个条件同时满足时,表达式为True. switch中break的作用: 如果一个case后面的语句,没有写break,那么程序会向下执行,而不会退出: 例如:当满足条件的case 2下面没有break时,case 3也会执行 1 var num = 2; 2 switch(num){ 3 case 1: 4 alert('case 1'); 5 break; 6 c

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

JavaScript一些重要知识点结合题目的表现!

function Foo() { //① 声明一个Foo的函数 getName = function () { alert (1); }; return this; } Foo.getName = function () { alert (2);}; ② 为Foo创建一个叫getName的静态属性存储一个匿名函数 Foo.prototype.getName = function () { alert (3);}; ③为Foo的原型对象创建一个叫getName的匿名函数 var getName =

学完了js的知识,一起分享总结知识点

又一个知识点学完了,到了总结学习效果和知识总结的时间了.js这个编程语言相对于html和css的逻辑性要强一些,也比较不容易上手.概念性的知识点不难理解,就是实际的操作并不容易,需要通过学习和借鉴案列来理解和帮助并提高实践操作的能力,把理论知识更好的结合到实践当中去,这样才能更有利于去理解和提高自己,做到知识的真正转化,缺乏理论概念性的支撑,有时真的很难上手,尤其是对于刚学习新手而言.所以需要总结知识点,大家可以互相分享一下学习的方式方法,知识总结,通过这种方式方法,相信可以有效的帮助解决一些学

C#高级知识点概要(1) - 委托和事件

作者:linybo 要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升.本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力了. 希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高级知识点都是要求开发时能达到可以徒手写出来的水平(不依赖搜索引擎.找笔记等