这学期开了 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 | int is(int n) // 判断一个素数 |
指针
指针相对于之前的知识还是有些难度的!
判断题
- 直接访问就是直接利用变量的地址直接进行访问。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; 是正确的。
后记
写个东西,排版有点费事,有这时间还不如滚去复习去~