Loading

《C Primer Plus》第六版笔记--7~10章

第七章 C控制语句:分支和跳转

  1. if else 用法

    if (expression) //expression为真时,运行花括号内语句
    {
        statement1
    }
    else //不为真时,运行else的花括号内语句
    {
        statement2
    }
    
  2. 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 十六进制字符
  1. 逻辑运算符

    3种逻辑运算符
逻辑运算符 含义
&&
||
!
  1. 条件运算符:?:
    x = (y< 0) ? -y : y;
    如果y<0,则x = -y,否则x = y、

第八章 字符输入/输出和输入验证

  1. getchar()putchar()都是单字符I/O
    #include <stdio.h>
    
    int main()
    {
    	char ch;
    
    	while ((ch = getchar()) != '#')
    		putchar(ch);
    
    	getchar();
    
    	return 0;
    }
    

输入Hello,I'm # here,程序读取到#就停止,后面的内容就不能读取。
getchar();的地方设置断点并验证
image

  1. 输入验证(防止使用者输错),提前做好预防

第九章 函数

  1. 简单函数
    #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');
    }
    

输出结果:
image

starbar标识符出现三次,三个作用:函数原型告诉编译器函数的类型,函数调用表示在此处执行函数,函数定义定义了函数内语句的功能

  1. 函数递归

    #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
    }
    

输出结果:
image

注:每次函数调用的n值都是不同的,且每次调用之后都会返回,执行后面的语句
大概就是这样子
image

第十章 数组和指针

  1. 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元素的大小

  1. 指针与数组(一维)

    #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]

  1. 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数组

  2. 指针和多维数组

    #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;
    }
    

输出结果:
image

注:C语言中二维数组长这样:
image

不出意外的话,这应该是我对这本书的最后的笔记了,后面好多都是的看不懂的理论,也就没办法做出来笔记......
感兴趣的朋友可以自行买书回来看一下呀😁😎

posted @ 2021-04-22 13:53  Dragonet-Z  阅读(83)  评论(0编辑  收藏  举报