【C语言必知必会 | 子系列第一篇】深入剖析顺序结构(1)

简介: 【C语言必知必会 | 子系列第一篇】深入剖析顺序结构(1)

引言

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。它在编程语言中具有举足轻重的地位。

此文为【C语言必知必会子系列】第一篇,基于进行C语言顺序结构的选择题专项练习,结合专题优质题目,带领读者从0开始,深度掌握知识点。



1️⃣ 前言

在【C语言必知必会】系列中,我们学习了顺序结构、选择结构、循环结构等,同时也通过专项练习进行了知识点的巩固和手敲代码的锻炼。

在子系列中,我们将基于PTA教学平台,向C语言学习者提供更优质的题目与更巧妙、精髓的解题思想与方法。

PTA是一个程序设计类实验辅助教学平台,由千名老师共同建设,里面包含了上万道高质量题目,用户量达百万。

在本讲中,将深入讲解顺序结构的选择题,在思想上引领读者带领读者在理论结合实际的基础上更好地学习、吸收、掌握C语言。


2️⃣PTA专项练习

接下来,开始我们的顺序结构选择题专篇练习。

1.C 语言程序中可以对程序进行注释,注释部分必须用什么符号括起来?

A.  '{' 和‘}'
B. '[' 和 ']'
C. '/*' 和 '*/'
D.   '*/' 和 '/*'

解析:

在C语言中,我们可以使用两种符号来注释代码:单行注释和多行注释。

  • 单行注释:使用双斜杠 // 开始,直到该行的末尾都将被注释掉。例如:
// 这是一个单行注释
int x = 5; // 这行也是注释
  • 多行注释:使用斜杠和星号 /* 开始,使用星号和斜杠 */ 结束。这种注释方式可以跨越多行。例如:
/*
这是一个
多行注释
*/
int y = 10;

因此答案选C


2.下列运算符中,优先级最低的是____。

A. *
B. !=
C. +
D. =

解析:

以下是常见的C语言运算符按照优先级由高到低的顺序:

1.括号: (),用于改变运算顺序。

2.单目运算符:

- 正号: +

- 负号: -

- 逻辑非: !

- 位取反: ~

- 前置递增/递减: ++--

3.乘除取模运算符:

- 乘法: *

- 除法: /

- 取模(求余): %

4.加减运算符:

- 加法: +

- 减法: -

5.移位运算符:

- 左移: <<

- 右移: >>

6.关系运算符:

- 小于: <

- 大于: >

- 小于等于: <=

- 大于等于: >=

7.相等性运算符:

- 等于: ==

- 不等于: !=

8.逻辑与运算符: &&

9.逻辑或运算符: ||

10.条件运算符: ?:

11.赋值运算符:

- 简单赋值: =

- 复合赋值: +=-=*=/=%=<<=>>= 等。

因此,正确答案为D


3.已知字符 ‘a’ 的ASCII码为 97,执行下列语句的输出是____。

printf ("%d, %c", 'b', 'b'+1 ) ;
A. 98, b
B. 语法不合法
C. 98, 99
D. 98, c

解析

在这个语句中,printf(“%d, %c”, ‘b’, ‘b’+1),我们有两个参数需要输出。

第一个参数 ‘b’ 是字符字面量,其ASCII码为 98。%d 格式说明符用于输出整数,所以输出为 98。

第二个参数 ‘b’+1 是一个表达式,‘b’ 的ASCII码为 98,加 1 后得到 99。同样地,%c 格式说明符用于输出字符,所以输出为字符 ‘c’

因此,答案为D


4.要调用数学函数时,在#include命令行中应包含____。

A. "stdio.h"
B. "string.h"
C. "math.h"
D."ctype.h"

解析

A. “stdio.h”:

这是一个标准输入输出的头文件,其中包含了许多与输入输出有关的函数。例如,printf和scanf等函数都在这个头文件中声明。如果你的代码中使用了这些函数,就需要包含<stdio.h>。

B. “string.h”:

这是一个字符串处理的头文件,其中包含了一些与字符串操作相关的函数。例如,strcpy、strlen和strcmp等函数都在这个头文件中声明。如果你的代码中使用了这些字符串函数,就需要包含<string.h>。

C. “math.h”:

这是一个数学函数的头文件,其中包含了各种数学函数的声明。例如,三角函数(如sin、cos、tan)、指数函数(如exp、log)、幂函数(如pow)等都在这个头文件中声明。如果你的代码中使用了这些数学函数,就需要包含<math.h>。

D. “ctype.h”:

这是一个字符处理的头文件,其中包含了一些与字符操作相关的函数。例如,isalpha、isdigit和tolower等函数都在这个头文件中声明。如果你的代码中使用了这些字符处理函数,就需要包含<ctype.h>。

因此答案选C


5.若a是基本整型变量,c是单精度实型变量,输入语句____是错误的。

A. scanf("%d,%f”, &a, &c);
B. scanf("d=%d, c=%f”, &a, &c);
C. scanf("%d%f”, &a, &c);
D. scanf("%d%f”, a, c);

解析

在使用scanf函数进行输入时,需要传递变量的地址作为参数,而不是变量本身。正确的写法是使用&运算符获取变量的地址。

因此答案选D


6.表达式______的值是0。

A.3%5
B.3/5.0
C.3/5
D.3<5

解析:

在C语言中,当两个整数进行除法运算时,结果将会被截断为整数部分,即舍去小数部分。所以,3/5 的结果是 0。

其他选项的值如下:

A. 3%5 表示取模运算,即 3 除以 5 的余数,结果是 3。

B. 3/5.0 表示浮点除法运算,其中一个操作数是浮点数,结果是 0.6。

D. 3<5 是一个比较运算,判断 3 是否小于 5,结果是 1(表示真)。

因此答案选C


7.以下选项中不正确的整型常量是( )。

A.12L
B.-10
C.012
D.2,900

解析:

在 C 语言中,整型常量可以是十进制、八进制或十六进制表示法。然而,逗号不是整型常量的有效字符,因此 2,900 不是一个正确的整型常量。

其他选项的值如下:

A. 12L 表示长整型常量,其值为十进制的 12。

B. -10 表示一个负数常量,其值为十进制的 -10。

C. 012 是一个八进制(Octal)表示法,其对应的十进制值为 10。

因此答案选D


8.以下标识符中,不合法的是( )。

A.4d
B._8_d
C.Int
D.key

解析:

在 C++ 中,标识符由字母、数字和下划线组成,且必须以字母或下划线开头。

B. _8_d 是一个合法的标识符,以下划线开头,后面跟着数字和字母。

C. Int 是一个合法的标识符,由字母组成,区分大小写。

D. key 是一个合法的标识符,由字母组成,区分大小写。

因此,选项 A 中的 4d 不符合要求,以数字开头的标识符是不合法的。


9.若有char w; int x; float y; double z; 则表达式w*x+z-y值的数据类型为( )。

A.float
B.char
C.int
D.double

解析:

根据 C++ 中的隐式类型转换规则,表达式的结果类型将根据操作数的类型进行推导。在这个表达式中,w 和 x 的乘积将会得到一个整型结果,即 int 类型。然后,z 的类型是 double,而 y 的类型是 float。在运算过程中,int 类型将会被提升为更高精度的类型 double。最后,减法运算符 - 所得到的结果仍然是 double 类型。

因此,答案选D


10.在C语言中,要求运算数必须是整型的运算符是( )。

A.%
B./
C.<
D.!

解析:

在 C 语言中,% 是取模运算符(Modulus Operator)。它要求操作数是整型数据,用于计算两个整数相除后的余数。

其他选项的说明如下:

B. / 是除法运算符(Division Operator),用于计算两个数值相除的结果。它可以应用于多种数据类型,包括整数和浮点数。

C. < 是小于运算符(Less Than Operator),用于比较两个操作数的大小关系。它可以应用于整数和浮点数。

D. ! 是逻辑非运算符(Logical NOT Operator),用于对一个布尔值进行取反。它可以应用于逻辑类型(int)。

因此,答案选A %


11.在C语言中,数字029是一个( )。

A.八进制数
B.十进制数
C.十六进制数
D.非法数

解析:

在 C 语言中,以 0 开头的数字常量被解释为八进制数。然而,八进制数的每个位上的数字必须是 0 到 7 之间的数字。 因此,数字 029 中的 9 超出了八进制数的范围,导致它是一个非法数。

其他选项的说明如下:

A. 八进制数:正确的八进制数中只能包含数字 0 到 7。

B. 十进制数:十进制数是我们通常使用的数字系统,不需要以任何前导零来表示。

C. 十六进制数:十六进制数以 0x 或 0X 开头,后面跟着十六进制的数字和字母(A-F)。

因此,答案选D


12.已知字母A的ASCII码为十进制数65,且ch为字符型变量,则执行语句ch=‘A’+‘6’-‘3’;后,ch中的值为__。

A. D
B. 68
C. C
D. 不确定

解析:

在C语言中,字符型变量在计算时会被隐式转换为其对应的ASCII码值。

所以先进行 ‘A’ + ‘6’ 的操作,即将字符 ‘A’ 的ASCII码(65)与字符 ‘6’ 的ASCII码(54)相加,结果为 119。然后再减去字符 ‘3’ 的ASCII码(51),得到最终结果 68。

因此,执行语句后, ch 中的值为十进制数 68,对应ASCII码表上的字符是 ‘D’。


13.若a为int类型,且其值为3,则执行完表达式a+= a-= a*a后,a的值是__。

A. -3
B. 9
C. -12
D. 6

解析:

根据 C 语言中的运算符优先级规则,乘法运算符 * 的优先级高于赋值运算符 -= 和 +=。所以在计算表达式时,首先要计算乘法部分。

表达式 a * a 的结果是 3 * 3,即 9。

然后,从左到右依次进行 -= 和 += 运算。

首先是 -= 运算,相当于将 a 减去 a * a 的结果,即 a -= 9。此时 a 的值变为 -6。

接下来是 += 运算,相当于将 a 加上 -6 的结果,即 a += -6。最终 a 的值变为 -12。

因此,执行完表达式 a += a -= a * a 后,a 的值为 -12。

答案选C


14.按照标识符的要求,( )不能组成标识符。

A.连接符
B.下划线
C.大小写字母
D.数字字符

C语言中的标识符由字母、数字和下划线组成,并且必须以字母或下划线开头。连接符不能单独作为标识符使用,它们主要用于连接多个单词形成一个标识符。

选项 B. 下划线、选项 C. 大小写字母和选项 D. 数字字符都可以用来组成合法标识符。

因此,按照C语言标识符的要求,选项 A. 连接符 不能组成标识符。

答案选A


15.定义变量 int a;,则表达式 a = 3, 5; 执行过后,a的值和表达式的值分别是:

A.3 , 5
B.5 , 3
C.3 , 3
D.5 , 5

解析:

首先,左侧的表达式 a = 3 将 3 赋值给变量 a。然后,右侧的表达式 5 的值被忽略,因为逗号运算符只返回最后一个表达式的值。

所以,执行完表达式 a = 3, 5; 后,a 的值是 3,而整个表达式的值是 5。

因此,答案为A


16.定义 char a; 则以下赋值语句不恰当的是:

A.a = 65;
B.a = "A";
C.a = '\65';
D.a = 6 + 'A';

解析:

A. a = 65;:这是一个合法的赋值语句。ASCII码值 65 对应的字符是 ‘A’,因此将 ‘A’ 赋值给变量 a 是正确的。

B. a = “A”;:这是一个错误的赋值语句。双引号 “A” 表示一个字符串字面量,它包含两个字符 ‘A’ 和 ‘\0’(表示字符串的结束符)。而我们声明的是一个 char 类型的变量,只能接受单个字符的赋值,不能直接将字符串赋值给 char 变量。

C. a = ‘\65’;:这是一个合法的赋值语句。在字符常量中,使用反斜杠(\)加上八进制数值可以表示一个特定的 ASCII 字符。‘\65’ 表示的是 ASCII 码值为 65(十进制)对应的字符 ‘A’。

D. a = 6 + ‘A’;:这是一个合法的赋值语句。它进行了字符 ‘A’ 的加法运算,并将结果赋值给变量 a。由于字符在计算机中都是以 ASCII 码值存储的,所以这里的表达式实际上是将 6 加上字符 ‘A’ 的 ASCII 码值(十进制为 65),然后将结果 71(十进制)赋值给变量 a。

因此答案选B


17.下面哪个表达式的值是2。

A.6%3
B.-5%3
C.5%-3
D.-5%-3

解析:

A. 6%3 = 0:6除以3没有余数,所以结果是0。

B. -5%3 = -2:-5除以3,商是-1,余数是-2。余数的符号与被除数相同,所以结果是-2。

C. 5%-3 = 2:5除以-3,商是-1,余数是2。余数的符号与被除数相同,所以结果是2。

D. -5%-3 = -2:-5除以-3,商是1,余数是-2。余数的符号与被除数相同,所以结果是-2。

所以答案选C


18.以下程序的运行结果是

#include <stdio.h>
main()
{  
   int  a;
   a = (int)1.99*3;
   printf("%d\n", a);
}

A.3

B.5

C.6

D.结果不确定

解析:

在程序中,将浮点数 1.99 强制类型转换为整型后乘以 3,并将结果赋值给整型变量 a。当将浮点数转换为整型时,会直接截断小数部分,只保留整数部分。

1.99 被强制类型转换为整型后,其小数部分被截断,成为 1。然后 1 乘以 3 得到 3,最终将结果赋值给变量 a。

因此,程序的运行结果是 3。

答案选A


19.若有说明语句:char s='\42’;则变量s_____。

A.包含一个字符

B.包含两个字符

C.包含三个字符

D.说明不合法,s的值不确定

解析:

在给变量s赋值的语句中,‘\42’ 是一个转义序列,表示一个八进制的ASCII码值。具体来说,‘\42’ 表示的是八进制数 42(等于十进制数 34),对应的 ASCII 字符是双引号(")。

所以,变量s的值是一个字符,即双引号(")。

因此,选项 A. 包含一个字符 是正确答案。


20.下面叙述中错误的是()。

A.int x=4,y=0,z=5;(x==y)==z; 执行上述语句后x的值为0;

B.设 x 的值为15,n 的值为2,则表达式 x%=(n+3)运算后 x 的值是0

C.字符串的结束标志是’\0’;

D.x=5,y=8时,c语言表达式2>=x<=y的值是1

解析:

(x==y) 是一个条件表达式,其结果为布尔值(true 或 false)。根据代码中的赋值语句,将布尔值和 z 的值进行比较,与x的赋值无关,x 的值不会被修改为 0。

选项 B 中的叙述是正确的,15 % (2 + 3) = 15 % 5 = 0;将计算结果 0 赋值给 x。因此,最终 x 的值为 0

选项 C 中的叙述是正确的,字符串的结束标志是 ‘\0’。

选项 D 中的叙述是正确的,C 语言中的比较运算符按照从左到右的顺序结合,所以 2>=x<=y 等价于 (2>=x)<=y,即先比较 2 是否大于等于 x,结果为真,再将结果 1 与 y 比较,结果仍为真。

因此答案为A


21.C 语言采用的翻译方式为 ▁▁▁▁▁。

A. 解释方式

B. 编译方式

解析:

C 语言采用的是编译方式进行翻译。在编译方式中,源代码会被编译器转换为目标机器的机器代码,然后可以直接在目标机器上执行。编译过程包括词法分析、语法分析、语义分析、代码生成和优化等步骤,最终生成可执行文件或目标文件。

相比之下,解释方式是逐行解释执行源代码,不需要将代码转换为机器码。解释器会逐行读取源代码并立即执行相应操作,这种方式通常会更慢一些。


22.以下运算符优先级按从高到低排列正确的是( )。

A. 算术运算、赋值运算、关系运算

B. 关系运算、赋值运算、算术运算

C. 算术运算、关系运算、赋值运算

D. 关系运算、算术运算、赋值运算

解析:

正确答案是 C. 算术运算、关系运算、赋值运算。

以下是各个运算符的优先级从高到低的排列顺序:

  1. 算术运算符(例如:乘法、除法、取余等)
  2. 关系运算符(例如:大于、小于、等于等)
  3. 赋值运算符(例如:=、+=、-=等)

根据优先级规则,先进行算术运算,在算术运算完成后再进行关系运算,最后才是赋值运算。

因此,选项 C 中的顺序 “算术运算、关系运算、赋值运算” 是正确的。


23.scanf()函数在读不到数据时返回()

A.NULL
B.0
C.EOF
D.1

解析:

正确答案是 C. EOF。

scanf()函数在读取输入时遇到文件结束符(End-of-File,EOF)或无法匹配有效输入时,它会返回EOF。EOF 是一个常量,表示文件结束符,在 <stdio.h> 头文件中被定义为一个负整数。

因此,选项 C 中的回答 “EOF” 是正确的。


24.int i = 2.9 * 6的结果是( ) 。

A.12
B.16
C.17
D.18

解析:

根据 C 语言中的隐式类型转换规则,在进行赋值操作时,将浮点数类型的结果转换为整数类型时会截断小数部分,只保留整数部分。

因此,2.9 * 6 的结果是 17.4,截断小数部分后为 17。将 17 赋值给整型变量 i,i 的值为 17。

因此答案为C


3️⃣ 总结

此文为 【C语言必知必会】子系列第一篇 ,通过以题代练的形式带领读者掌握C语言的顺序结构,带领读者从0开始,深度掌握知识点。

以题代练对于C语言的学习是十分重要的,专栏将持续提供优质C语言编程题与理论课的学习,带领读者全方位掌握C语言,读者可订阅专栏持续。

目录
相关文章
|
11天前
|
C语言
C语言之分支结构
C语言之分支结构
26 0
|
11天前
|
C语言
C语言结构体内存对齐
C语言结构体内存对齐
|
11天前
|
Serverless C语言
C语言程序通常具有以下基本结构
C语言程序通常具有以下基本结构
12 0
|
11天前
|
C语言
C语言选择结构
C语言选择结构
18 0
|
11天前
|
存储 C语言
C语言顺序结构:基础与实践
C语言,作为一种广泛使用的编程语言,其程序结构可以分为三种基本类型:顺序结构、选择结构和循环结构。在这篇文章中,我们将重点讨论顺序结构的概念、特点以及如何在C语言中实现顺序结构的程序设计。
48 1
|
11天前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
2天前
|
程序员 C语言
C语言中的控制结构
C语言中的控制结构
|
3天前
|
程序员 C语言
C语言选择结构
C语言选择结构
8 0
|
3天前
|
存储 C语言
C语言顺序结构
C语言顺序结构
7 0
|
11天前
|
C语言
【精通C语言】:分支结构if语句的灵活运用
【精通C语言】:分支结构if语句的灵活运用
29 1