《C Primer Plus》第六版笔记--7~10章
第七章 C控制语句:分支和跳转
-
if else 用法
if (expression) //expression为真时,运行花括号内语句 { statement1 } else //不为真时,运行else的花括号内语句 { statement2 }
-
ctype.h
系列的字符函数#include <stdio.h> #include <ctype.h> //包含isalpha()的函数原型 int main () { char ch; while ((ch = getchar()) != '\n') { if (isalpha (ch)) //检测输入输入字符是否为字母 putchar(ch + 1); else putchar (ch); } putchar (ch); getchar(); getchar(); return 0; }
运行程序,输入 Hello! 输出的就是 Ifmmp!
ctype.h头文件中字符测试函数
函数名 | 如果是下列参数时,返回值为真 |
---|---|
isalnum | 字母数字(字母或数字) |
isalpha | 字母 |
isblank | 标准的空白字符(空格、水平制表符或换行符)或任何其他本地化指定为空白的字符 |
iscntrl | 控制字符,如Ctrl+B |
isdigit | 数字 |
isgraph | 除空格外的任意可打印字符 |
islower | 小写字母 |
isprint | 可打印字符 |
ispunct | 标点符号(除空格或字母数字字符外的任何可打印字符) |
isspace | 空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符或其他本地化定义的字符) |
isupper | 大写字母 |
isxdigit | 十六进制字符 |
-
逻辑运算符
3种逻辑运算符
逻辑运算符 | 含义 |
---|---|
&& | 与 |
|| | 或 |
! | 非 |
- 条件运算符:?:
x = (y< 0) ? -y : y;
如果y<0,则x = -y,否则x = y、
第八章 字符输入/输出和输入验证
getchar()
和putchar()
都是单字符I/O#include <stdio.h> int main() { char ch; while ((ch = getchar()) != '#') putchar(ch); getchar(); return 0; }
输入Hello,I'm # here,程序读取到#就停止,后面的内容就不能读取。
在getchar();
的地方设置断点并验证
- 输入验证(防止使用者输错),提前做好预防
第九章 函数
- 简单函数
#include <stdio.h> #define NAME "GIGATHING, INC" #define ADDRESS "101 Megabuck Plaza" #define PLACE "Megapolis, CA 94904" #define WIDTH 40 void starbar(void); int main() { starbar(); printf("%s\n", NAME); printf("%s\n", ADDRESS); printf("%s\n", PLACE); starbar(); getchar(); return 0; } void starbar(void) //第一个void 表示函数为void类型,没有返回值;第二个void表示函数不带参数(形参) { int count; //count为该函数内的局部变量,即可以在starbar函数外的地方再次定义同名变量 for (count = 1; count <= WIDTH; count++) putchar('*'); putchar('\n'); }
输出结果:
starbar
标识符出现三次,三个作用:函数原型告诉编译器函数的类型,函数调用表示在此处执行函数,函数定义定义了函数内语句的功能
-
函数递归
#include <stdio.h> void up_and_down(int); int main(void) { up_and_down(1); getchar(); return 0; } void up_and_down(int n) { printf("Level %d: n location %p\n", n, &n); // #1 if (n < 4) up_and_down(n + 1); printf("LEVEL %d: n location %p\n", n, &n); // #2 }
输出结果:
注:每次函数调用的n值都是不同的,且每次调用之后都会返回,执行后面的语句
大概就是这样子
第十章 数组和指针
sizeof
计算元素个数#include <stdio.h> int main(void) { const int days[] = { 31,28,31,30,31,30,30,31,30,31,30,31 }; int index; for (index = 0; index < sizeof days / sizeof days[0]; ++index) printf("Month %d has %d days.\n", index + 1, days[index]); getchar(); return 0; }
注:
sizeof days
是在计算整个数组的大小,sizeof day[0]
是在计算一个int元素的大小
-
指针与数组(一维)
#include <stdio.h> #define MONTH 12 int main(void) { const int days[MONTH] = { 31,28,31,30,31,30,30,31,30,31,30,31 }; int index; for (index = 0; index < MONTH; ++index) printf("Month %2d has %d days.\n", index + 1, *(days + index)); getchar(); return 0; }
*(days + index)
相当于days[index]
-
const的其他内容
const int days[MONTH] = { 31,28,31,30,31,30,30,31,30,31,30,31 };
起到保护数组内容的作用,更改days数组内的值会发生编译错误int days[MONTH] = { 31,28,31,30,31,30,30,31,30,31,30,31 }; const int *ptr = days;
这样的话就可以更改days数组的内容,但是ptr指针就是固定指向days数组
-
指针和多维数组
#include <stdio.h> int main() { int a[4][2] = { {2,4},{6,8},{1,3},{5,7} }; int (*ptr)[2] = a; //括号是必须的! int i, v; for (i = 0; i < 4; ++i) { for (v = 0; v < 2; ++v) { printf("%d\t", *(*(ptr + i) + v)); } putchar('\n'); } getchar(); return 0; }
输出结果:
注:C语言中二维数组长这样:
不出意外的话,这应该是我对这本书的最后的笔记了,后面好多都是的看不懂的理论,也就没办法做出来笔记......
感兴趣的朋友可以自行买书回来看一下呀😁😎
作者:Dragonet-Z
出处:https://www.cnblogs.com/dragonet-Z/p/14689247.html
版权声明:本博客所有文章除特殊声明外,均遵循BY-NC-ND许可协议,转载请注明出处!