第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] = ‘