第1章 快速上手

Posted astralcon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第1章 快速上手相关的知识,希望对你有一定的参考价值。

由于水平有限,如有错误之处,还望不吝指教。

1.7 问题

1. 规矩越少,美观水平要求则越高。

2. 用不着在许多不同的地方进行复制,避免了在维护这些代码时出现错误的可能性。

3. 可以直接简单修改在定义里字面值常量的值,不需要在整个程序中寻找并修改。

4. 

#include<stdio.h>
#define MAX_INPUT 100

int main()
{
    int a = 10;
    char b[MAX_INPUT] = "Hello World!";
    double c = 2.0;

    printf("%d %s %lf
", a, b, c);
    return 0;
}

5. 

#include<stdio.h>
#define MAX_INPUT 100

int main()
{
    int quantity, price;
    char department[MAX_INPUT];

    /*用%s格式码输入字符串时,中间不能包含空白。数组参数前面不需要加上&*/
    scanf("%d %d %s", &quantity, &price, department);
    printf("%d %d %s
", quantity, price, department);
    return 0;
}

6. 把权力与责任交到程序员手中,能力越大,责任越大。

7. strcpy和strncpy的作用是一样的,只不过strcpy没有限制需要复制的字符数量。

8. 由于C语言对数组的下标是不进行检查的,这段代码可能会造成越界。当越界发生时,会修改其他位置的数据,可能造成程序崩溃。

 

1.8 编程练习

1.

#include<stdio.h>

int main()
{
    printf("Hello World!
");
    return 0;
}

2.

#include<stdio.h>

int main()
{
    int num = 1; /*行数*/
    char c;      /*输入的每个字符*/
    int flag = 1;  /*标志位*/

    /*getchar()从标准输入流读入一个字符并返回。如果读到文件结尾,则返回EOF(键盘输入Ctrl + Z)*/
    while ((c = getchar()) != EOF)
    {
        if (flag == 1)
        {
            printf("%d: ", num);
            num++;
            flag = 0;
        }
        putchar(c);
        /*遇到换行符则标志位置1*/
        if (c == 
)
            flag = 1;
    }
    return 0;
}

3.

#include<stdio.h>

int main()
{
    signed char checknum = -1;
    char c;    /*输入的每个字符*/

    while ((c = getchar()) != EOF)
    {
        putchar(c);
        checknum += c;
        if (c == 
)
        {
            printf("%d
", checknum);
            checknum = -1;
        }
    }
    return 0;
}

4.

#include<stdio.h>
#include<string.h>
#define MAX_INPUT 1000

int main()
{
    char input[MAX_INPUT];     /*每行输入行*/
    char long_input[MAX_INPUT];    /*存放最长的输入行*/
    int len1, len2 = -1;
    while (gets_s(input) != NULL)
    {
        len1 = strlen(input);
        if (len1 > len2)
        {
            len2 = len1;
            strcpy(long_input, input);
        }
    }
    printf("%s
", long_input);
    return 0;
}

5.

void rearrange(char *output, char const *input, int const n_columns, int const columns[])
{
    int col;        /*columns数组的下标*/
    int output_col;        /*输出列计数器*/
    int len;        /*输入行的长度*/

    len = strlen(input);
    output_col = 0;
    /*处理每对列号*/
    for (col = 0; col < n_columns; col += 2)
    {
        int nchars = columns[col + 1] - columns[col] + 1;
        /*输入行的长度没有那么长,跳过*/
        if (columns[col] >= len)
            continue;
        /*输出数组满了,结束*/
        if (output_col == MAX_INPUT - 1)
            break;
        /*如果输出数组空间不够,只复制可以容纳的部分*/
        if (output_col + nchars > MAX_INPUT - 1)
            nchars = MAX_INPUT - output_col - 1;
        /*如果输入行中的字符小于nchars*/
        if (columns[col] + nchars - 1 >= len)
            nchars = len - columns[col];
        /*复制相关数据*/
        strncpy(output + output_col, input + columns[col], nchars);
        output_col += chars;
    }
    output[output_col] = ;
}

6.

void rearrange(char *output, char const *input, int const n_columns, int const columns[])
{
    int col;        /*columns数组的下标*/
    int output_col;        /*输出列计数器*/
    int len;        /*输入行的长度*/

    len = strlen(input);
    output_col = 0;
    /*处理每对列号*/
    for (col = 0; col < n_columns; col += 2)
    {
        int nchars;
        /*输入行没那么长,继续*/
        if (columns[col] >= len)
            continue;
        /*如果输入行或者输出行数组已满,结束*/
        if (output_col >= MAX_INPUT - 1)
            break;
        /*奇偶*/
        if (col + 1 >= n_columns)
            nchars = len - columns[col];
        else
            nchars = columns[col + 1] - columns[col] + 1;
        /*临界点测试*/
        if (nchars <= 1)
        {
            printf("error!
");
            break;
        }
        /*如果输入行数据空间不够,只复制可以容纳的数据*/
        if (output_col + nchars > MAX_INPUT - 1)
            nchars = MAX_INPUT - 1 - output_col;
        /*复制相关的数据*/
        strncpy(output + output_col, input + columns[col], nchars);
        output_col += nchars;
    }
    output[output_col] = ;
}

 

以上是关于第1章 快速上手的主要内容,如果未能解决你的问题,请参考以下文章

keras快速上手-基于python的深度学习实践_第8章_文字生成源代码

python编程快速上手第六章实践项目参考code

python编程快速上手第7章习题20

Python编程快速上手_第 3 章 函数

学习总结快速上手Linux玩转典型应用-第7章-WebServer安装和配置讲解

第3版emWin教程第2章 初学emWin的准备工作及其快速上手