• 01.由一个程序开始(一)


    第一次听说这本书时,本以为只讲解指针,看了作者前言后才明白,原来也是系统学习C的书籍,只不过全书都贯穿

    了指针而已
    基础的重要性:
        什么事基础?就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理等课

    程学好,对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能等要有深层次的掌握.
       对基础的学习就是内功,只注重招式而内功不扎实是不可能成为高手的.
       编程就好比盖高楼,根基没打好早晚有一天会垮掉,而且盖得越高,损失也越惨重。
    1.1简介
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define MAX_COLS 20
    #define MAX_INPUT 1000

    int readColumnNumbers(int columns[],int max);
    void rearrange(char *output,char const *input,int nColumns,int const columns[]);

    int main()
    {
        int nColumns;
        int columns[MAX_COLS];
        char input[MAX_COLS];
        char output[MAX_INPUT];

        nColumns = readColumnNumbers(columns,MAX_COLS);
        while( gets ( input ) != NULL )
        {
            printf("Original input : %s\n",input);
            rearrange(output,input,nColumns,columns);
            printf("Rearrange line: %s\n",output);
        }

        return EXIT_SUCCESS;
    }

    int readColumnNumbers(int columns[],int max)
    {
        int num = 0;
        int ch;

        while(num<max && scanf("%d",&columns[num])==1 && columns[num] >= 0)
        {
            num += 1;
        }

        if(num % 2 != 0)
        {
            puts("Last column number is not paired.\n");
            exit(EXIT_FAILURE);
        }

        while( (ch=getchar()) != EOF && ch != '\n' );

        return num;
    }

    void rearrange(char *output,char const *input,int nColumns,int const columns[])
    {
        int col;
        int outputCol;
        int len;

        len = strlen(input);
        outputCol = 0;

        for(col=0;col<nColumns;col+=2)
        {
            int nchars = columns[col+1] - columns[col]+1;
            if(columns[col] >= len || outputCol == MAX_INPUT - 1)
            {
                break;
            }

            if(outputCol+nchars > MAX_INPUT - 1)
            {
                nchars = MAX_INPUT - outputCol - 1;
            }

            strncpy(output + outputCol,input + columns[col],nchars);
            outputCol += nchars;
        }

        output[outputCol] = '\0';
    }

    空白和注释
       程序员要有自己的风格,最好是使代码清晰易懂。学会在必要出加上注释
       在C语言中我们经常通过注释掉一段代码而使它不起作用,这并不是一个好方法,如果你试图在一段代码首尾分别

    加上/*和*/符号来“注释掉”这段代码,你不一定能如愿,如果这段代码内部原先就有注释存在,这样做就会出问题
    例如:
    #include <stdio.h>
    int main()
    {
        printf("111111111111\n");

        /*
        printf("222222222222\n");
        /*
        printf("333333333333\n");
        */
        printf("4444444444444\n");
        */

        return 0;
    }
    这样注释时,实际注释掉的只有2、3,而4不能注释掉。由于最后一个"*/"是多余的,所有会编译出错.
    (经验证,在Redhat,VC6.0,FREEBSD均是如此,当把最后一个"*/"注释掉后即可编译通过且正常运行)

    要从逻辑上删除一段C代码,更好的方法是使用#if指令,如下:
     #if 0
      statements
     #endif
    在#if和#endif之间的程序段就可以有效的从程序中去除,即使这段代码之间原先存在注释也无妨,所以这是一种更

    为安全的方法。(预处理指令的作用非常强大,将在14章详细讨论)

    <----------------------关于条件编译-------------------------------------------------------
       条件编译简单说就是当某条件满足时才编译某段代码.
       形式: #if NNN
      statement1;
      #elif MMM
      statement2;
      #else
      statement3
      #endif
     
       指令: #if 表达式         
      语句段1
      #else
      语句段2
      #endif

     #if 表达式1
     语句段1
     #elif 表达式2
     语句段2
     #else
     语句段3
     #endif

     #ifdef 宏名
     语句段
     #endif

     #ifndef 宏名
     语句段
     #endif      (#else可以用于#ifdef和#ifndef中,但#elif不可以)    
       #error:指令将使编译器显示一条错误信息,然后停止编译
       #line: 指令可以改变编译器用来指出警告和错误信息的文件和行号
       #pragma:指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息
    ------------------------------------------------------------------------------------------------>

  • 相关阅读:
    jsp第二次作业
    jsp第一个作业
    Android应用程序开发
    第十次作业
    int和Integer比较详解
    com.sun.tools.jar下载失败
    JDK1.7和JDK1.8自由切换
    解析excel
    django 2.0配置url捕获参数
    python使用pymysql链接mysql数据库实现增删改查
  • 原文地址:https://www.cnblogs.com/wblyuyang/p/2254335.html
Copyright © 2020-2023  润新知