0%

C语言二级查漏补缺(自用)

  • 一个C语言的源程序(扩展名为.c)在经过编译器编译后,首先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(扩展名为.obj)。目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(扩展名为.exe)后方可运行

.obj文件不可直接运行

  • 算法的5个特性为:

    • 有穷性
    • 确定性
    • 可行性
    • 有零个或多个输入(可以无输入)
    • 有1个或多个输出(必须有输出)
  • 逗号运算符

    在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。其一般形式为:
    表达式1, 表达式2
    其求值过程是分别求两个表达式的值,并以表达式2(即最右边的一个表达式)的值作为整个逗号表达式的值。

1
2
3
int x=2;
printf("%d",(x++,2*x)); 6
printf("%d",x); 3

逗号仅计算结果,并不具有赋值作用(但是x++有赋值作用)

  • 算术运算符优先级

    优先级的次序如下(由高到低):()、++、—、*、/、%、+、-

    以上所列的运算符,只有单目运算符正“+”和负“-”的结合性是从右到左,其余运算符的结合性都是从左到右

    • %对象必须为整型
  • 运算库函数

    • abs:绝对值
    • fabs:双字节型绝对值
    • pow:x的y次方
    • exp:求10的x次方
    • sqrt:x的平方根

BCCAA ADBBD DAC

  • 数字的默认类型为整型
1
printf("%lf",1/2); //0.000000
  • c的基本数据类型:单精度型、双精度型、字符型、整型、枚举型

  • c负整数补码:所得反码还要+1

三、顺序结构

  • 格式字符:

    • %i同%d
    • %o 八进制
    • %g/G 系统决定采用什么格式(f或e)使输出宽度最小
    • %p 输出变量地址

    %m.ns,输出占m列,但只取字符串中左边n个字符。这n个字符输出在m列的右边,左边补空格

    %-m.ns,n个字符输出在m列范围的左边,右边补空格。若n>m,则m自动取n值,即保证n个字符正常输出。

BBABD DACDD CCA

BDCBD DACDB DCB 34页

  • 八进制格式输出开头不带0

  • 逗号优先级低于赋值

四、选择结构

  • 逻辑或运算的短路性

    如果||前的表达式为真,则不会进行||后的表达式运算(&&以此类推)

DBADD AAAAA AC

DBADD DACAB AC 54页

五、循环结构

  • while((ch=getchar())!=’\n’);符合语法

AAADC DBBCC BCA

AACBC DBBCB BBC 75页

六、字符型数据

  • 转义字符

    \f:换页

    \ddd: 1~3位八进制数对应字符例如’\123’

    \xhh: 1~2位16进制数对应字符例如’\x12’

BAADD DBCB

BACDD DCCB 85页

3忽略

  • default后无break也会执行(?)

七、函数

CDDCB DDDAD C

BDDDC DADCD C 102页

  • 简单变量作实参时与形参数据的传输方式为单向值传递
  • return语句中带有++时,返回之后并且作用之后才会++

八、指针

  • int a,*p1=&a;由于&和运算优先级相同,& p1则从右至左运算,则& *p1等同于&a

    &a则是等同于 p1等同于a

  • *的优先级高于+、-,因此*p1=*p1+1是将a+1的值存进p内存储的地址所指向的内容中,也就是相当于a=a+1;但是a的地址是不变的。

具体对指针的一些理解已添加在指针相关复习 | 小董的BLOG (gitee.io)

DADBB ADBDB BCC

DADDB ACBDB BCC 116页

7忽略(第一次全对捏)

九、数组

CDDBC CBBCD ACAB

CDDBC CBBCD ACAC 146页

十、字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdio.h"
void swap(char *x, char *y)
{
while(*x=='*') x++;
while(*y=*x) //将x所指向的字符赋值给y,直到遇到'/0'为止,这样写是正确的
{
x++;y++;
}
}
int main()
{
char s[30]="******a*b***",t[30];
swap(s,t);
puts(t);
return 0;
}

AADCC DABBD CA

AADCC CBBBA CB 173页 6、10、12

strcpy会覆盖原来的整个字符串,而strncpy只会覆盖n个字节原来的字符串,剩下的保留

十一、对函数的进一步讨论

  • 传入main的参数

    1
    main(int argc, char *argv[])

当我们对一个名为test的c文件进行编译时,在终端输入: test ok good后:

  • argc值为3,即存入argv的字符串个数
  • argv[0]存放
  • 对指向函数的指针变量进行加减法无意义

CDCDD BBCB

CDCDC BBCB 184页

十二、用户标识符的作用域和存储类

ACDBA ACCCD C

ACDBB ADCCA D 195页

  • 若全局变量和某一函数中局部变量同名,则在函数内全局变量被屏蔽

十三、编译预处理和动态存储分配

详见一些关键字 | 小董的BLOG (gitee.io)

AACDC ADAA

DBBBC ACAA

define只作替换!!!!

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#define D1(a) (2*a)
#define D2(a) (2*(a))
//计算结果最好也用括号括起来,小型计算不括问题应该不大
int main ()
{
int b = D1(3+4);
int c = D2(3+4);
printf("%d", b); //输出等价于2*3+4=10 ※※※※※※※※※※※※※
printf("%d", c); //2*(3+4)=14
return 0;
}

十四、结构体、共用体和用户自定义型

1
struct {int a;int b;}a;//合法

关于动态链表详见结构体复习 | 小董的BLOG (gitee.io)

AABB× CCBDD BC

ADBBA DCBCD BD 6题看题不仔细捏

十五、位运算

长度不同的数据进行位运算时先将最低位对齐,然后将短的一方扩充

DCDAA BCD

DADAA BCD

看清楚输出的格式声明

240