第50练 第9章 结构体与函数《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
7页
|
24人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第50练,内容涵盖第9章结构体与联合体的9.5 结构体与函数。
《C语言程序设计》(电子工业出版社)一课一练 第50练
第9章 结构体与联合体
9.5 结构体与函数
1、 单项选择题(本题共4小题)
1、已知结构体struct Stu {int age; char name[20];}; struct Stu stu;,若将stu.age作为实参传递给函数,函数对应的形参应该是( )
A. struct Stu *p
B. int a
C. char *name
D. struct Stu s
2、下列关于结构体指针作函数参数的描述,正确的是( )
A. 传递的是结构体的首地址,开销小、效率高
B. 传递的是结构体变量的副本,函数修改不会影响实参
C. 结构体指针不能作为函数参数使用
D. 必须先将结构体所有成员的值复制给指针才能传递
3、已知结构体struct Score {int math[3];}; struct Score s;,若将s.math作为实参传递给函数,函数的形参写法合法的是( )
A. int arr[3]
B. struct Score p
C. int num
D. char *str
4、关于结构体变量整体作函数参数与结构体指针作参数的区别,下列说法错误的是( )
A. 整体作参数是值传递,形参修改不影响实参
B. 指针作参数是地址传递,形参修改会影响实参
C. 整体作参数的时间和空间开销更大
D. 指针作参数需要复制结构体所有成员的值
2、 判断题(本题共3题)
1、用结构体变量整体作函数参数时,被调用函数中修改形参的成员值,会影响主函数中实参结构体的成员值。( )
2、结构体指针作函数参数时,传递的是结构体的首地址,无需复制所有成员,能大幅提升程序运行效率。( )
3、当结构体成员是数组时,将该成员作为实参传递给函数,本质是传递数组的首地址,属于地址传递。( )
3、 填空题(本题共2题)
1、用指向结构体变量的指针作函数参数时,实参向形参传递的是____,从而避免了结构体成员的逐个复制,降低了开销。
2、用结构体的简单成员(如 int、char 型变量)作函数实参时,属于____传递,被调用函数中对形参的修改不会影响原结构体成员的值。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
struct Student {
int id;
float score;
};
void countFail(struct Student *ps, int n, int *count) {
*count = 0;
for(int i=0; i<n; i++) {
if((ps+i)->score < 60) {
(*count)++;
}
}
}
int main() {
struct Student stu[3] = {{101, 55.0}, {102, 70.0}, {103, 58.0}};
int failCount;
countFail(stu, 3, &failCount);
printf("不及格人数:%d
", failCount);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第50练,内容涵盖第9章结构体与联合体的9.5 结构体与函数。
《C语言程序设计》(电子工业出版社)一课一练 第50练
第9章 结构体与联合体
9.5 结构体与函数
1、 单项选择题(本题共4小题)
1、已知结构体struct Stu {int age; char name[20];}; struct Stu stu;,若将stu.age作为实参传递给函数,函数对应的形参应该是( )
A. struct Stu *p
B. int a
C. char *name
D. struct Stu s
【答案】B
【解析】结构体成员stu.age是 int 型简单变量,值传递时形参需为同类型的简单变量,选项 B 符合要求;其他选项类型不匹配,无法接收该成员的值。
2、下列关于结构体指针作函数参数的描述,正确的是( )
A. 传递的是结构体的首地址,开销小、效率高
B. 传递的是结构体变量的副本,函数修改不会影响实参
C. 结构体指针不能作为函数参数使用
D. 必须先将结构体所有成员的值复制给指针才能传递
【答案】A
【解析】结构体指针作参数时,实参传递的是结构体变量或数组的首地址,无需复制所有成员,大幅减少时间和空间开销,效率更高;选项B是结构体整体值传递的特点,选项 C、D 不符合语法规则。
3、已知结构体struct Score {int math[3];}; struct Score s;,若将s.math作为实参传递给函数,函数的形参写法合法的是( )
A. int arr[3]
B. struct Score p
C. int num
D. char *str
【答案】A
【解析】s.math是 int 型数组名,传递的是数组首地址,形参需为同类型的数组名或指针变量,选项 A 的int arr[3]符合要求;其他选项类型不匹配,无法接收数组地址。
4、关于结构体变量整体作函数参数与结构体指针作参数的区别,下列说法错误的是( )
A. 整体作参数是值传递,形参修改不影响实参
B. 指针作参数是地址传递,形参修改会影响实参
C. 整体作参数的时间和空间开销更大
D. 指针作参数需要复制结构体所有成员的值
【答案】D
【解析】指针作参数传递的是地址,无需复制结构体成员,开销小;选项 D 描述的是结构体整体值传递的特点,并非指针传参的特性,因此错误。
2、 判断题(本题共3题)
1、用结构体变量整体作函数参数时,被调用函数中修改形参的成员值,会影响主函数中实参结构体的成员值。( )
【答案】×
【解析】结构体变量整体作参数属于值传递,形参是实参的副本,修改形参不会影响原实参的成员值,因此该表述错误。
2、结构体指针作函数参数时,传递的是结构体的首地址,无需复制所有成员,能大幅提升程序运行效率。( )
【答案】√
【解析】地址传递仅传递一个内存地址,避免了结构体成员的逐个复制,减少了时间和空间开销,程序效率更高,符合指针传参的优势。
3、当结构体成员是数组时,将该成员作为实参传递给函数,本质是传递数组的首地址,属于地址传递。( )
【答案】√
【解析】数组名作为实参时,传递的是数组的首地址,因此结构体的数组成员作参数时,同样属于地址传递,函数中修改数组元素会影响原结构体的数组成员。
3、 填空题(本题共2题)
1、用指向结构体变量的指针作函数参数时,实参向形参传递的是____,从而避免了结构体成员的逐个复制,降低了开销。
【答案】结构体变量的首地址
【解析】地址传递只需传递一个内存地址值,无需复制结构体的所有成员,能有效减少时间和空间消耗。这种传递方式是结构体与函数结合时的最优选择,适合处理大型结构体数据。
2、用结构体的简单成员(如 int、char 型变量)作函数实参时,属于____传递,被调用函数中对形参的修改不会影响原结构体成员的值。
【答案】值
【解析】值传递时,形参是实参的副本,两者占用不同的内存空间。函数中修改形参仅改变副本的值,不会影响原实参(即结构体成员)的原始值,符合值传递的特性。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
struct Student {
int id;
float score;
};
void countFail(struct Student *ps, int n, int *count) {
*count = 0;
for(int i=0; i<n; i++) {
if((ps+i)->score < 60) {
(*count)++;
}
}
}
int main() {
struct Student stu[3] = {{101, 55.0}, {102, 70.0}, {103, 58.0}};
int failCount;
countFail(stu, 3, &failCount);
printf("不及格人数:%d
", failCount);
return 0;
}
【答案】
程序运行结果:
不及格人数:2
【解析】
实参stu传递结构体数组的首地址给形参指针ps,函数通过(ps+i)遍历数组中的每个学生。判断学生成绩是否小于 60,统计不及格人数并通过指针count返回给主函数,最终输出统计结果。由于是地址传递,函数能直接访问原数组的成员并完成统计。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$