好好学习,天天向上!

今日起,好好学习,好好工作,好好挣钱,好好生活,立贴为证!
——二零一九年十月十日
目标:
一、完成《c程序设计语言》阅读、习题。 ——2019.10.10
2019.10.10
进度:7/257=2.7%
笔记:
1.C语言版本简介
好好学习,天天向上!_第1张图片
1989年,ANSI负责起草的c语言草案在89年通过美国国家标准,被称为C89标准;
1990年,ISO 批准了 ANSI C 成为国际标准,即C90标准,在技术上和C89相同,在印刷编排上有些不一样;
1995 年,通过了一份 C90 的技术补充,对 C90 进行了微小的扩充,经过扩充后的 ISO C 被称为 C95;
1999 年,ANSI 和 ISO 又通过了最新版本的 C 语言标准和技术勘误文档,该标准被称为 C99 。这基本上是目前关于 C 语言的最新、最权威的定义了。
2011年,又发布了最新的版本。
三个标准的版本:C89\C99\C11
2.类似于\n的转义字符序列为表示无法输入的字符或者不可见字符提供了一种通用的可扩充机制。并不是“+任意字符”都表示一种字符。
3.printf函数
a.是一个通用输出格式化函数,第一个参数为格式化控制字符串,每个%号对应随后的一个参数。
b.格式字符串的形式为: % [flag] [输出最小宽度] [.精度] [长度] 类型
c.各类型格式控制字符
好好学习,天天向上!_第2张图片
flag可出现多个且无顺序要求。
好好学习,天天向上!_第3张图片
好好学习,天天向上!_第4张图片
好好学习,天天向上!_第5张图片
4.输出的数字列右对齐,可通过制定数字宽度的方式。
5.表达式中有整型和浮点型,则会先把整型转化为浮点型在进行表达式计算。

2019.10.14
进度:13/257=5%
反思:写代码前应该尽量思考清楚全面,不要去试,反复编译调试,习惯不好,还浪费时间。
笔记:
1.在允许使用某种类型变量值的地方都允许使用该类型的更复杂的表达式。
2.符号常量,使用#define定义的用大写字母拼写的表示一些常数的变量。对于代码中尽量不要出现一些幻数,如for循环的边界。 如 #define MAX_IRAID_NUM 32 注意定义没有引号
3.标准读写一个字符的函数:char c=getchar() / putchar( c ),从标准输入设备读入,输出到标出输出设备。
4.存char一般可以用int来存,在如getchar()在死循环中需要根据EOF来结束时就需要申明为int来保存读入的EOF,因为EOF被宏定义为-1。
5.赋值操作是一个表达式,具有一个值,即赋值后的左边变量保存的值。
6.仅一个分号表示空语句;%.0f强制不打印小数。
7.字符常量:用单引号引起来的字符。转义字符也是合法的字符常量。
2019.10.21
进度:13%257=5% 补充前面两次的笔记。
2019.10.22
进度:17/257=6%
笔记:
1.赋值结合次序从右至左。
2.字符其实就是整型,可以做一些运算,如+。
3.打印直方图(单词长度直方图)


#include
#define MAX_LEN 10+1
/*长度最长为10*/
int main()
{
        int c;
        int count[MAX_LEN] = {0};
        int len = 0;
        int len_max = 0;
        int i = 0;
        int j = 0;
        int count_max = 0;

        while((c = getchar())){
                if ( c == ' ' || c == '\n') {
                        count[len]++;
                        if ( len > len_max )
                                len_max = len;
                        if ( count[len] > count_max)
                                count_max = count[len];
                        len = 0;
                        if(c == '\n')
                                break;
                } else {
                        len++;
                }

        }

        for(i = count_max;i > 0;i--){
                printf("%d",i);
                for(j = 1;j < len_max + 1;j++){
                        if(count[j] >= i)
                                printf(" *");
                        else
                                printf("  ");
                }
                printf("\n");
        }

        return 0;
}

2019.10.23
进度:26/257=10%
笔记:
1.不带表达式的return将控制权返回给调用者,但不反悔有用的值。
2.main函数的调用者即执行环境,因此可以返回一个值。一般返回0表示正常终止,其他非0表示异常情况或出错结束条件。
3.函数声明可以仅指出参数类型而不指定参数名或者参数名和函数定义中的参数名不一致,但是一般都定义且保持一致。
4.c中所有函数的参数都是通过“值”传递的,函数对参数的操作并不改变原来的变量,而是修改的函数内部的一个临时的变量,即被调函数只能修改主调函数中变量的值,即使指针也是一样,不过是通过传递的这个指针去操作指向的内存,并不能修改这个传入的这个指针在主调函数中的值。
5.数组做参数,传递的是数组的首地址。
6.字符串以字符数组的形式存储,并在字符串最后加上’\0’标志字符串的结束。如果一个将一个’\0’插入到一个字符数组的中间,则其后的字符不在显示。
7.自动变量即局部变量,仅在函数或代码块中生效。
8.函数间可通过外部变量来交换数据而不是用参数表,外部变量时定义在所有函数之外且只能定义一次。
9.使用外部变量的函数则需要在函数中声明,可以显示的用extern,也可根据上下文隐式声明,但是如果是用的其他文件的外部变量,则必须声明或者使用在定义之前也必须声明。
10.通常把一些通用定义,如全局函数声明,函数声明,宏定义等定义在头文件中。
11.“定义”表示创建变量或分配存储单元,“声明”指说明变量性质,并不分配存储单元。
12.外部变量的使用也会引起一些问题,让程序的数据关系不够清晰,外部变量值的意外修改引起的问题,程序维护不好等。
13.删除c程序注释(c注释不允许嵌套)

#include

/* 最大程序长度 */
#define PROGRAM_MAX_LEN  1000

/*@fm int get_position(char *str, int pos)
 *@brief 去除注释前面的空格和制表符
 *@parm str:处理的已经输出的程序字符串 pos:起始判断位置
 *@result 字符串结束位置
 */
int get_position(char *str, int pos)
{
        for(pos;pos >= 0;pos--){
                if(str[pos] != '\t' && str[pos] != ' ')
                        break;
        }
        return pos + 1;
}

int main()
{
        char this = 0;
        char prev = 0;
        char pro[PROGRAM_MAX_LEN] = {0};
        int i = 0;
        //1表示//,2表示/**/
        int type = -1;
        /* 是否是注释,输入注释时则不保存 */
        int del = 0;

        while((this = getchar()) != EOF){
                if(del == 1){
                        if((type == 1 && this == '\n') || (type == 2 && this == '/' && prev == '*')){
                                del = 0;
                                if(type == 1)
                                        pro[i++] = this;
                                type = -1;
                        }
                }else{
                        pro[i++] = this;
                        if(prev == '/' && this == '/'){
                                del = 1;
                                type = 1;
                                i = i - 2;
                                i = get_position(pro, i - 1);
                                pro[i] = '\0';
                        }else if (prev == '/' && this == '*'){
                                del = 1;
                                type = 2;
                                i = i - 2;
                                i = get_position(pro, i - 1);
                                pro[i] = '\0';
                        }
                }
                prev = this;
        }
        pro[i] = '\0';
        printf("%s", pro);
        return 0; 
}

2020.05.14

你可能感兴趣的:(立帖为证)