码迷,mamicode.com
首页 > 其他好文 > 详细

快速认知篇

时间:2015-06-06 01:40:22      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

  工作两年来,从事过机顶盒代码维护、EPR软件编写和单片机开发等工作,始终心系C和Linux这条线路,但认识的比较肤浅,从没系统的吸收钻研。这是几篇重学C语言的系列文章,基本是读书笔记了,目的是对C有个系统的认识,理解书中的代码实例,作为以后编程的思维根基。

  PS:

  1 参考书目《C语言程序设计(第二版·新版)》 作者:Brian W.Kernighan Dennis M.Ritchie;

  2 参照书中所给方式,先有小demo,再对其分析;

  3 编译环境:Ubuntu GCC;编辑器:VIM;

  4 文章会忽略程序的一些细节,这些细节在您写代码是遇到会有编译提示,自行修改。

一、HeyGirl.c

  

1 #include <stdio.h>
2 
3 int main(int argc,char **argv)
4 {
5      printf("Hey Girl!\n");
6      return 0;          
7 }

  用 vim  HeyGirl.c创建源文件,保存后 gcc HeyGirl.c编译;若无编译错误,生成 a.out 可执行文件,运行该文件 ./a.out。命令行输出:Hey Girl!

二、far2cel.c

 

 1 #include <stdio.h>
 2 
 3 #define MAX 300
 4 #define MIN 0
 5 #define STEP 20
 6 int main(int argc,char **argv)
 7 {
 8   int fahr, celsius;
 9   int lower, upper, step;
10   lower = MIN;
11   upper = MAX;
12   step = STEP;
13   fahr = lower;
14   while (fahr <= upper)
{
16 celsius = 5 * (fahr-32) / 9; 17 printf("%d\t%d\n", fahr, celsius); 18 fahr = fahr + step; 19 } 20 }

  这段代码要说的有这几点:#define 宏定义指令,定义了后面字符串的值或表达式,引用的时候应用字符串就可以,在预处理过程中会将宏替换成他们的定义。

              数据类型:

                  char 字符型1B

                  int 整型

                  short (int) 短整型

                  long (int) 长整型

                  float 单精度浮点型

                  double 双精度浮点型

                  类型具体的字节数由实现而定,取值范围请自行查找;

              while(条件)循环:若条件成立,执行循环体,不成立,不执行;

三、cp.c v1

 

 1 #include <stdio.h>
 2 
 3 int main(int argc,char **argv)
 4 {
 5     int c;
 6 
 7     while((c = getchar()) != 0)
 8     {
 9         putchar(c);
10     }
11     printf("\n");
12     return 0;
13     
14 }

   这段出彩的地儿是getchar()和putchar()两个字符输入输出函数。可以用它们来得到文本中的字符流,输出字符流到显示设备等。

  getchar()的返回值是字符,但为甚我们要用int,书中明确书了,当check到文本末尾时会有个EOF(END OF FILE)字符,该字符超出了char的范围,用int能存储所有的返回类型,EOF == -1。

  借助这两个函数以在不了解I/O情况下写出惊人数量代码,基本思想就是上面片段那样,一个字符一个字符的获取,同时复制到输出函数中。下面是四个经典的小程序,简单剽悍,值得背诵。

  a b c三个程序中都用字符‘0‘代替了文本终结符EOF,方便在命令行测试程序。

a 统计字符个数

 1 #include <stdio.h>
 2 
 3 int main(int argc,char **argv)
 4 {
 5      int nc;
 6      int c;
 7  
 8     nc = 0;
 9     while((c = getchar()) != 0)
10     {
11         nc++;
12     }  
13     printf("nc == %d\n",nc);
14    return 0;
15 }

 b 统计行数

 1 #include <stdio.h>
 2 
 3 int main(int argc,char **argv)
 4 {
 5     int nl;
 6     int c;
 7 
 8     nl = 0;
 9     while((c = getchar()) != 0)
10     {
11         if(c == \n)
12             nl++;
13     }
14     printf("nl == %d\n",nl);
15     return 0;
16 }

 c 字符串计数

#include <stdio.h>

#define OUT 0
#define IN 1

int main(int argc,char **argv)
{
       int c;
       int nw;
       int nl;
       int nc;
       int state;

       state = IN;
       nc = nl = nw = 0;
       while((c = getchar()) != EOF)
       {
            nc++;
            if(c == \n)
                nl++;
            if(c ==  || c == \t || c == \n)
            {
                  state = OUT;
            }
             else if(state == OUT)
            {
                  nw++;
                  state = IN;
            }
       }
         printf("nc:%d,nl:%d,nw:%d\n",nc,nl,nw);
         return 0;
}

   以上的文字主要还是概述,几个demo都非常经典,无论会不会编写我决定要把他们背下来。

快速认知篇

标签:

原文地址:http://www.cnblogs.com/shuk-notes/p/4553647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!