内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第27练,内容是6.6 函数应用实例、第6章综合。
《C语言》(第五版)一课一练 第27练
6.6 函数应用实例、第6章综合
一、单选题
1. 以下关于C语言函数的说法中,正确的是( )
A. 所有函数必须写在main函数之前才能被调用
B. C语言的函数可以嵌套定义也可以嵌套调用
C. 函数调用时实参的个数可以少于形参的个数
D. 每个C程序一定包含一个main函数
2. 以下函数定义中,能正确返回两整数之和的是( )
A. void sum(int a, int b) { return a+b; }
B. sum(int a, int b) { return a+b; }
C. int sum(int a, int b) { return a+b; }
D. int sum(a, b) { return a+b; }
3. 以下递归函数 int f(int n) { if(n<=1) return 1; else return n*f(n-1); }
调用f(4)的返回值是( )
A. 24
B. 10
C. 12
D. 6
4. 已知 void printArr(int a[], int n)
{ int i; for(i=0;i<n;i++) printf("%d ",a[i]); }
在main中有 int b[4]={2,4,6,8}; 调用方式正确的是( )
A. printArr(b[4], 4);
B. printArr(int b, 4);
C. printArr(b[], 4);
D. printArr(b, 4);
5. int g=100;
void func() { int g=50; printf("%d,", g); }
main() { func(); printf("%d", g); }
程序输出是( )
A. 50,50
B. 50,100
C. 100,100
D. 100,50
6. 以下程序的输出是
int x = 1;
void f(int a)
{
static int b = 1;
b = b + a;
printf("%d,", b);
}
main()
{
int i;
for(i=0; i<3; i++) f(x);
}( )
A. 2,3,4,
B. 1,2,3,
C. 2,2,2,
D. 2,4,6,
7. 已知 int isPrime(int n)
{ int i;
for(i=2;i<n;i++)
if(n%i==0) return 0;
return 1; }
调用 isPrime(15) 的返回值是( )
A. 1(15是质数)
B. 不确定(循环过程中多次返回)
C. 0(15不是质数)
D. -1(函数异常退出)
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
int max(int x, int y)
{
return x > y ? x : y;
}
int max3(int a, int b, int c)
{
return max(max(a, b), c);
}
main()
{
printf("%d
", max3(15, 28, 9));
}
三、案例分析题
9. 以下程序的功能是定义函数判断闰年,并在main中输出1000~2020之间的所有闰年。请填空。
#include <stdio.h>
int isLeap(int year)
{
if (year % 400 == 0)
return 1;
else if (year % 100 == 0)
return 0;
else if (year % 【1】 == 0)
return 1;
else
return 【2】;
}
main()
{
int y;
for (y = 1000; y <= 2020; y++)
if (【3】)
printf("%d ", y);
}
四、综合应用题
10. 编写一个C程序,包含以下函数:
(1) int isPerfect(int n) — 判断n是否为完数(完数指其所有真因子之和等于自身,如6=1+2+3),是则返回1,否则返回0
(2) void printFactors(int n) — 输出n的所有真因子(如6的真因子为1,2,3)
(3) 在main函数中调用上述函数,找出1~1000中完数,并输出每个完数和它的真因子。
提示:真因子指小于n同时能被n整除的正整数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第27练,内容是6.6 函数应用实例、第6章综合。
《C语言》(第五版)一课一练 第27练
6.6 函数应用实例、第6章综合
一、单选题
1. 以下关于C语言函数的说法中,正确的是( )
A. 所有函数必须写在main函数之前才能被调用
B. C语言的函数可以嵌套定义也可以嵌套调用
C. 函数调用时实参的个数可以少于形参的个数
D. 每个C程序一定包含一个main函数
【答案】D
【解析】D程序从main函数开始执行,每个可执行的D程序必须包含一个main函数作为入口点。函数可以定义在main之前,也可以放在main之后(置于后面需要声明),不能嵌套定义但可以嵌套调用。调用时实参个数必须与形参个数完全一致,类型也要匹配。
2. 以下函数定义中,能正确返回两整数之和的是( )
A. void sum(int a, int b) { return a+b; }
B. sum(int a, int b) { return a+b; }
C. int sum(int a, int b) { return a+b; }
D. int sum(a, b) { return a+b; }
【答案】C
【解析】选项C完整定义了返回值类型int和形参类型int a,int b,返回语句return a+b正确。A中void函数不能return值。B缺少返回值类型说明(默认int,但写法不规范)。D中形参a和b缺少类型说明(老式写法已不推荐使用)。按照课本规范写法应选A。
3. 以下递归函数 int f(int n) { if(n<=1) return 1; else return n*f(n-1); }
调用f(4)的返回值是( )
A. 24
B. 10
C. 12
D. 6
【答案】A
【解析】该递归函数计算n的阶乘。f(4)=4*f(3)=4*3*f(2)=4*3*2*f(1)=4*3*2*1=24。终止条件n<=1时返回1。递归过程将大问题逐步分解为更小的问题,直到触及终止条件后逐层返回计算结果。阶乘是递归的经典应用实例。
4. 已知 void printArr(int a[], int n)
{ int i; for(i=0;i<n;i++) printf("%d ",a[i]); }
在main中有 int b[4]={2,4,6,8}; 调用方式正确的是( )
A. printArr(b[4], 4);
B. printArr(int b, 4);
C. printArr(b[], 4);
D. printArr(b, 4);
【答案】D
【解析】printArr(b,4)中b是数组名,代表数组首地址,4是元素个数,调用格式正确。A中b[4]越界访问,类型也不匹配。B中调用时不应写类型名int。C中b[]写法错误,调用时数组名后不加方括号。数组名作实参的调用需写数组名和元素个数。
5. int g=100;
void func() { int g=50; printf("%d,", g); }
main() { func(); printf("%d", g); }
程序输出是( )
A. 50,50
B. 50,100
C. 100,100
D. 100,50
【答案】B
【解析】func中有局部变量int g=50与全局变量g同名,局部变量屏蔽了全局变量,func内输出50。回到main中没有定义局部变量g,使用全局变量g=100,输出100。结果50,100体现了局部优先原则:同名时局部作用域内优先使用局部变量。
6. 以下程序的输出是
int x = 1;
void f(int a)
{
static int b = 1;
b = b + a;
printf("%d,", b);
}
main()
{
int i;
for(i=0; i<3; i++) f(x);
}( )
A. 2,3,4,
B. 1,2,3,
C. 2,2,2,
D. 2,4,6,
【答案】A
【解析】静态局部变量b在每次调用之间保持值。三次调用统一传入a=x=1:第一次b=1+1=2输出2,;第二次b=2+1=3输出3,;第三次b=3+1=4输出4,。最终输出"2,3,4,"。此题综合考查了参数传递(值传递)与静态局部变量的协同工作机制。
7. 已知 int isPrime(int n)
{ int i;
for(i=2;i<n;i++)
if(n%i==0) return 0;
return 1; }
调用 isPrime(15) 的返回值是( )
A. 1(15是质数)
B. 不确定(循环过程中多次返回)
C. 0(15不是质数)
D. -1(函数异常退出)
【答案】C
【解析】isPrime函数判断n是否为质数(在2到n-1之间找到因子则不是质数)。n=15时i从2开始:2不整除15,3整除15?15%3=0不成立,继续。4不整除?4%3误...重新分析:i=2时15%2=1≠0,i=3时15%3=0==0,return 0。15不是质数,返回0。
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
int max(int x, int y)
{
return x > y ? x : y;
}
int max3(int a, int b, int c)
{
return max(max(a, b), c);
}
main()
{
printf("%d
", max3(15, 28, 9));
}
【答案】28
【解析】max3函数利用嵌套调用max函数求三个数的最大值:先求max(15,28)=28,再求max(28,9)=28,最终返回28。max3内部调用了两次max,体现了函数嵌套调用的典型应用。通过复用简单函数max来构建更复杂的max3函数,提高了代码的模块化程度。
三、案例分析题
9. 以下程序的功能是定义函数判断闰年,并在main中输出1000~2020之间的所有闰年。请填空。
#include <stdio.h>
int isLeap(int year)
{
if (year % 400 == 0)
return 1;
else if (year % 100 == 0)
return 0;
else if (year % 【1】 == 0)
return 1;
else
return 【2】;
}
main()
{
int y;
for (y = 1000; y <= 2020; y++)
if (【3】)
printf("%d ", y);
}
【答案】【1】4
【2】0
【3】isLeap(y)
【解析】闰年判断规则:能被400整除的是闰年;能被100整除的不是闰年(如1900年);能被4整除的是闰年(如2020年);其余不是闰年。填空【1】处填4表示能被4整除的情况,【2】填0表示不符合任何闰年条件,【3】调用isLeap(y)判断当前年份是否为闰年。
四、综合应用题
10. 编写一个C程序,包含以下函数:
(1) int isPerfect(int n) — 判断n是否为完数(完数指其所有真因子之和等于自身,如6=1+2+3),是则返回1,否则返回0
(2) void printFactors(int n) — 输出n的所有真因子(如6的真因子为1,2,3)
(3) 在main函数中调用上述函数,找出1~1000中完数,并输出每个完数和它的真因子。
提示:真因子指小于n同时能被n整除的正整数。
【答案】#include <stdio.h>
int isPerfect(int n)
{
int i, sum = 0;
for (i = 1; i < n; i++)
if (n % i == 0)
sum += i;
return sum == n;
}
void printFactors(int n)
{
int i;
printf("%d的真因子:", n);
for (i = 1; i < n; i++)
if (n % i == 0)
printf(" %d", i);
printf("
");
}
main()
{
int num;
printf("1~1000中的完数:
");
for (num = 1; num <= 1000; num++)
{
if (isPerfect(num))
{
printFactors(num);
}
}
}
【解析】isPerfect函数用循环累加n的所有真因子(1到n-1中能整除n的数),判断累加和是否等于n自身。printFactors函数遍历输出所有真因子。main循环1到1000,对每个数调用isPerfect判断,若是完数再调用printFactors输出其真因子列表。完数包括6、28、496等。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$