精华内容
下载资源
问答
  • c语言考点总结

    2013-03-20 15:50:24
    c语言,各种知识点考点精华,全面掌握国家二级考试c语言常考知识点
  • 自己总结的二级C语言题库必考知识点和易错点,内含每章节知识点,并标记了选择题易错的地方,全文拷贝于我的ONENOTE,如果有需要可联系我要原笔记,二级C 以此过的,可以发邮件
  • 原 计算机二级c语言考点总结一) ...

    计算机二级c语言(考点总结一)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/jjsjsjjdj/article/details/101054414

    一、软件

    1. 软件设计采取的最佳方案 高内低聚
      软件设计要求模块之间的独立性较强
      高内(内聚性):指模块内部的聚合度要高
      低聚(耦合性):指模块之间的聚合度要低
    2. 软件设计中详细设计是指模块设计,不是系统设计
    3. 软件设计是将软件需求转化为软件表示的过程
    4. 数据库结构设计和数据库设计是软件设计的一部分
    5. 软件测试的目的是为了发现问题,改正错误不属于软件测试的目的

    二、数据库

    1. 数据库系统最核心的问题是数据库系统的设计
    2. 将E-R图 转变成关系数据模式的过程是逻辑模型
    3. 数据库系统的三层模式:内模式、外模式、概念模式

    三、工具和图

    1. DFD是需求阶段使用的工具
    2. DD表示数据字典,在需求阶段建立
    3. PAD用于软件的具体设计过程
    4. 程序流程图用于软件的具体步骤
    5. 系统结构图用于软件的概要设计

    四、数据结构

    1. 顺序存储和链式存储的区别

      1. 顺序存储
        1. 存储空间连续
        2. 占用空间小
        3. 只能对应线性结构
        4. 循环队列、带链队列、带链栈都是顺序结构
      2. 链式存储
        1. 存储空间不一定连续
        2. 占用的空间大
        3. 对应线性和非线性结构
        4. 插入删除时,不需要移动
      3. 链式结构由于需要存储下一个数据的地址,所以占用的空间比较大
    2. 二叉树的计算
      二叉树中,度数为0的节点(叶子节点)总是比度数为2的节点多一个

    3. 栈与队列

      1. 栈:后进先出
      2. 队列:先进先出

    五、c语言

    1. 基础概念

      1. c语言中数值没有二进制的表达方式
      2. c语言只能编译执行,不能解释执行
      3. char c=“\72”表示8进制的字符串,’\072’等于是十进制的58
      4. 算法的空间复杂度是指算法在执行过程中所计算机需要的存储空间
      5. int a=b=0错误,定义时要用分号隔开定义:
        int a,b ; a=b=0
      6. char A=65+1 表示强制类型转换
      7. z=(x,y)最终z=y,z的值总是等于最后一个数的值
    2. 常用的ASCLL码

      1. A 65
      2. a 97
      3. 0 48
    3. 打印输出进制的类型

      1. %o表示八进制
      2. %d表示十进制
      3. %x表示十六进制
    4. 指针的理解:int *p=NULL

      1. *是运算符,不是间址运算符
        (&是间址运算符)
      2. *是说明符,表示p是一个指针
    5. 宏定义的性质

      1. 宏定义没有数据类型
      2. 宏定义耗时短
      3. 宏定义一般使用大写字母
      4. 宏定义一般放在程序的开始
      5. 考点注意定义是后面有没有分号
        #define PT 3.5 ;错误
    6. 常用有关字符串的使用方法
      (a,b表示字符串)

      1. strcpy(a,b):将b中内容复制到a
        strcpy(p+1,q)可以确定赋值的具体位置
      2. strcmp(a,b):比较两个字符串的大小
        a>b 结果为1
        a=b 结果为0
        a<b 结果为 -1
      3. strcat(a,b):将字符串b拼接在a字符串的后面
        b字符串的首字母将覆盖a的’\0’
      4. strlen(a):测量字符串a的长度
    7. typedef struct ST
      { int a;char b;}NEW;
      New c;

      1. struct是结构体定义的关键字
      2. int a,char b结构体成员变量
      3. NEW是结构体类型
      4. c是结构体变量

    六、重点区分

    1. 区分*p[4]和(*p)[4]

      1. *p[4]的特征

        1. 表示一组一维数组指针
        2. *p[0]、*p[1]、*p[2]、*p[3]都表示一个一维指针
      2. (*p)[4]的特征

        1. 表示一个二维数组指针
        2. 它只能与指向一个二维数组,而且对应的数据结构也必须相同
    2. 分辨i++和++i

      1. a=i++的执行步骤
        1. a=i
        2. i=i+1
      2. a=++i的执行步骤
        1. i=i+1
        2. a=i
    3. 分辨’0’、‘\0’、0
      1. ‘0’表示数字字符,对应值为48
      2. ‘\0’表示字符串的结束符,对应值为0
      3. 0表示数字0,对应值为0

    七、易错

    1. scanf("%c",&a)
      1. &容易忘记
      2. 此函数会将空格、回车将视为字符读入

    2. ||和&&的使用
      1. a||b使用时,如果前面一个表达式a结果为1,就不会后面的表达式b进行判断
      2. a&&b使用时,如果前面一个表达式a结果为0,就不会后面的表达式b进行判断

    3. 强制类型转换的表达式
      1. 错误形式:int(x)
      2. 正确形式:(int)x
      3. 括号是将要强制转换的类型括起来,而不是将对应要转换的数值括起来

    计算机二级c语言(考点总结二之改错题).

                                    </div>
                <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-095d4a0b23.css" rel="stylesheet">
                    </div>
    </article>
        <div class="postTime">
        <p class="article-bar-bottom"></p>
        <span>
            文章创建于: 2019-09-20 11:10:25        </span>
    </div>
    </div>
    
    展开全文
  • C语言考点1.docx

    2019-09-18 12:42:37
    C/C++知识点总结,应聘面试常用,内容很细,有底层有算法,扫除知识盲区。C/C++面试常用
  • 全国计算机的等级考试二级C语言考点分析,专家分析,多年教学经验总结
  • 计算机二级C语言重要考点知识总结

    千次阅读 多人点赞 2020-09-09 08:24:06
    C语言重要知识考点(计算机里面的知识和现实生活当中的概念联系起来) 一、总体上必须清楚的 1、程序结构是三种:顺序结构、选择结构(分支结构)、循环结构。 2、读程序都要从main() 入口,然后从最上面顺序往下读...

    C语言重要知识考点

    一、总体上必须清楚的

    1、程序结构是三种:顺序结构、选择结构(分支结构)、循环结构。

    2、读程序都要从main() 入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。

    3、计算机的数据在电脑中保存是以二进制的形式,数据存放的位置是他的地址。

    4、bit是位是指为0或者1。byte是指字节一个字节=八个位

    二、概念常考到的

    1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCll数值存放在文本当中。

    2、define PI 3.1415926;这个写法是错误的,一定不能出现分号。

    3、每个C语言程序中main函数是有且只有一个。

    4、在函数中不可以再定义函数。

    5、算数:可以没有输入,但是一定要有输出。

    6、break可用于循环结构和switch语句(完全中断一层循环)

    7、逗号运算符的级别最低,赋值符号(=)的级别的倒数第二。

    C语言的基础知识

    一、对C语言的基础知识

    1、C语言编写的程序称为源程序,又称为编译单位。

    2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。

    3、一个C语言程序有且只有一个main函数,是程序运行的起点

    二、熟悉vc++

    1、VC是软件,用来运行写的C语言程序

    2、每个C语言程序写完后,都是先编译,后链接,最后运行(.c----> .obj -----> .exe )这个过程中注意.c.obj文件时无法运行的,只有.exe文件才可以运行。

    3、编译过程

    预处理, 展开头文件/宏替换/去掉注释/条件编译                      (test.i main .i)
    编译,    检查语法,生成汇编                                     ( test.s  main .s)
    汇编,   汇编代码转换机器码                                       (test.o main.o)
    链接     链接到一起生成可执行程序   
    运行
    

    三、标识符

    1、标识符
    合法的要求是由字母、数字、下划线组成。有其他它元素就错了。
    并且第一个必须为字母或则是下划线,第一个为数字就错了。

    2、标识符分为关键字、预定义标识符、用户标识符、
    关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If的第一个字母大写了,所以不是关键字。

    预定义标识符:背诵 define scanf printf include记住预定义标识符可以做为用户标识符。

    四、进制的转换

    十进制转换为二进制,八进制,十六进制
    二进制,八进制,十六进制转化为十进制

    五、整数与实数

    1、C语言只有八、十、十六、进制,没有二进制。但是运行时候,所有的进制都要转换为二进制来进行处理。

    (1)C语言中八进制规定一0 开头,018的数值是非法的,八进制是没有8的,逢八进一。
    (2)C语言中的十六进制规定要以0x开头。

    2、小数的合法写法:C语言小数点两边有一个是零的话,可以不用写。

    1.0在C语言当中可以写为1.
    0.1在C语言当中可以写为。.1

    3、实型数据的合法形式
    (1)
    在这里插入图片描述
    考试口诀:e前e后必有数。e后必为整数
    4、整数一般是4个字节,字符型是1个字节,双精度一般是8个字节:
    long int x;表示x是长整型。
    unsigned int x;表示x是无符号整型

    六、算数表达式

    1、算数表达式:+ - * \ %

    考试一定要注意:“/”两边都是整型的话,结果就是一个整型。3/2的结果就是1

    /”如果有一边是小数,那么结果就是小数。3/2.0的结果就是0.5

    “%”符号请一定要注意是余数,考试最容易算除号,%符号两边要求是整数。不是整数就错了

    七、赋值表达式

    赋值表达式:表达式数值就是最左边的数值,a=b=5;该表达式为5,常量不可以赋值
    1、int x=y=10;错了,定义时,不可以连续赋值。
    2、

    int x,y;
    x=y=10;//对的,定义完成后,可以连续的赋值。
    

    3、赋值的左边只能是一个变量.
    4、int x = 7.7;对的,x 就是7
    5、float y = 7;对的,x就是7.0
    6、复合的赋值表达式:

    int  a = 2;
    a*=2+3;//运行完成后,a的值为10
    上面的a*=2+3;等价于a=2*(2+3);
    

    一定要注意,首先要在2+3的上面打上括号,变成(2+3)

    八、自加表达式

    自加、自减表达式:假设a=5,++a(是为6),a++(为5)

    运行的机理:
    ++a是把变量的数值上加1,然后把得到的数值放到变量a当中,然后再用这个++a表达式的数值为6,
    而a++是先用该表达式的数值为5,然后再把a的数值上加1为6,再放到a当中,
    进行++a和a++后,在下面的程序中再用到a的话都是变量a中的6了

    考试口诀:++在前先加后用,++在后先用后加

    九、逗号表达式

    优先级别最低。表达式的数值逗号最右边的那个表达式订单数值。
    (2 ,3, 4)的表达式的数值就是4。

    z=(2, 3,4)(整个是赋值表达式)这个时候z的值为4。(有点难哦)

    z= 2,3,4(整个是逗号表达式)这个时候z的值为2。因为这个赋值不会计算,2直接赋值到z上

    十、补充:

    1、空语句不可以随意执行,会导致逻辑错误
    2、注释是最近几年考试的重点,注释不是C语言,不占用运行时间,没有分号,不可以嵌套!
    3、强制类型转换
    一定是(int)a不是int(a),注意类型上一定有括号的。
    注意(int)(a+b)和 (int)a+b 的区别,前是把a+b转型,后是把a转型再加b
    4、三种取整丢小数的情况
    (1)int a = 1,6;
    (2) (int)a;
    (3) 1/2 ; 3/2;

    十一、字符

    1、字符数据的合法形式:
    '1'是字符占一个字节,“1” 是字符串占两个字节(含有一个结束符号)
    '0' 的ASCll数值表示为48,'a'的ASCll数值是97,'A’的ASCll数值是65。

    一般考试表示单个字符错误形式:‘65’ "1"
    字符是可以进行算数运算的,记住:‘0’-0=48
    大写字母和小写字母转换的方法:‘A’+32=‘a’ 相互直接一般是相差32。

    2、转义字符
    转义字符分为一般转义字符,八进制转义字符,十进制转义字符。
    一般转义字符:背诵\0、\n、\、\"、\\
    八进制转义字符:‘\141’是合法的,前导的0是不能写的。

    十六进制转义字符:‘\x6d’ 才是合法的,前导的0不能写,并且x是小写。
    3、字符型和整数的进亲,两个具有很大的相似之处

    char a = 65;
    printf("%c",a);//得到的输出结果是:a
    printf("%d",a);//得到的输出结果是: 65
    

    十二、位运算

    1、位运算的考察:会有一到二的考试题目
    总的处理方法:几乎所有的为运算的题目都要按照这个流程来处理(先把十进制变成二进制再变成十进制)。
    例1:

    char a = 6, b;
    b = a << 2;
    

    这种题目的计算是先把a的十进制6化成二进制,再做位运算。

    2、一定要记住,异或的为运算符号“ ^ ”。0异或1得到1。0异或0得到0。
    两个女的生不出来
    考试记忆方法:一男(1)一女(0)才可以生个小孩(1)。

    3、在没有舍去数据的时候,<<左移一位表示乘以2,>>右移一位表示除以2。

    十三、数据输出

    1、使用printf和scanf函数的时候,要在最前面加上#include<stdio.h>
    2、printf可以只有一个参数,也可以有两个参数。(选择题考过一次)
    3、printf("第一部分,第二部分");把第二部分的变量,表达式,常量以第一部分的形式展现出来!
    4、printf("a=%d,b=%d",12,34);考试重点
    一定要记住是将12和34以前的第一部分的形式现在终端也就是黑色的屏幕上。考试核心为:一模一样。在黑色屏幕上显示为 a=12, b=34

    printf("a=%d,\n b=%d",12,34);
    

    输出结果a=12 b=34
    5、
    在这里插入图片描述
    6、

    int x = 12,y = 34;注意这种题型
    char z = 'a';
    printf("%c",x,y);//一个格式说明,两个输出变量,后面的y不输出
    printf("%c",z);//结果为12a
    

    7、一定要背诵的

    在这里插入图片描述
    在这里插入图片描述
    举例说明
    在这里插入图片描述

    十四、数据输入

    1、scanf("a=%d,b=%d",&a,&b);考试超级重点
    一定要记住是以第一部分的格式在终端输入数据,考试核心为:一模一样
    在黑色屏幕上面输入的为 a=12,b=34才可以把12和34 正确给a和b。有一点不同也不行。

    2、scanf("%d,%d",x,y);这种写法绝对错误,scanf的第二个部分一定要是地址!

    3、特别注意指针在scanf的考察
    例如:int x = 2;int *p = &x;

    scanf("%d",x);错误
    scanf("%d",p);正确
    scanf("%d",&p);正确
    scanf("%d",*p);正确
    

    4、字符和整型是近亲:

    int x = 97;
    printf("%d",x);//结果为97
    printf("%c",c);//结果为a
    

    5、字符和整型是近亲

    int x = 97;
    printf("%d",x);//结果是97
    printf("%c",x);//结果a
    

    6、输入时候字符和整数的区别(考试超级重点)

    scanf("%d",&x);//这个时候输入1,特别注意表示的整数1
    scanf("%c",&x);//这个时候输入1,特别注意表示的字符‘1’,ASCll为整型48
    

    补充说明:
    1)scanf函数的格式考察
    注意该函数的第二个部分是&a这样的地址,不是a;

    scanf("%d%d%*d%d",&a,&b,&c);
    

    2)putchar,getchar函数的考察
    char a = getchar();是没有参数的,从键盘得到你输入的一个字符给变量a。

    3)如何实现两个变量x,y中数值的互换(要求背下来)
    不可以把x=y,y=x;要用中间变量t=x;x=y;y=t;

    4)如何实现保留三位小数,第四位四舍五入的程序(背下来)
    在这里插入图片描述
    注意x=(int)x;这样是把小数部分去掉

    十五、逻辑关系

    特别要注意:C语言中用非0表示逻辑的,用0表示逻辑假的。
    C语言有构造类型,没有逻辑类型。
    关系运算符号:注意<=的写法,==和=的区别!
    if只管后面一个语句,要管多个,请用大括号!

    1)关系表达式

    a、表达式的数值只能为1(表示为真),或0(表示假)。
    如9>8这个关系表达式是真的,9>8这个表达式的数值就是1。
    如7<6这个关系表达式是假的,所以7<6这个表达式的数值就是0

    b、考试最容易错:就是int x = 1,y = 0;z = 2;
    x<y<z 是真还是假的?带入为1<0<2,从数学的角度出发肯定是错的,
    但是如果C语言那么就是正确的,因为要1<0为假0,表达式就变成了0<2那么运算结果就是1,称为了真的了

    c、等号和赋值的区别!一定要记住“=”就是赋值,“ == ” 才是等号

    2)逻辑表达式

    核心:表达式的数值只能为1(表示为真)或0(表示假)
    a)共有&& || !三种逻辑运算符号。
    b)! > && || 优先的级别
    c)注意短路现象。考试比较喜欢
    d)表示x小于0大于10的方法
    0<x<10是不行的(一定记住)。是先计算0<x得到的结果为1或者0;
    再用0,或1与10比较得到总是真(为1)
    所以一定要用(0<x)&&(x<10)表示比0大比10小

    3)if语句
    • a、else是与最接近的if且没有else的语句匹配
    • b、交换的程序写法:t=x;x=y;y=t;
    • c、id的两个的区别,考试多次考到了
    if(a<b) t=a;a=b;b=t;
    if(a<b){t=a;a=b;b=t;}
    
    • d、单独的if语句:
    if(a<b) t=a;
    
    • e、标准的if语句:
    if(a<b) min = a;
    else min = b;
    
    • f、嵌套的if语句
    if(a<b)
    if(b>c) printf("ok!");
    
    • g、多选一的if语句
    if(a==t) printf("a");
    else if(b==t) printf("b");
    else if(c==t) printf("c");
    else printf("d");
    
    • h、相关练习
      经典考题:结合上面四种if语句题型做题
    int a = 1,b = 0;
    if(!a) b++;
    else if(a==0)
    if(a) b+=2;
    else b+=3;//请问b的值是多少?
    

    在这里插入图片描述

    4)条件表达式
    表达式 1 ? 表达式 2 :表达式3
    

    a、考试口诀:真前假后
    b、注意是当表达式1的数值是非0时,才采用表达式2的数值作为整个运算结果,
    当表达式1的数值为0时,就用表达式3的数值作为整个的结果。

    5)switch语句:

    a)执行的流程一定要弄懂!
    b)注意有break和break的差别,书上的两个例子,没有break的时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出switch语句。break在C语言当中的作用就是分手,一刀两断的意思。
    c)switch只可以和break一起用,不可以和continum用
    d)

    switch(x)   //x:是整型常量,字符型常量,枚举型数据。
    {
    case 1: ····   //不可以是变量
    case 2:····
    }
    

    十六、循环结构

    1、for(;;)

    (1)for循环当中必须是两个分号
    (2)写程序的时候一定要注意,循环一定要有结束的条件,否则就是死循环。

    2、while()
    3、do-while();循环的最后一个while();的分号一定不能丢,do-while循环是至少执行一次循环
    4、continue;是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。
    5、循环嵌套

    就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心计算,一般记住两层是处理二维数组的。

    6、while((c=getchar())!='\n')while(c=getchar()!='\n')的差别

    先看a = 3 != 2 和 (a=3)!=2的区别;
    (!= 号的级别高于=号,所以第一个先计算3!= 2)
    第一个a的数值是到的是1
    第二个a的数值是3

    考试注意点:括号在这里的重要性。

    7、每行输出五个的写法
    for(i = 0; i <= 100;i++){
    printf("%d",i);
    if((i+1)%5 == 0)
    printf("\n");//如果i是从1开始的话,就是if(i%5==0)printf("\n");
    }
    
    8、如何整除一个数
    i%5==0表示整除5
    i%2==0 表示整除2,同时表示是偶数
    
    9、输入123,输出321逆序输出数据
    	int i = 123;
    	while(i!=0){
    		printf("%d",i%10);//123%10=3  12%10=2 1%10=1
    		i=i/10;1//123/10=12   12/10=1  1/10 = 0
    	}
    
    10、for只管后面一个语句
    int i = 3;
    for(i=3;i < 6;i++)
    printf("#");//最终输出3个#号
    
    11、不停的输入,知道输入#号 停止输入!
    while((x=getchar())!='#')
    

    不停的输入,知道输入$停止输入!

    while((x=getchar()) != '$')
    

    不停的输入,直到遇到?停止输入!

    while((x=getchar())!='?')//一定要注意这种给出了条件,然后如何去写的方法!
    
    12、for循环和switch语句的和在一起考题
    13、多次出现的考题
    int k = 1;
    while(--k)//先--后判断
    printf("%d",k);
    

    结果为0

    int k = 1;
    while(k--)//先判断后--
    printf("%d",k);
    

    结果为-1

    十七、C语言当中的函数

    1、函数:是具有一定功能的一个程序块,是C语言的基本组成单位

    2、函数不可以嵌套定义,但是可以嵌套调用

    3、函数名前面如果缺少范围类型,默认为int

    4、C语言由函数组成,但有且仅有一个main函数!是程序运行的开始!

    5、如何判断a是否为质数:背诵这个程序

    void iszhishu(int a){
    	for(i=2;i<a/2;i++)
    	if(a%i==0)
    	printf("不是质数!");
    	printf("是质数!");
    }
    

    6、如何求阶层:n! 背诵这个程序

    int fun(int n){
    int p = 1;
    for(i=1;i<=n;i++)
    p=p*i;//1*1 1*2 2*3 6*4 24*5   ***   *n  == 1*2*3*4*5*6  ** *(n-1)*n
    return p;
    }
    

    7、函数的参数可以是常量,变量,表达式,甚至是函数调用

    add(int x,int y){
    return x+y;
    }
    
    main(){
    int sum;
    sum=add(add(7,8),9);//请问结构是是7+8+9=24
    }
    

    8、函数的参数,返回数值

    在这里插入图片描述

    9、一定要注意参数之间的传递

    实参和形参之间,传数值,和传地址的差别。(考试重点)
    传地址的话,形参的变化不会改变实参的变化。
    传地址的话,形参的变化就会有可能改变实参的变化。

    10、函数声明的考查

    一定要有:函数名,函数的返回值类型,函数的参数类型。不一定要有:形参的名称。
    填空题也可能会考到!以下是终极难度的考题。打横线是函数声明

    int *fun(int a[],int b[]){
    }
    

    已经知道函数是这样。这个函数的正确函数声明这么写?

    int *fun(int *a,int *b)//这里是函数声明的写法,注意数组就是指针
    
    int *fun(int a[],int b[])//这种写法也是正确的
    
    int *fun(int b[],int c[])//这种写法也是正确的,参数的名称可以随便写
    
    int *fun(int *,int *)//这种写法也是正确的,参数的名称可以不写
    

    11、要求掌握的库函数

    (1)库函数是已经写好的函数,放在仓库当中,我们只需要如何去使用就可以了!
    (2)以下这些函数经常考到,所以要背诵下来。
    (3)以下这些函数经常考到,所以要背诵下来
    abs();//求int绝对值
    sqrt();//求平方根
    fabs()//求float,double的绝对值
    pow();//次方
    sin();//求正弦值
    其中pow(a,b)是重点
    23次方是由pow(2,3)表示的。
    

    十八、指针

    1、指针变量

    指针变量的本质是用来放地址值,而一般的变量是放数值的。

    (1)int *p;中 *p和p 的差别:简单说*p是数值,p是地址

    *p可以当做变量来用:* 的作用是取后面地址p里面的数值
    p是当作地址来使用。可以在scanf函数中:scanf("%d",p)

    (2)*p++和(*p )++的之间的差别:改错题目中很重要!考试超级重点

    *p++是地址会变化 口诀:取当前值,然后在移动地址!
    (*p)++是数值会要变化,口诀:取当前值,然后在使数值加1
    例题:
    int *p,a[]={1,3,5,7,9};
    p=a;
    请问*p++和(*p)++的数值分别为多少?
    *p++;这个本身的数值为1。由于是地址会增加一,所以指针指向数值3了。
    (*p)++ 这个本身的数值为1,由于有个++表示数值会增加,所以指针不移动,但是数值1由于自加了一次变成了2。

    2、二级指针:

    *p:一级指针:存放变量的地址。
    **q:二级指针:存放一级指针的地址。
    常考题目:

    int x = 7;
    int *p = &x,**q=p;
    

    问你:*p为多少?*q为多少?**q为多少?

    *p为7   p存放的是x的地址值  *p是取出地址值当中的值
    *q为p   q存放的是p的p的地址值  而 *p 存放的是
    **q为7
    

    3、三名主义:(考试的重点)

    (1)数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量
    (2)函数名:表示该函数的入口地址
    (3)字符串常量名:表示第一个字符的地址。

    4、移动指针(经常加入到考试中其他题目综合考试)

    char *s = "meikanshu";
    while(*s) {
    printf("%c",*s);
    s++;
    }
    

    这个s首先会指向第一个字母m然后通过循环会一次打印出一个字符,s++是地址移动,打印了一个字母后,就会移动到下一个字母!
    在这里插入图片描述

    5、指针变量的两种初始化

    方法1:int a = 2,*p=&a; (定义的同时初始化)
    方法2:int a = 2,*p;(定义之后初始化)

    p=&a;

    6、传数值和传地址(每年必考好多题目)

    第一题
    void fun(int a,int b){
    	int t;
    	t=a;a=b;b=t;
    	*b=t;
    }
    void main(){
    	int x = 1,y = 3;
    	fun(x,y);
    	printf("%d,%d",x,y);
    }
    

    这个题目的答案是1和3

    第二题
    void fun(int *a,int *b){
    int t;
    t=*a;
    *a=*b;
    }
    main(){
    	int x = 1,y = 3;
    	fun(&x,&y);
    	printf("%d,%d",x,y);
    }
    

    这个题目的答案就是3和1。
    传地址,fun用指针接受!这个时候fun中的交换,就会影响到main中的x和y。
    传地址形参的变化绝大

    7、函数返回值是地址,一定要注意这个*号,(上机考试重点)

    int *fun(int *a,int *b){//可以发现函数前面有个*,这个就是说明函数运算结果是地址
    if(*a>*b)   //return a可以知道返回的是a的地址。
    return a;
    else return b;
    }
    main(){
    int x = 7,y = 8, *max;
    max=fun(&x,&y);//由于fun(&x,&y)的运算结果是地址,所以用max来接收。
    printf("%d,%d",x,y);
    }
    

    8、考试重要的话语:

    指针变量是存放地址的。并且指向那个就等价那个,所有出现*p的地方都可以用它等价的代替。
    例如:

    int a = 2,*p=&a;//*p指向a其中p存储的就是p的地址值
    *p=*p+2;
    

    (由于p指向变量a,所以指向那个就等价那个,这里p等价与a,可以相当于是a=a+2)

    十九、数组

    数组:存放的类型是一致的,多个数组元素的地址是连续的。

    1、一维数组的初始化

    在这里插入图片描述

    2、一维数组的定义

    int a[5];
    

    注意这个地方有一个重要考点,定义时数组的个数不是变量,一定搜索常量。


    int a[5];
    

    合法,最正常的数组


    int a[1+1];
    

    合法,个数是常量2,是个算术表达式


    int a[1/2+4];
    

    合法,同样是算术表达式


    int x=5,int a[x];
    

    不合法,因为个数是x,是个变量,非法的。


    define P 5 
    int a[P];
    

    合法,define后的P是符号常量,只是长得像变量


    3、二维数组的初始化

    int a[2][3] = {1,2,3,4,5,6};
    

    合法,很标准的二维赋值。


    int a[2][3] = {1,2,3,4,5, }
    

    合法,后面一个默认值为0


    int a[2][3]={{1,2,3}{4,5,6}};
    

    合法,每行三个


    int a[2][3]={{1,2,}{3,4,5}};
    

    合法,第一个最后一个默认为0


    int a[2][3] = {1,2,3,4,5,6,7};//两行三列6个元素,这里赋值了7个元素
    

    不合法,赋值的个数多余个数了。


    int a[][3]={1,2,3,4,5,6,7};
    

    不合法,不可以缺省行的个数


    int a[2][] = {1,2,3,4,5,6};
    

    合法,可以缺省列的个数


    4、补充

    (1)一维数组的重要概念:

    对a[10]这个数组的讨论
    1)a表示数组名,是第一个元素的地址,也就是元素a[0]的地址。
    2)a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。

    (2)a是一维数组名,所以它是列指针,也就是元素a[0][0]的讨论。

    1)a表示数组名,是第一个元素的地址,也就是元素a[0][0]的地址
    2)a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
    3)a是二维数组名,所以它是行指针,也就是说a+1是跳一行
    4)a[0],a[1],a[2]也是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。
    5)注意a和a[0]、a[1]、a[2]是不同的,它们的基本类型是不同的。前者是一行元素,后者是一列元素。

    (3)二维数组做题目的技巧:

    如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。
    在这里插入图片描述
    步骤二:这样作题目很简单:
    *(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素。所以是1

    *(a[1]+2)我们就知道是第二行的第一个元素往后面跳两列,那么这里就是a[1][2]元素,所以是6

    *a[0+1] 相当于向下移动一行

    一定记住:只要是二维数组的题目,一定是写成如上格式,再去做题目,这样会比较简单。

    (4)数据的初始化,一维和二维的,一维的可以不写,二维的第二个一定要写
    int a[] = {1,2}
    

    合法


    int a[][4] = {2,3,4}
    

    合法


    int a[4][] = {2,3,4};//必须要求列,行可以不要求
    

    不合法


    (5)二维数组当中的行指针
    int a[1][2];
    

    其中a现在就是一个行指针,a+1跳一行数组元素。搭配(*)p[2]指针
    a[0],a[1]现在就是一个列指针。a[0]+1跳一个数组元素。搭配*p[2]指针数组使用

    (6)还有记住脱衣服法则:超级无敌重要

    a[2] 变成 *(a+2) a[2][3] 变成*(a+2)[3]再可以变成*(*(a+2)+3)
    这个思想很重要

    二十、其他考试重点

    文件的复习方式:

    把上课时候讲的文件这一章的题目要做一遍,一定要做,基本上考试的都会在练习当中。

    1、字符串的strlen()strcat()strcmp()strcpy()的使用方法一定要记住。他们的参数都是地址。其中strcat()strcmp()有两个参数。

    2、strlen()sizeof()的区别也是考试的重点

    strlen()检测字符串实际长度
    sizeof()返回一个对象或者类型所占的内存字节数。

    3、define f(x)(x*x)define f(x) x*x 之间的差别,一定要好好的注意这很容易写错的地方,替换的时候有括号和没有括号是有很大区别的。

    4、malloc

    int *p;
    p=(int *)malloc(4);
    p=(int *)malloc(sizeof(int));//以上两个等价
    

    当心填空题,malloc的返回值类型是void *

    5、函数的递归调用一定要记住有结束的条件,并且要会简单的递归题目。要会作递归的题目

    6、结构体和共用体以及链表要掌握最简单的。typedef考的很多,而且一定要知道如何引用结构体中的各个变量,链表中如何添加和删除节点,以及如何构成一个简单的链表,一定要记住链表中的节点是有两个域,一个放数值,一个放指针。

    7、函数指针的用法(*f)()记住一个例子:

    int add(int x,int y){
    
    }
    main(){
    int (*f)();
    f=add;
    }
    

    赋值之后:合法的调用形式为

    (1) add(2,3);
    (2) f(2,3);
    (3) (*f)(2,3);

    8、两种重要的数组长度:

    char a[]={'a','b','c'};//数组长度为3,字符串长度不定,sizeof(a)为3。
    
    char a[5]={'a','b','c'};//数组长度为5,字符串长度3,sizeof(a)为5。
    

    9、scanf 和 gets的数据:

    如果输入的是good good study!
    那么scanf("%c",a);只会接收good 考点:不可以接收空格。
    gets(a);会接收 good good study! 考点:可以接收空格

    10、共用体的考察

    union TT
    {
    int a;
    char ch[2];
    }
    

    考点一:sizeof(struct TT)=4;//获取的是最大的那个变量的大小

    11、"文件包含"的考察点:

    在这里插入图片描述
    这里一个C语言程序是有两个文件组成,分别是no1.cno2.c

    那么no1.c中最开始有个#include<no2.c>他表示把第二个文件内容包含过来,那么no1.c中调用add()函数的时候就可以把数值传递到no2.c当中的被调用函数add()了。

    一个文件必须要有main函数。这句话错了。例如:no2.c就没有。

    头文件一定以.h结束的。这句话错了。例如:no1.c中就是#include<no2.c>.c结尾的。

    12、指针迷惑的考点

    char ch[] = "iamhandsome";
    char *p = ch;
    

    问你

    *(p+2)*p+2的结果是多少?
      m       k   结果是这两个,想不通的同学请作死想想,想通为止!
    

    13、数组中放数组一定要看懂:

    int a[8] = {1,2,3,4,4,3,2,2};
    int b[5] = {0};
    b[a[3]]++ 这个写法要看懂,结果要知道是什么?b[4]++,本身是0,运行完后,b[4]1了。
    

    14、字符串的赋值

    C语言中没有字符串变量,所以用数组和指针存放字符串:
    各种考试题型
    (1)

    char ch[10] = {"abcdefgh"};

    (2)

    char ch[10] = "abcdefgh";

    (3)

    char ch[10] = {'a','b','c','d','e','f','g','h'};

    (4)

    char *p = "abcdefgh";

    (5)

    char *p;
    p="abcdefgh";//对
    

    (6)

    char ch[10];
    ch="abcdefgh";错了!数组名不可以赋值!
    

    (7)

    char *p = {"abcdefgh"};错了!不能够出现大括号!
    

    15、字符串的赋值函数背诵:一定要背诵,当心笔试填空题目

    把s指针中的字符串复制到t指针中的方法

    (1)while((*t=*s)!=null){s++;t++;} 完整版
    (2)while(*t=*s){s++;t++;} 简单版本
    (3)while(*t++=*s++) 高级版本

    16、typedef是取别名,不会产生新的类型,他同时也是关键字

    考点一:typedef int qq 那么 int x 就可以写成qq x
    考点二:typedef int *qq 那么 int *x 就可以写成qq x

    17、static考点是一定会考的!复习相关的习题。

    static 考点是一定会考的!复习相关的习题。
    static int x;默认值为0。
    int x : 默认值为不定值。

    18、函数的递归用一定会考,至少搜索2分。

    展开全文
  • pf是一个指向函数的指针 A.a%(int)(x-y) 当x=y, a%0 而要求被除数不能为0 C.%只能用于整型数据的运算,y是double D....char b[8]表示数组,b既表示数组名称,又表示是...计算机二级c语言考点总结二之改错题) .

    在这里插入图片描述
    pf是一个指向函数的指针

    在这里插入图片描述
    A.a%(int)(x-y) 当x=y, a%0 而要求被除数不能为0
    C.%只能用于整型数据的运算,y是double
    D.赋值时左边必须一个单独的变量x、y或z等,x+y=x错误

    在这里插入图片描述
    char b[8]表示数组,b既表示数组名称,又表示是数组首地址,所以不需要&间址符
    int c c只是一个整型变量,所以需要间址符&c

    在这里插入图片描述

    在这里插入图片描述
    对char s[7]进行赋值时,要考虑是否存储空间是否够用,同时要考虑对应的

    在这里插入图片描述
    计算机里面没有二进制的表达方式

    1. 八进制 027
    2. 十进制 86
    3. 十六进制 0x12ab

    在这里插入图片描述
    A执行到最后的时候
    假设最后一个字母相等
    s++后,指向‘/0’
    结束后,没有将‘/0’复制过来,字符串没有完全复制

    在这里插入图片描述
    B.z=(x,y)输出函数打印时,总是打印最后一个数

    在这里插入图片描述
    C:强制类型转换的方式错误
    (int)f 正确的强制类型转换的方式 将要强制转换的类型括起来,不是将数据括起来
    D:c语言的表达式,不能采用连续不等式的方式

    在这里插入图片描述
    注意define S(x) PTxx; 最后有一个分号定义错误

    在这里插入图片描述
    叶子节点的数目比度数为2的节点多一个

    在这里插入图片描述
    %2d 只会读入2个数字
    %f可以可以读入一系列数字,但是遇到空格就会结束
    所以选b
    在这里插入图片描述

    1. p+3将会保留p字符串前3个数
    2. strcpy(p,’‘ABCD’’)复制获取了长度为4的字符串
      3+4=7
      在这里插入图片描述
      New是结构体类型

    在这里插入图片描述
    k=(a)(b)/©=56/8=3

    在这里插入图片描述
    A.一维指针不能指向二维数组
    B.k为二维指针,p为一维指针,不能相互赋值
    C.s[0]表示一个一维数组,p可以对其赋值
    D.k和s的数据结构不同,所以不能赋值 s[3][10] (k)[3]
    在这里插入图片描述
    i1=(8
    8)/(44)=4
    i2=(4+4
    4+4)/(2+2*2+2)=3

    在这里插入图片描述
    注意最后的printf打印输出类型%d是整型

    在这里插入图片描述
    易错点:z=x++,y++,++y中会自动先赋值再进行++y的操作 ,所以z=1

    在这里插入图片描述
    A. 赋值的方式错误,正确的方式:int a,b; a=b=0
    B.char A=65+1 表示char表示强制类型转换
    C.b、c是指针,将b的地址给c错误
    D.b定义时,没有确定数据类型,也没有以分号结束

    在这里插入图片描述
    A.结构体赋值时,应该使用{},而不是()
    B.相同的结构体之间,可以直接赋值
    C、D:对应的成员变量,只要数据的类型相同都可以相互赋值

    在这里插入图片描述
    解析:

    1. n当前没有赋值,存放的未知数,不能让指针指向它 ,必须先给它赋值才能,让指针指向它

    在这里插入图片描述
    解析:

    1. f表示一个指向函数的指针变量,由题目可以看出只有一个形参

    在这里插入图片描述

    1. 1/3=0表示整除,不会留有小数,结果为除法商的部分,最终的结果为0
    2. 1/3.0=0表示的除法会留有小数,最终结果为0.33333333
    3. pow(sin(0.5),2)表示sin(0.5)的2次方

    计算机二级c语言(考点总结二之改错题).

    展开全文
  • 一、改错题 区分两种类型错误 ...for循环出错,1....争夺座位a[0],让所有人和当前座位上的人比较身高,高的人让位子走进过道,让矮的人坐,依次轮流替换直到最后,挑选...计算机二级c语言考点总结三错题集) .

    一、改错题

    1. 区分两种类型错误

      1. 是否可以编译
        1. 不可编译 语法错误
        2. 可以编译 算法错误
      2. 如何处理错误
        1. 语法错误
          1. 通过常见易错点判断
          2. 通过点击编译器看提示找问题
        2. 算法错误
          1. 根据具体问题而定

      二、常见的语法错误

      1. 函数的使用错误
        1. scanf函数中没有取间址符&
        2. 绝对值的使用
        abs(a)用于a整数取绝对值
        fabs(a)用于是浮点数a取绝对值
        3. printf()函数注意要答应值的类型是(“%d”,a)还是(“%c”,a)等

      2. 注意函数的三个部分void fun (long s,long *t)
        1. 返回值类型是否缺失,返回值的类型是否正确
        2. 注意传入的的参数的类型,传入参数若为二维数组a[i] [j] ,i可以为空,但是j不能为空 。如a[][]就是错误的
        3. 传入的参数是否有类型,参数是数字还是指针

      3. 条件语句和循环语句

        1. for循环出错,1.错写关键字For 2.for语句分号写错
        2. while(r)的循环语句中,如果r为指针则不能作为判断条件,必须以*r作为判断条件
        3. if()判断条件中
          1. 大小写的符号搞反了
          2. 符号混淆 ==是否写成=
      4. 其他

        1. 语句结束分号缺失 如return s

        2. 没有赋初始值就进行运算
          1. int sum;
          2. sum=sum+1;
          3. 此时会出错

        3. 宏定义表达式是否需要()符号是否错误

        4. 错用%和/两个符号

        5. 字符串数组的结束符书写错误
          1. 写成0
          2. 写成o
          3. 写成‘/0’
          正确写法 ‘\0’

        6. 注意关键字的大小写是否出错

      5. 提示:改错题的一个语句可能存在多处错误

    三、如何理解冒泡法
    冒泡法

    1. 假设

      1. 数组a可以比喻成一列车厢,a[i]表示座位
      2. 数组中a[i]对应的值表示每个乘客的身高
      3. t表示过道
    2. 问题:将乘客由低到高进行排序,矮的坐前面,高的坐后面

    3. 思路

      1. 争夺座位a[0],让所有人和当前座位上的人比较身高,高的人让位子走进过道,让矮的人坐,依次轮流替换直到最后,挑选出最矮的人
      2. 争夺座位a[2],让剩余的人再次比较高矮,依次循环
      3. 由于最后一个人没有选择座位的权利,需要抢的座位i只有n-1个
      4. 由于第一个人不需要与自己比较,j=i+1从第二个人开始

    计算机二级c语言(考点总结一).

    计算机二级c语言(考点总结三错题集).

    展开全文
  • c语言知识总结

    2013-10-10 15:00:00
    c语言主要知识点的总结主要是总结全国计算机考试的各个考点
  • 1 [ ] 下标运算符 双目 左结合 ( ) 圆括号 左结合 -> 指向结构体成员运算符 左结合 . 结构体成员运算符 左结合 ++ 后缀 单目 左结合 -- 后缀 单目 左结合 2 ! 逻辑非 单目 右结合 ++ 前缀 单目 右结合 -- 前缀 单目 ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 146
精华内容 58
关键字:

c语言考点总结

c语言 订阅