Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2994
  • 博文数量: 4
  • 博客积分: 220
  • 博客等级: 二等列兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-16 09:59
文章分类
文章存档

2010年(4)

我的朋友
最近访客

分类: C/C++

2010-07-16 11:39:01

chapter 1:a tutorial introduction/导言


1.C语言程序是由函数和变量组成。

2.在printf中,只能用\n表示换行。
    printf("hello,world
    ");
  像上面通过程序的换行代替\n,C编译器会产生一条错误信息。

3.在定义的转义字符序列之外的,比如\y等,他们的行为都是未定义的,输出内容与具体的编译器有关。一般,  打印输出会跳过\,输出后面的字符y。

4.C中,所有变量都必须先声明后使用。

5.建议:每行只写一条语句,并在运算符俩边各加上一个空格字符,使结合关系更加清楚。

6.整数除法操作执行舍位,结果中的小数部分被舍弃 ,5/9 = 0

7.在printf参数中,指明打印宽度,则打印内容会在打印区域内右对齐。%m.nf,表示至少打印m宽度,小数部分强制打印n位。

8.printf支持的打印格式:%o 8进制(字母o) %x 十六进制 %c 字符 %s 字符串 %p 表示指针地址%ld 表示long 整型。

9.for(i = 0; i <= 4; i++) {
    printf("...");
}首先进行初始化i = 0;然后判断条件,如果成立则执行花括号中语句,执行完了之后,进行i++操作。

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

11.#define 名字  替换文本  增加程序可读性和维护性只替换引号以外的名字,如果在引号内,不进行替换。

12.标准库按字符流进行处理,简化了模型。提供了一次读写一个字符的函数:getchar 和putchar 。c = getchar();putchar(c);先读入一个字符,然后 输出。此时,getchar函数已经从文本流中读入下一个输入字符。也就是自动读入下一个字符。

13.getchar putchar 举例:文件复制。这俩个函数包含在stdio.h中
main() {
    int c;
    while ((c = getchar()) != EOF) {
      putchar(c);
    }
}  字符不论以什么形式表现,在机器内部都是以位模式存储的。char类型专门用于存储字符型数据,int也可以用于存储字符型数据。在这里,我们定义c为int型,是因为要让c足够大,除了能存储任何可能的字符外,还要能存储文件介绍符EOF。因此声明 c 为int类型。

14.在stdio.h中,EOF(end of file)是一个宏定义。#define EOF %d   也就是说EOF是一个具体的整形数,与任何char类型的值都不相同。使用EOF等标准符合常量,增加了程序的可移植性。使用符号常量,确保程序不依赖于其对应的任何特定的数值。在openSUSE中,ctrl+d 是EOF的结束标志,可以使程序正常退出循环。一般,-1 == EOF;
 
15.++n 通常比n = n + 1 精炼且效率更高一些。

16.注意,C语言的语法规则要求for循环语句必须有一个循环体{},可以用单独的分号;代替。 比如:
for(nc = 0; getchar()!= EOF ;nc ++)  // count the characters
    ;   我觉的还是写{}好一些,便于以后的修改;

17.‘A’ == 65 是字符常量,只不过是小的整型数的另一种写法而已。在字符处理中,用‘A’要比65好,因为更清楚,且与特定的字符集无关。

18.
对于一些if-else的嵌套,应该尽量把那些出些概率高的情况,依次放在前面的if判断语句中。


19.题目:将输入复制到输出,并将连续的多个空格用一个代替:getchar putchar
#include
#define NONBLANK   'A'  //replace string of blanks with a single blank
main() {                //宏定义只要不让NONBLANK为空格‘ '就可以了。
    int c, lastc;     //the previous c is saved in lastc
    lastc = NONBLANK;
   
    while ((c = getchar()) != EOF) {
        if (c != ' ' || lastc != ' ')
             putchar(c);
        lastc = c;
    }
}   the function of getchar() reads the char stream one by one,if not blank,putchar(c).if is blank ,judge the char ,whether it is same to the lastc stored in .if it has store one time ,and it be saved in lastc.and nothing to do .then exeute the lastc = c; it means eat up the blank.record the precious char in a variable is a method.

20.在printf中,如果输出一个\,那么可以写printf("\\,\\\");都可以,如果输出俩个\就要输入4个反斜杠或者更多的反斜杠。如果输入printf("\");会有个警告:unknown escape sequence 即未知的转义序列。

21.UNIX系统中WC程序骨干部分:nl 表示行 nw 单词数 nc 字符数
#define IN   1
#define OUT 0
main(){
    int c,nl,nw,nc,state;
    state = OUT;
    nl = nw = nc =0;
    while ((c = getchar()) != EOF) {
        ++ nc;
    if (c == '\n') ++nl;
    if (c == '\n' || c == '\t' || c == ' ') state = OUT;
    else if (state = OUT) {
               state = IN; ++nw;
       }
    }
  printf("%d %d %d\n",nl,nw,nc);
}  可以使用连等号实现一次赋值; &&比||高一个优先级;状态位的设置;

22.c = getchar() 接收到的数字按ASCII存储。0 对应的是 48,1对应 49.
if (c >= '0' && c <= '9') ++array[ c - '0'];如果输入的是数字,则先转换成ASCII码,如果在48和57之间,则判定其为数字,然后用c - ‘0’,转成数字。那么,定义array【10】就可以了。

23.建议:if()
        else if()
        else if()
        else 。。。  采用这样的缩进可以体现出了层次关系,即使较长的判定序列也不会超出页面。

24.不同函数内部的变量名字可以一样,不会冲突。只对内部是可见的。在main函数中包含,return 语句,是程序向系统(执行环境)反回状态。一般返回0 表示成功虽然在函数声明中,可不写参数名,但是好的参数名可以起到很好的说明性作用。

25.C中,被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。实参是对形参的初始化。当把数组名作参数时,传递给函数的值是数组起始元素的地址,他并不复制数组元素本身。

26.通过循环语句给一个数组赋值时,在最后要加一个空字符 ‘\0’,该值为0。 array[i] = '\0';

27.函数中每个局部变量只在函数被调用时存在,函数执行完毕退出时消失。但是定义在所有函数之外的外部变量只能定义一次。分配在静态存储区,不会
消失。不推荐使用外部变量。













阅读(348) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:值得一试的VIM快捷

给主人留下些什么吧!~~