Appearance
《C语言程序设计》期末试卷 (精选11)
一、单项选择题
要求: 根据题目从 A、B、C、D 中选择一个正确的选项
- 根据下面的定义,能打印出字母 M 的语句是( )。
struct person
{
char name[9];
int age;
};
struct person class[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};2
3
4
5
6
- A.
printf("%c\n",class[3].name); - B.
printf("%c\n",class[3].name[1]); - C.
printf("%c\n",class[2].name[1]); - D.
printf("%c\n",class[2].name[0]);
查看答案与解析
答案:D
解析:class[2] 是 "Mary"(索引从 0 开始:class[0]="John", class[1]="Paul", class[2]="Mary"),name[0] 是 'M'。
难度: ⭐ 考点: #结构体数组 #索引
💡 学习锦囊
📖 相关公式与知识点:
- 结构体数组索引从 0 开始。
%c输出单个字符,%s输出字符串。
易错点
A 选项用 %c 输出 class[3].name(地址),类型不匹配。
🔄 举一反三
- 打印出字母 'P' 的语句是什么?
查看练习答案与解析
答案:
printf("%c\n",class[1].name[0]);解析:class[1] 是 "Paul",name[0] 是 'P'。
- 关于字符型变量的定义,下列选项正确的是( )。
- A.
char ch = a; - B.
char ch = 'a'; - C.
char ch = "a"; - D.
char ch = \a;
- A.
查看答案与解析
答案:B
解析: 字符常量用单引号括起来。A 中 a 是未定义标识符,C 中 "a" 是字符串(双引号),D 缺少引号。
难度: ⭐ 考点: #字符常量 #char
💡 学习锦囊
📖 相关公式与知识点:
- 字符常量:单引号
'a',占 1 字节。 - 字符串常量:双引号
"a",占 2 字节(含 '\0')。
易错点
单引号和双引号不可混用,'a' 和 "a" 是不同的数据类型。
🔄 举一反三
char ch = 97;是否合法?ch 的值是什么?查看练习答案与解析
答案:合法,ch 的值为 'a' 解析:97 是 'a' 的 ASCII 码,可以直接赋值给 char 变量。
- 关于二进制,下列描述错误的是( )。
- A. 二进制数由数字 0 和 1 表示
- B. 一个二进制数字 0 和 1 表示一位,八位为一个字节
- C. 由于二进制由数值较小的 0 和 1 表示,所以只能表示一部分数据
- D. 二进制与十进制相互转换,不改变值的大小
查看答案与解析
答案:C
解析: 二进制可以表示所有数据,通过组合 0 和 1 可以表示任意数值、字符、图像等。计算机中所有数据最终都以二进制形式存储。
难度: ⭐ 考点: #二进制 #数制
💡 学习锦囊
📖 相关公式与知识点:
- 二进制是计算机的基础,所有数据(数字、文字、图像、声音)都以二进制存储。
- 1 字节 = 8 位(bit)。
思路分析
二进制虽然只有 0 和 1 两个符号,但通过位数扩展可以表示任意大的数值。
🔄 举一反三
- 8 位二进制能表示多少个不同的值?
查看练习答案与解析
答案:256(0~255) 解析:2^8 = 256。
- C 语言程序从 main()函数开始执行,所以这个函数要写在( )。
- A. 程序文件的开始
- B. 程序文件的最后
- C. 它所调用的函数的前面
- D. 程序文件的任何位置
查看答案与解析
答案:D
解析: main 函数可以放在程序文件的任何位置,编译器通过函数名定位入口点。
难度: ⭐ 考点: #main函数 #程序结构
💡 学习锦囊
📖 相关公式与知识点:
- main 是程序的逻辑入口,物理位置任意。
- 建议将 main 放在文件末尾或开头以便阅读。
🔄 举一反三
- 如果程序中没有 main 函数,会发生什么?
查看练习答案与解析
答案:链接错误,提示找不到 main 函数 解析:C 程序必须有且仅有一个 main 函数作为入口。
- 关于 strcmp( )函数,下列描述中错误的是( )
- A. strcmp( )函数用于比较两个字符串的内容是否相等
- B. 如果两个字符串的内容相同,strcmp( )函数返回 0
- C. strcmp( )函数是可变参数的函数
- D. strcmp( )函数只能接收字符指针作为参数,并不接收单个字符
查看答案与解析
答案:C
解析: strcmp 函数有两个固定的参数(两个字符串),不是可变参数函数。可变参数函数如 printf、scanf。
难度: ⭐ 考点: #strcmp #字符串比较
💡 学习锦囊
📖 相关公式与知识点:
strcmp(s1, s2):返回 0 表示相等,负数表示 s1<s2,正数表示 s1>s2。- 需要
#include <string.h>。
🔄 举一反三
strcmp("abc", "ABC")的返回值是什么?查看练习答案与解析
答案:正数(大于 0) 解析:'a'(97) > 'A'(65),所以 "abc" > "ABC"。
- C 语言程序从( )开始执行。
- A. 程序中第一条可执行语句
- B. 程序中第一个函数
- C. 程序中的 main 函数
- D. 包含文件中的第一个函数
查看答案与解析
答案:C
解析: C 程序总是从 main 函数开始执行,无论 main 函数在文件中的位置如何。
难度: ⭐ 考点: #程序入口 #main
💡 学习锦囊
📖 相关公式与知识点:
- main 函数是 C 程序的唯一入口点。
- 程序从 main 的第一条语句开始执行,到 main 的 return 或最后一条语句结束。
🔄 举一反三
- 在 main 函数之前定义的全局变量何时初始化?
查看练习答案与解析
答案:在 main 函数执行之前 解析:全局变量在程序加载时初始化,早于 main 的执行。
- 定义一个字符型变量,下列选项中正确的是( )。
- A.
char c = '97' - B.
char c = "97" - C.
char c = 97 - D.
char c = c
- A.
查看答案与解析
答案:C
解析:char c = 97 将 ASCII 码 97(字符 'a')赋值给 c。A 中单引号内只能有一个字符,B 是字符串,D 中 c 未定义。
难度: ⭐ 考点: #char赋值 #ASCII
💡 学习锦囊
📖 相关公式与知识点:
- char 本质是 1 字节整数,可以赋整数值(0~255)。
char c = 'a'和char c = 97等价。
易错点
单引号内只能有一个字符,'97' 是多字符常量,行为未定义。
🔄 举一反三
char c = '0';和char c = 0;有什么区别?查看练习答案与解析
答案:前者 c 的值为 48(字符 '0' 的 ASCII 码),后者 c 的值为 0(空字符 '\0') 解析:字符 '0' 的 ASCII 码是 48,不是 0。
- 若
int i=10;执行下列程序后,变量 i 的正确结果是( )。
switch ( i )
{
case 9: i+=1;
case 10: i+=1;
case 11: i+=1;
default : i+=1;
}2
3
4
5
6
7
- A. 13
- B. 12
- C. 11
- D. 10
查看答案与解析
答案:A
解析: i=10 进入 case 10。由于没有 break,依次穿透执行 case 10、case 11 和 default。i = 10+1+1+1 = 13。
难度: ⭐⭐ 考点: #switch穿透 #break
💡 学习锦囊
📖 相关公式与知识点:
- switch 中如果没有 break,会从匹配的 case 开始一直执行到 switch 结束。
- 这种"穿透"特性有时被故意利用,但通常需要 break 来分隔。
易错点
忘记写 break 是 switch 语句中最常见的错误。
🔄 举一反三
- 若在每个 case 后加
break;,i 的值是多少?查看练习答案与解析
答案:11 解析:只执行 case 10 中的 i+=1,然后 break 跳出。
- 若有以下说明语句:
struct student
{
int num;
char name[20];
float score;
} stu;2
3
4
5
6
则下面的叙述不正确的是 ( )。
- A. struct 是结构体类型的关键字
- B. struct student 是用户定义的结构体类型
- C. num, score 都是结构体成员名
- D. stu 是用户定义的结构体类型名
查看答案与解析
答案:D
解析: stu 是结构体变量名,不是类型名。类型名是 struct student。
难度: ⭐ 考点: #结构体 #类型与变量
💡 学习锦囊
📖 相关公式与知识点:
struct student是类型名,stu是变量名。- 区分类型定义和变量定义。
- 结构体中字符数组必须指定大小,如
char name[20]。
易错点
- 混淆类型名和变量名。
- 结构体中不能使用不完整类型
char name[],必须指定数组大小。
🔄 举一反三
- 如何用
struct student定义另一个变量 s2?查看练习答案与解析
答案:
struct student s2;解析:使用类型名定义新变量。
- 下列选项中,表示字符串末尾的结束标志是 ( )
- A.
'\n' - B.
'\r' - C.
'\0' - D. NULL
- A.
查看答案与解析
答案:C
解析:'\0'(ASCII 值为 0)是 C 语言字符串的结束标志。'\n' 是换行符,'\r' 是回车符,NULL 是指针空值。
难度: ⭐ 考点: #字符串结束符 #\0
💡 学习锦囊
📖 相关公式与知识点:
- 字符串以
'\0'结尾,占用额外 1 字节。 strlen("abc")= 3,但sizeof("abc")= 4。
易错点
NULL 是指针常量(值为 0),'\0' 是字符常量(值为 0),数值相同但类型不同。
🔄 举一反三
char s[5]="abc";中 s[3] 和 s[4] 的值是什么?查看练习答案与解析
答案:s[3]='\0',s[4]='\0' 解析:字符串 "abc" 占 4 字节,剩余元素自动初始化为 0。
二、判断题(每题 1 分,共 10 分)
要求: 正确打钩 (✓),错误打叉 (✗)
- 注释在编译时也会被编译到程序中 ( )
查看答案与解析
答案: ✗
解析: 注释在预处理阶段被移除,不会被编译到目标代码中。
难度: ⭐ 考点: #注释 #预处理
💡 学习锦囊
📖 相关公式与知识点:
- 单行注释:
// - 多行注释:
/* */ - 注释不影响程序大小和运行效率。
🔄 举一反三
- 注释可以嵌套吗?
查看练习答案与解析
答案:C 语言中
/* */不能嵌套 解析:第一个*/会结束注释,后续内容会被编译。
- 浮点型常量的指数表示中,e 是可以省略的。 ( )
查看答案与解析
答案: ✗
解析: 科学计数法中 e 不能省略。如 1.23e4 表示 $1.23 \times 10^4$,省略 e 就变成了普通小数 1.234。
难度: ⭐ 考点: #浮点常量 #科学计数法
💡 学习锦囊
📖 相关公式与知识点:
- 科学计数法格式:
尾数e指数或尾数E指数。 - 指数必须是整数。
易错点
1.23e4.5 不合法,指数必须是整数。
🔄 举一反三
1e3表示什么值?查看练习答案与解析
答案:1000.0 解析:1×10^3 = 1000.0。
- 若有定义
char s[] = {"hello"};则 sizeof(s)的大小为 5。 ( )
查看答案与解析
答案: ✗
解析:sizeof(s) = 6,因为字符串 "hello" 自动包含结尾的 '\0',共 6 个字符。
难度: ⭐ 考点: #sizeof #字符串
💡 学习锦囊
📖 相关公式与知识点:
sizeof返回变量或类型占用的字节数。- 字符串字面量自动添加
'\0'。
易错点
strlen(s) = 5(不计 '\0'),sizeof(s) = 6(计 '\0')。
🔄 举一反三
char s[10]="hello";的 sizeof(s) 是多少?查看练习答案与解析
答案:10 解析:sizeof 返回数组定义的大小,不是字符串长度。
- 在 switch 语句中,每一个的 case 常量表达式的值可以相同。 ( )
查看答案与解析
答案: ✗
解析: switch 中每个 case 的值必须互不相同,否则编译器无法确定跳转目标。
难度: ⭐ 考点: #switch #case
💡 学习锦囊
📖 相关公式与知识点:
- case 后的值必须是整型常量表达式。
- 所有 case 值必须唯一。
🔄 举一反三
switch(x) { case 1: ...; case 1: ...; }能编译通过吗?查看练习答案与解析
答案:不能,编译错误 解析:重复的 case 值会导致编译错误。
- 编写 C 语言程序的流程是:新建项目、添加源文件、编写代码、运行程序。 ( )
查看答案与解析
答案: ✓
解析: 这是 C 语言程序开发的基本流程。更完整的流程还包括编译、链接、调试等步骤。
难度: ⭐ 考点: #开发流程
💡 学习锦囊
📖 相关公式与知识点:
- 完整流程:编辑 → 编译 → 链接 → 运行 → 调试。
- 编译将 .c 转为 .obj,链接将 .obj 转为 .exe。
🔄 举一反三
- 编译和链接有什么区别?
查看练习答案与解析
答案:编译将源代码转为目标代码,链接将多个目标文件和库合并为可执行文件。
- 线性表在链式存储时,查找第 i 个元素的时间与 i 的值成正比。 ( )
查看答案与解析
答案: ✓
解析: 链表需要从头结点开始逐个遍历到第 i 个元素,时间复杂度为 O(i)。
难度: ⭐⭐ 考点: #链表 #时间复杂度
💡 学习锦囊
📖 相关公式与知识点:
- 链表随机访问时间复杂度:O(n)。
- 数组随机访问时间复杂度:O(1)。
思路分析
链表不支持随机访问,必须从头遍历。
🔄 举一反三
- 数组查找第 i 个元素的时间复杂度是多少?
查看练习答案与解析
答案:O(1) 解析:数组支持随机访问,通过首地址 + i×元素大小直接定位。
- 结构体变量可以作数组元素。 ( )
查看答案与解析
答案: ✓
解析: 结构体变量可以作为数组元素,形成结构体数组。如 struct student s[10];。
难度: ⭐ 考点: #结构体数组
💡 学习锦囊
📖 相关公式与知识点:
- 结构体数组:
struct 类型名 数组名[大小]; - 访问:
数组名[下标].成员名
🔄 举一反三
- 如何初始化一个结构体数组?
查看练习答案与解析
答案:
struct student s[2] = { {1,"Tom"}, {2,"Jerry"} };解析:每个元素用花括号初始化。
- 当栈中元素已满时,就不能继续执行入栈操作。同理,栈为空时,也不能继续执行出栈操作。 ( )
查看答案与解析
答案: ✓
解析: 栈满时入栈会导致"上溢"(overflow),栈空时出栈会导致"下溢"(underflow)。
难度: ⭐ 考点: #栈 #数据结构
💡 学习锦囊
📖 相关公式与知识点:
- 栈是 LIFO(后进先出)结构。
- 基本操作:push(入栈)、pop(出栈)。
- 需要检查栈满/栈空条件。
🔄 举一反三
- 队列满时能继续入队吗?
查看练习答案与解析
答案:不能(普通队列),但循环队列可能覆盖 解析:队列满时入队也会溢出。
- 共用体变量可以作结构体的成员,结构体变量也可以作共用体的成员。 ( )
查看答案与解析
答案: ✓
解析: C 语言允许结构体和共用体互相嵌套。共用体作为结构体成员可以节省空间,结构体作为共用体成员可以实现类型变体。
难度: ⭐⭐ 考点: #共用体 #结构体嵌套
💡 学习锦囊
📖 相关公式与知识点:
- 共用体(union):所有成员共享同一内存空间。
- 结构体(struct):每个成员有独立的内存空间。
🔄 举一反三
- 共用体的大小如何确定?
查看练习答案与解析
答案:等于最大成员的大小 解析:共用体所有成员共享空间,大小为最大成员的大小。
- 一维数组指的是只有一个下标的数组,用来表示一组具有相同类型的数据。 ( )
查看答案与解析
答案: ✓
解析: 一维数组是线性结构,所有元素类型相同,通过一个下标访问。
难度: ⭐ 考点: #一维数组
💡 学习锦囊
📖 相关公式与知识点:
- 一维数组定义:
类型 数组名[大小]; - 元素访问:
数组名[下标],下标从 0 开始。
🔄 举一反三
- 二维数组有几个下标?
查看练习答案与解析
答案:两个(行和列) 解析:
a[i][j]使用两个下标。
三、填空题(每空 1 分,共 10 分)
- 操作字符串的函数有很多,其中 ( ) 函数是求字符串的长度。
查看答案与解析
答案: strlen
解析:strlen(s) 返回字符串 s 的长度(不包括 '\0'),需要 #include <string.h>。
难度: ⭐ 考点: #strlen #字符串函数
💡 学习锦囊
📖 相关公式与知识点:
strlen返回size_t类型(无符号整数)。- 与
sizeof的区别:strlen是函数(运行时),sizeof是运算符(编译时)。
🔄 举一反三
strlen("abc\0def")的返回值是多少?查看练习答案与解析
答案:3 解析:strlen 遇到第一个 '\0' 就停止计数。
- C 语言中数组名代表数组的 ( ) 地址。
查看答案与解析
答案: 首(或起始)
解析: 数组名代表数组的首地址,即第一个元素的地址。arr 等价于 &arr[0]。
难度: ⭐ 考点: #数组名 #地址
💡 学习锦囊
📖 相关公式与知识点:
- 数组名是地址常量,不能修改。
arr + i等价于&arr[i]。
🔄 举一反三
arr和&arr有什么区别?查看练习答案与解析
答案:数值相同但类型不同。
arr是指向首元素的指针,&arr是指向整个数组的指针。 解析:arr+1跳过 1 个元素,&arr+1跳过整个数组。
- 与十进制数 1770.625 对应的八进制数是 ( )
查看答案与解析
答案: 3352.5
解析:
- 整数部分:1770 ÷ 8 = 221 余 2,221 ÷ 8 = 27 余 5,27 ÷ 8 = 3 余 3,3 ÷ 8 = 0 余 3 → 3352
- 小数部分:0.625 × 8 = 5.0 → 0.5
难度: ⭐⭐ 考点: #进制转换 #八进制
💡 学习锦囊
📖 相关公式与知识点:
- 十进制转八进制:整数部分除 8 取余(倒序),小数部分乘 8 取整(正序)。
- 八进制数以
0开头:03352.5。
🔄 举一反三
- 十进制 100 对应的八进制数是多少?
查看练习答案与解析
答案:144 解析:100÷8=12 余 4,12÷8=1 余 4,1÷8=0 余 1 → 144。
- 初始化结构体数组有两种方式:先定义结构体数组类型再初始化结构体数组、( )。
查看答案与解析
答案: 定义结构体数组的同时进行初始化
解析: 两种方式:
- 先定义类型,再定义数组并初始化
- 定义结构体数组的同时直接初始化
难度: ⭐ 考点: #结构体初始化
💡 学习锦囊
📖 相关公式与知识点:
- 方式一:
struct student { ... }; struct student s[2] = {...}; - 方式二:
struct student { ... } s[2] = {...};
🔄 举一反三
- 结构体变量有几种初始化方式?
查看练习答案与解析
答案:两种(定义时初始化和逐成员赋值) 解析:C99 还支持指定初始化器。
- 数组的下标是用 ( ) 括起来的,而不是圆括号。
查看答案与解析
答案: 方括号
解析: 数组下标使用方括号 [],如 a[0]。圆括号 () 用于函数调用。
难度: ⭐ 考点: #数组语法
💡 学习锦囊
📖 相关公式与知识点:
[]:数组下标运算符。():函数调用运算符、强制类型转换、分组。
🔄 举一反三
a(0)在 C 语言中表示什么?查看练习答案与解析
答案:调用函数 a,参数为 0 解析:圆括号表示函数调用。
- 在文件中,以符号常量 EOF 作为文本文件(字符流文件)的结束标记,则 EOF 代表的值是 ( )。
查看答案与解析
答案: -1
解析: EOF(End Of File)在 stdio.h 中定义为 -1。因为字符的 ASCII 码范围是 0~255,-1 不会与任何有效字符冲突。
难度: ⭐ 考点: #EOF #文件结束
💡 学习锦囊
📖 相关公式与知识点:
EOF是stdio.h中定义的宏,值为 -1。- 用于判断文件读取是否结束:
while((c=getchar())!=EOF)。
🔄 举一反三
- 为什么 EOF 的值是 -1 而不是 0?
查看练习答案与解析
答案:因为 0 是合法字符 '\0' 的 ASCII 码,-1 不会与任何字符冲突。
- 结构体指针引用成员变量的方式是使用 ( ) 运算符。
查看答案与解析
答案: ->
解析: 结构体指针使用 -> 访问成员,如 p->name。等价于 (*p).name。
难度: ⭐ 考点: #结构体指针 #->运算符
💡 学习锦囊
📖 相关公式与知识点:
p->成员等价于(*p).成员。.用于结构体变量,->用于结构体指针。
🔄 举一反三
p->name和(*p).name有什么区别?查看练习答案与解析
答案:没有区别,完全等价 解析:
->是语法糖,使代码更简洁。
- 数组指针是指一个指向数组的指针,指针数组是指数组中的元素类型都是 ( )。
查看答案与解析
答案: 指针
解析:
- 数组指针:
int (*p)[5],指向含 5 个 int 的数组。 - 指针数组:
int *p[5],数组的 5 个元素都是指针。
难度: ⭐⭐ 考点: #数组指针 #指针数组
💡 学习锦囊
📖 相关公式与知识点:
int (*p)[5]:数组指针(先读*p是指针,指向int[5])。int *p[5]:指针数组(先读p[5]是数组,元素是int*)。
易错点
[] 优先级高于 *,所以 *p[5] 是数组,(*p)[5] 是指针。
🔄 举一反三
int (*p[5])()表示什么?查看练习答案与解析
答案:函数指针数组,5 个元素,每个是指向返回 int 的函数的指针
- 由 ( ) 组成的数据类型称为结构体类型。
查看答案与解析
答案: 不同类型的数据
解析: 结构体可以将不同类型的数据组合在一起,形成一个新的复合数据类型。
难度: ⭐ 考点: #结构体定义
💡 学习锦囊
📖 相关公式与知识点:
- 结构体 vs 数组:数组元素类型相同,结构体成员类型可以不同。
- 结构体是用户自定义的复合数据类型。
🔄 举一反三
- 共用体和结构体的主要区别是什么?
查看练习答案与解析
答案:结构体成员各有独立空间,共用体成员共享同一空间。
- char 关键字用于声明一个字符类型变量,( ) 关键字用于声明整型变量。
查看答案与解析
答案: int
解析:int 是 C 语言中声明整型变量的关键字。
难度: ⭐ 考点: #数据类型 #关键字
💡 学习锦囊
📖 相关公式与知识点:
- 基本类型关键字:
char、int、float、double。 - 修饰符:
short、long、signed、unsigned。
🔄 举一反三
long是数据类型关键字吗?查看练习答案与解析
答案:是 解析:
long是类型修饰符,long int可简写为long。
四、程序问答题
1. 编写程序
题目: 编写程序,键盘输入一个不多于 4 位数,求出它是几位数。
提示:
- 定义一个数 num,用 num/10 逐渐削减其倍数,直到 num/10 为 0;
- 可以用 while 循环
查看答案与解析
答案:
#include <stdio.h>
void main()
{
int num, count = 0;
printf("请输入一个不多于4位的整数: ");
scanf("%d", &num);
while (num > 0)
{
num /= 10;
count++;
}
printf("这是%d位数\n", count);
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
解析: 每次除以 10 去掉个位,计数器加 1,直到 num 变为 0。
难度: ⭐⭐ 考点: #位数判断 #while循环
💡 学习锦囊
📖 相关公式与知识点:
num/10去掉最后一位数字。- 循环次数即为位数。
易错点
输入 0 时循环不执行,count=0,需要特殊处理。
🔄 举一反三
- 如何求一个数的各位数字之和?
查看练习答案与解析
答案:用
sum += num%10; num/=10;循环 解析:%10取个位,/10去掉个位。
2. 程序阅读
题目: 请阅读下面的程序,分析程序是否能编译通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
#define LETTER 0
int main( )
{
char str[20] = "C language";
int i = 0;
while ((str[i]))
{
#if LETTER
if (str[i] >= 'a' && str[i] <= 'z')
{
str[i] = str[i] - 32;
printf("%c", str[i]);
}
#else
if (str[i] >= 'A' && str[i] <= 'Z')
{
str[i] = str[i] + 32;
printf("%c", str[i]);
}
#endif
i++;
}
return 0;
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
查看答案与解析
答案: c
解析:LETTER 定义为 0,条件编译执行 #else 分支。程序将大写字母转换为小写并输出。"C language" 中只有 'C' 是大写字母,转换为 'c' 并输出。
难度: ⭐⭐ 考点: #条件编译 #大小写转换
💡 学习锦囊
📖 相关公式与知识点:
#if/#else/#endif是预处理条件编译指令。- 大写转小写:
ch + 32;小写转大写:ch - 32。
思路分析
#if LETTER 中 LETTER=0 为假,执行 #else 分支。
🔄 举一反三
- 若
#define LETTER 1,程序输出什么?查看练习答案与解析
答案:
c language(所有小写字母转大写) 解析:执行#if分支,将小写转大写。
3. 程序阅读
题目: 请阅读下面的程序,分析程序是否能够编译通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
int add(int n)
{
if (n == 1)
return 1;
else
return n + add(n - 1);
}
void main( )
{
int n = 5;
int sum = add(5);
printf("结果为:%d\n", sum);
}2
3
4
5
6
7
8
9
10
11
12
13
14
查看答案与解析
答案: 结果为:15
解析: 递归求和函数 add(n) = n + add(n-1),add(1) = 1。add(5) = 5+4+3+2+1 = 15。
难度: ⭐⭐ 考点: #递归 #求和
💡 学习锦囊
📖 相关公式与知识点:
- 递归公式:$f(n) = n + f(n-1)$,$f(1) = 1$。
- 递归必须有终止条件,否则会无限递归导致栈溢出。
思路分析
递归展开:add(5) → 5+add(4) → 5+4+add(3) → ... → 5+4+3+2+1 = 15。
🔄 举一反三
- 用递归求 n! 如何实现?
查看练习答案与解析
答案:
int fact(int n) {
if (n <= 1) return 1;
return n * fact(n-1);
}2
3
4
:::
4. 程序填空
题目: 请阅读下面的程序,在空白处填写正确的代码,实现换行。
int main( )
{
printf("我在学习 C 语言");
______;
return 0;
}2
3
4
5
6
查看答案与解析
答案: printf("\n") 或 putchar('\n')
解析:'\n' 是换行符,使光标移到下一行开头。
难度: ⭐ 考点: #换行符 #\n
💡 学习锦囊
📖 相关公式与知识点:
'\n':换行符(LF),ASCII 码 10。'\r':回车符(CR),ASCII 码 13。- Windows 换行用
\r\n,Linux 用\n。
🔄 举一反三
printf("A\nB");输出什么?查看练习答案与解析
答案:
A
B2
:::
5. 程序阅读
题目: 请阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果,否则请说明编译失败的原因。
#include<stdio.h>
int sum(int a)
{
int c=0;
static int b=3;
c+=1;
b+=2;
return a+b+c;
}
void main( )
{
int i;
int a=2;
for (i=0; i<5; i++)
printf("%d,", sum(a));
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
查看答案与解析
答案: 8,10,12,14,16,
解析: static 变量 b 只初始化一次,每次调用保留上次值:
- 第 1 次:b=5, c=1, 返回 2+5+1=8
- 第 2 次:b=7, c=1, 返回 2+7+1=10
- 第 3 次:b=9, c=1, 返回 2+9+1=12
- 第 4 次:b=11, c=1, 返回 2+11+1=14
- 第 5 次:b=13, c=1, 返回 2+13+1=16
难度: ⭐⭐⭐ 考点: #static变量 #函数调用
💡 学习锦囊
📖 相关公式与知识点:
static局部变量:只初始化一次,值在函数调用间保持。- 普通局部变量(如 c):每次调用重新初始化。
思路分析
b 每次调用增加 2,c 每次重置为 0 后加 1。返回值 = a + b + c。
🔄 举一反三
- 若去掉
static关键字,输出结果是什么?查看练习答案与解析
答案:
8,8,8,8,8,解析:b 每次调用都重新初始化为 3,b+=2 后为 5,返回 2+5+1=8。