IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言学习之路 -> 正文阅读

[C++知识库]C语言学习之路

C语言学习之路

1. C语言优缺点

  • 强大的控制结构
  • 快速
  • 代码紧凑
  • 程序更小
  • 可移植性
    C语言具有汇编具有的微调控能力,控制底层硬件。
    常见于:操作系统,计算机游戏,嵌入式系统,机器人工厂,电影,PC应用,计算机语言。

计算机组成:运算器 + 控制器 + (内存 +外存) + 输入设备 + 输出设备

高级语言:以一种更加可读的方式书写代码指令。
不同CPU需要不同的编译器,需要使用与特定CPU型号匹配的编译器。

2.C99标准

(1) 支持国际化编程
(2)调整现有实践致力于解决明显的缺陷
(3)适应科学和工程项目中的关键数值计算,提高C的适应性;

解释型语言:CPU执行过程中边解释边执行;
编译型语言:编译完成后统一执行;

编程步骤:
(1)定义程序目标
(2)设计程序
(3)编写代码
(4)编译
(5)运行程序
(6)测试和调试程序
(7)维护和修改程序

编译器:将源代码转换成中间代码
链接器:把中间代码和其他代码合并,生成可执行文件;将编写的目标代码,系统的标准启动代码和库代码这三部份合并成一个可执行文件。对于库代码,链接器仅将用到的库函数提取出来;

中间文件:即将源代码转换为机器语言代码,并将结果放在目标代码文件中;目标代码确缺失启动代码,启动代码充当着程序和操作系统之间的接口。且目标代码还缺少库函数。

3.集成开发环境

先下载CFree获取编译环境,再下载Clion用于日常实际开发;
C-Free
CLion

4.第一个C程序

输入字符串按规则截取
读取列标号
4 9 12 20 -1
abcdefghijklmnopqrstuvwxyz

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "iostream"

#define MAX_COLS 20
#define MAX_INPUT 1000

int read_column_numbers(int columns[], int max);

void rearrange(char *output, char const *input, int n_columns, int const columns[]);

int **read_columns();

char *arrange(int *columns, char *input);

int main() {

    int n_columns;
    int columns[MAX_COLS];
    char input[MAX_INPUT];
    char output[MAX_INPUT];
#if 0
    cou;
#endif
//    n_columns = read_column_numbers(columns, MAX_COLS);
    int **input_columns_pair = read_columns();
    /*
     * 读取列标号
     * 4 9 12 20 -1
     * abcdefghijklmnopqrstuvwxyz
     */

    while (gets(input) != nullptr && stricmp("exit", input) != 0) {
        //二维数组的长度 = 总长度/某一列的长度
        //要求为n*m的二维数组,空的部分不是nullptr
        int len_i = sizeof(*input_columns_pair) / sizeof((*input_columns_pair)[0]);
        printf("Original input: %s\n", input);
        char *tmp = nullptr;
        for (int i = 0; i < len_i; ++i) {
            char *o = arrange(input_columns_pair[i], input);
            if (tmp == nullptr) {
                tmp = o;
            } else if (o != nullptr) {
                strcat(tmp, o);
            }
//        rearrange(output, input, n_columns, columns);
        }
        printf("Rearrange line: %s\n", tmp);
    }
    return EXIT_SUCCESS;
}

//要求输入的截取段的列的数量n 符合 2*n < 1000
int **read_columns() {
    int num = 0;
    int *tmp = new int[MAX_INPUT];
    while (num < MAX_INPUT && scanf("%d", &tmp[num]) && tmp[num] != -1) {
        num++;
    }
    // 若输入的数字数量为奇数,舍弃最后一个输入
    //    定义二维数组
    int z = 0;
    int **ret = (int **) malloc(sizeof(int *) * (num / 2));
    memset(ret, 0, sizeof(int *) * (num / 2));
    for (int i = 0; i < num / 2; i++) {
        // 以2个数字为一组
        ret[i] = (int *) malloc(sizeof(int) * 2);
        memset(ret[i], 0, sizeof(int) * 2);
        ret[i][0] = tmp[z++];
        ret[i][1] = tmp[z++];
    }
    //    刷新缓冲区
    char ch;
    while ((ch = getchar()) != EOF && ch != '\n');
    return ret;
}

char *arrange(int *columns, char *input) {
    int len = strlen(input);
    int left = columns[0];
    int right = columns[1] > len ? len : columns[1];
    if (left >= len || left >= right) {
        return nullptr;
    }
    int size = right - left + 1;
    char *output = (char *) malloc(sizeof(char) * (size + 1));
//    char output[size + 1];
    strncpy(output, input + left, size);
    output[size] = '\0';
    return output;
}

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

    if (num % 2 != 0) {
        puts("last column number is not paired!");
        exit(EXIT_FAILURE);
    }
//    刷新字符缓冲区
    while ((ch = getchar()) != EOF && ch != '\n');
    return num;
}

//将指定的字符连接在一起,输出以NUL结尾
void rearrange(char *output, char const *input, int n_columns, int const columns[]) {
    int col;
    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 || output_col == MAX_INPUT - 1) {
            break;
        }
        if (output_col + nchars > MAX_INPUT - 1) {
            nchars = MAX_INPUT - output_col - 1;
        }
        strncpy(output + output_col, input + columns[col], nchars);
        output_col += nchars;
    }
    output[output_col] = '\0';
}


  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:22:06  更:2022-07-05 23:25:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/11 21:08:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码