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
int **input_columns_pair = read_columns();
while (gets(input) != nullptr && stricmp("exit", input) != 0) {
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);
}
}
printf("Rearrange line: %s\n", tmp);
}
return EXIT_SUCCESS;
}
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++) {
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));
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;
}
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';
}
|