二级 C 模拟题笔记 (一)

我可能学了假的 C 语言…

  • 软件生命周期
  1. 软件定义:问题定义、可行性研究、需求分析
  2. 软件开发:概要设计、详细设计、实现、测试
  3. 运行维护期:运行维护
  • 扇出
    一个模块直接调用的其他模块

  • 数据模型

  1. 概念数据模型:对客观世界复杂事物的描述及对它们内在联系的刻画
  2. 逻辑数据模型:数据库系统一级的实现
  3. 物理数据模型:面向计算机物理实现的模型
  • a+=a-=a*a
    赋值运算结合性为自右向左,a+=a-=a*a相当于a=a-a*a,a=a+a;自右向左计算过程为a=a-a*a=-132,a=a+a=-264

  • 010
    这是用八进制表示法的

  • C 语言的标识符

  1. 关键字、预定义标识符、用户标识符
  2. 可由数字、字母、下划线组成,且不能以数字开头
  • 字符问题
    字符是以 ASCII 码保存的,给一个字符赋个数字,如果 %d 输出的话就输出 ASCII 码,但如果字符加一个数字之后,再 %c 输出的话,就是两个数字相加。不过超出 9 之后就不一定了。

    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
    int main()
    {
    char c='9';
    putchar(c+3);
    return 0;
    }
  • 通过函数交换主函数内的数值
    这道题我错在以为 int * t 虽然没有初始化,但是后面会给它赋值。实际上这里只是分配了一块空间用于存放整型变量的地址,而这里是垃圾值。当运行到 *t=*p 的时候就会出错,无法完成交换。(答案的说法是未给指针开辟空间,难道这样还没有分配空间?)

    1
    2
    3
    4
    5
    6
    void swap( int *p,int *q)
    {
    int *t;
    *t=*p; *p=*q; *q=*t;
    return;
    }
  • 字符串复制 1
    定义字符指针之后,如果没有赋值的话是不能用 strcpy 进行赋值的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    int main()
    {
    char string[10],*str=string;
    //char string[10],*str=string;
    strcpy(str,"HELDOL");
    puts(string);
    return 0;
    }
  • 字符串复制 2
    一个字符串赋值给另一个,是从头开始覆盖
    下面的程序的结果是:
    China\0g\0

    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    int main()
    {
    char a[]="Bejing",b[]="China";
    printf("%d\n", strlen(strcpy(a,b)));//5
    puts(a);//China
    return 0;
    }
  • EOF 含义
    文本文件结束的标志