标签:
工作两年来,从事过机顶盒代码维护、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