C 语言备考笔记

  1. 1. 结构
  2. 2. 数组
  3. 3. 函数
  4. 4. 指针
    1. 4.1. 判断题
    2. 4.2. 单选题
  5. 5. 后记

这学期开了 C 语言课,马上也就要期末考试了,就把最近 PTA 和 PPT 里的一些题整理一下下发到这里,非计算机专业,学术不精。

2021.9.10 更新

发现了阮一峰大佬写的好东西,想入门的可以参考这个,我的太烂了。链接 1 链接 2

结构

三种程序结构是 C 语言的基础了:顺序结构、选择结构(if 或 swich-default)、循环结构。

  • C 语言程序是从源文件的第一条语句开始执行的。F
  • C 语言中的局部变量如果没有指定初值,则其初值自动设置为 0。F
  • 变量的两个值 : 本身值和地址值都是可以改变的。F 地址是不变的
  • continue 只能用于循环体中。T
  • 在 switch 语句中,每一个的 case 常量表达式的值可以相同。F
  • 运行 int i, a; i=(a=2*3,a*5), a+6; 结果 i=30,a=6, 表达式的值 11。
    逗号表达式的值等于最后一个表达式的值,是 C 语言中等级最低的运算符
  • 若 x 为浮点型,则表达式 x=10/4 为( )。
    A.2.5 B.2.0 C.2 D.3
    答案是 A,区别于 10.0/5,先得结果为 2,再转换为浮点型是 2.0。
  • 在 C 语言中,数字 029 是一个( )。
    A. 八进制数 B. 十进制数 C. 十六进制数 D. 非法数
    答案是 D,八进制里没有 9。
  • 以下标识符中,不合法的是( )。
    A.4d B._8_d C.Int D.key
    答案是 A,标识符的第一位必须是字母或者下划线,不能是数字。
  • 若有定义:double a=22;int i=0,k=18;则不符合 C 语言规定的赋值语句是 ()
    A) i=(a+k)<=(i+k) B) i=a%11 C) i=a
    答案 B,浮点数不能整除运算。
  • 若变量已正确定义并赋值,符合 C 语言语法的表达式是 __.
    A.a=2++ B.a=3,5 C.a=a+1=3 D.12.3%4
  • 设有程序段 int m=20; while (m=0) m=m++; 则下面描述中正确的是( )。
    A.while 循环执行 10 次 B. 循环是无限循环
    C. 循环体语句一次也不执行 D. 循环体语句执行一次
    答案 C。m=0 是赋值语句。
  • 判断闰年 leap=(year%4==0 && year%100!=0) || (year % 400 == 0);

数组

数组最应注意初始化,别忘记定义数组个数。下面是一些不好记的库函数:

  • puts(str) 等于 printf(“%s”,ste)
  • gets(str) 约等于 scanf(“%s”,str)
    • gets()以回车结束输入,会舍弃最后的回车符。
    • scanf()以空白字符结束一次输入, 包括空格、回车等。
    • scanf()遇到回车结束后,不会舍弃’\n’, 而是留在了输入缓冲区中。
  • strcmp(str1,str2) 字符串比较函数
    • str1 大于 2, 返回正值
    • 逐位比较 ASCII 码,如 z>a>>Z>A>>9>0
    • scanf 在读取非空白符之前会忽略回车.
  • strcat(str1,str2)用连字符连接字符串
  • strcpy(str1,str2) 对 str1 作用,把 str2 复制到 str1
  • strlen(str) 测字符串长度函数
  • strlwr(str) 转化为小写函数
  • strupr(str) 转化为大写函数

函数

  • 判断一个素数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int is(int n) // 判断一个素数
{
int i,a=0; // 赋初值!!!
for(i=2;i<=n-1;i++)
{
if(n%i==0)
{
a++;
break;
}
}
if(a!=0) return 0;
else return 1;
}

指针

指针相对于之前的知识还是有些难度的!

判断题

  • 直接访问就是直接利用变量的地址直接进行访问。T
  • char *s=”C Language”; 表示 s 是一个指向字符串的指针变量,把字符串的首地址赋予 s。T

单选题

  • 设变量定义为 int a[2]={1,3}, p=&a[0]+1; ,则 p 的值是()。
    答案为 3,*p=&a[1]值为 3。

  • 若变量已正确定义并且指针 p 已经指向某个变量 x,则 (p)++ 相当于____。
    A.p++ B.x++ C.
    (p++) D.&x++
    答案为 B,*p=x,(*p)++ 自然等于 x++。

  • 若有如下定义,则( )的值是 34。
    int a[] = {5, 15, 34, 54, 14, 2, 52, 72};int *p = &a[1];
    A.p[1] B.p[2] C.p[0] D.p[3]
    p 指向 a[1],p[1]的内容就是 a[2]了,也就是 34。

  • 根据声明 int a[10], *p=a; ,下列表达式错误的是( )。
    A.a[9] B.p[5] C.a++ D.*p++
    答案为 C,p[5]就是 *(p+5), 也就是 a[5]。

  • 若定义 pf 为指向 float 类型变量 f 的指针,下列语句中__是正确的。
    A.float f, *pf = f; B.float f, *pf = &f;
    C.float *pf = &f, f; D.float f, *pf =0.0;
    答案为 B。float f, pf = f; 含义同赋值语句pf = f 不同,而是相当于 float f, *pf;pf = f;pf 被初始化指向地址值为 f 的指针,而地址值不可能是 float 的,这不合语法,所以出错。定义时初始化 float *pf = &f; 等价的语句是:float *pf;pf = &f; 是正确的。

后记

写个东西,排版有点费事,有这时间还不如滚去复习去~