1. C语言程序是从源文件的第一条语句开始执行的 (F)
在 C 语言中,程序是从 main 函数开始执行的,而不是从源文件的第一条语句开始执行
2. 若变量定义为double x;,则x % 2是符合C语言语法的表达式 (F)
在 C 语言中,% 运算符(取余运算符)只能用于整数类型的操作数
3. 关于C语言指针的运算:指针只有加减操作,没有乘除操作。指针可以加常数、减常数;相同类型的指针可以相减,不可以相加 (T)
在 C 语言中,指针通常只有加减操作,没有乘除操作。
指针可以加常数、减常数,这通常用于在数组中移动指针的位置。例如,如果有一个指向数组元素的指针 p ,p + 1 会指向数组中的下一个元素。
相同类型的指针可以相减,相减的结果表示两个指针之间的元素个数。但相同类型的指针不可以相加,因为相加的结果在大多数情况下没有明确的实际意义
4. 在 switch
语句中,多个 case
标号可以共用一组语句 (T)
#include <stdio.h> int main() { int num = 2; switch (num) { case 1: case 2: case 3: printf("The number is 1, 2 or 3.\n"); break; case 4: printf("The number is 4.\n"); break; default: printf("The number is not in the expected range.\n"); } return 0; }
在上述示例中,case 1
、case 2
和 case 3
共用了一组语句。
5. 语言的三种循环(for
循环、while
循环、do-while
循环)是可以互相嵌套的 (T)
6. 以下程序段的功能是计算20的阶乘。 (F)
int i; double product; product = 0; for (i = 1; i <= 20; i++){ product = product * i; }
初始化时将 product 初始化为 0 是不正确的。阶乘的计算是从 1 开始连续相乘,如果初始化为 0 ,那么后续的乘法运算结果始终为 0
7. 函数的实参可以是常量,变量或表达式 (T)
例如,定义一个函数 void myFunction(int num) ,在调用这个函数时,可以这样传递实参:
常量:myFunction(5) ,这里的 5 就是常量。
变量:int a = 10; myFunction(a) ,这里的 a 是变量。
表达式:myFunction(2 + 3) ,这里的 2 + 3 是表达式。
8. 按照C语言的规定,在参数传递过程中,既可以将实参的值传递给形参,也可以将形参的值传递给实参,这种参数传递是双向的。 (F)
在 C 语言中,参数传递只有值传递和地址传递。值传递时,形参的改变不会影响实参;地址传递时,可以通过指针间接修改实参的值。但总体来说,参数传递是单向的,从实参到形参,不存在形参的值直接传递给实参的情况。
9. 在对数组全部元素赋初值时,不可以省略行数,但能省略列数 (F)
在对数组全部元素赋初值时,可以省略行数,但不能省略列数。
例如,定义一个整型数组 int arr[] = {1, 2, 3, 4, 5}; ,这里省略了行数。
但如果是二维数组,如 int arr[][3] = {{1, 2, 3}, {4, 5, 6}}; ,列数不能省略。
10. 判断字符串a是否大于b,可以表示为 if (strcmp(a,b)>0) (T)
在 C 语言中,strcmp 函数用于比较两个字符串。如果 strcmp(a, b) > 0,则表示字符串 a 大于字符串 b 。
11. "a" 和 'a'是等价的。 (F)
"a" 是一个字符串,它实际上包含两个字符:字符 'a' 和字符串结束标志 '\0' 。
'a' 是一个字符。 所以 "a" 和 'a' 不等价。
12. 结构体成员的类型必须是基本数据类型 (F)
结构体成员的类型不仅可以是基本数据类型(如 int
、float
、char
等),还可以是其他结构体类型、指针类型、数组类型等
#include <stdio.h> struct Point { int x; int y; }; struct Person { char name[20]; int age; struct Point location; // 结构体类型作为成员 float *scores; // 指针类型作为成员 int grades[5]; // 数组类型作为成员 }; int main() { struct Person p; return 0; }
13. 指向结构体变量的指针可以作函数参数,实现传址调用 (T)
通过传递结构体指针作为参数,可以在函数内部修改结构体变量的成员值,并且这些修改会反映到函数外部调用处的结构体变量上
#include <stdio.h> struct Student { int id; char name[20]; }; void modifyStudent(struct Student *stu) { stu->id = 101; strcpy(stu->name, "Alice"); } int main() { struct Student stu = {1, "Bob"}; printf("Before modification: ID = %d, Name = %s\n", stu.id, stu.name); modifyStudent(&stu); printf("After modification: ID = %d, Name = %s\n", stu.id, stu.name); return 0; }
在上述示例中,modifyStudent 函数接受一个指向 struct Student 类型的指针,在函数内部修改了结构体成员的值,实现了通过指针的传址调用。
14. 共用体变量可以作结构体的成员,结构体变量也可以作共用体的成员。 (T)
共用体变量可以作为结构体的成员,结构体变量也可以作为共用体的成员。这种嵌套使用在 C 语言中是允许的,可以根据具体的编程需求灵活运用,以实现更复杂的数据结构。
15. 在单向链表中,头指针中存放的是头结点的内容。 (T)
头指针存放的是头结点的地址,而不是头结点的内容
16. 共用体变量可以作结构体的成员,结构体变量也可以作共用体的成员 (T)
共用体和结构体可以相互嵌套使用
17. 单向链表中的每个结点都需要动态分配内存空间 (T)
单向链表的节点通常是在运行时动态分配内存来创建的。
18. 通常使用结构的嵌套来定义单向链表结点的数据类型 (T)
常见的单向链表节点的数据类型是通过结构体嵌套指针来定义的
19. 一个结构类型变量所占的内存空间是其各个成员所占内存空间之和 (T)
结构体变量的内存空间大小等于其所有成员变量所占内存空间的总和,可能会存在字节对齐的情况导致实际占用空间略大于各成员简单相加。
20. 用链表代替数组进行数据操作时,查询更加方便。 (F)
链表在插入和删除操作上比数组更具优势
21. 循环链表的最后一个元素指向链表的第一个元素。 (F)
在循环链表中,最后一个元素的指针指向链表的第一个元素,从而形成一个环形结构
22. 函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值 (T)
#include <stdio.h> void myFunction() { printf("Hello!\n"); } int main() { void (*ptr)(); // 定义一个指向函数的指针 ptr = myFunction; // 用函数名给指针赋值 // 通过指针调用函数 (*ptr)(); return 0; }
在上述代码中,定义了一个指向 void
类型、无参数函数的指针 ptr
,然后将 myFunction
函数的地址赋给了 ptr
,之后通过解引用指针来调用函数。
23. 要通过函数调用来改变主调函数中某个变量的值,可以把指针作为函数的参数 (T)
因为指针传递的是变量的地址,在被调函数中对指针所指向的内存进行操作,就能够直接修改主调函数中变量的值。
#include <stdio.h> void modifyValue(int *ptr) { *ptr = 100; } int main() { int num = 50; printf("Before modification: %d\n", num); modifyValue(&num); printf("After modification: %d\n", num); return 0; }
在上述代码中,modifyValue
函数通过指针 ptr
改变了主调函数 main
中 num
的值。
海漫浩浩,我亦苦作舟!大家一起学习,一起进步!