第7章 第3节:函数的定义与调用(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-29
| 2份
| 23页
| 49人阅读
| 0人下载

内容正文:

7.3节:函数的定义与调用 一、单项选择题 1.以下选项中,属于正确的无参函数定义形式的是( ) A. void func() { printf("test"); } B. func() { printf("test"); } C. void func; { printf("test"); } D. void func() { printf("test") } 2.以下函数定义中,形参声明格式正确的是() A. int add(int a, b) { return a+b; } B. int add(int a, int b) { return a+b; } C. int add(a, b) int a, b; { return a+b; } D. int add(int a; int b) { return a+b; } 3.调用无参函数func时,以下写法正确的是() A. func; B. func(); C. func(void); D. func(0); 4.以下关于形参和实参的描述,正确的是() A. 形参和实参的名称必须相同 B. 形参变量在函数定义时就分配内存单元 C. 实参只能是变量,不能是常量或表达式 D. 函数调用时,实参的值单向传递给形参 5.以下关于C语言自定义函数的描述中,正确的是() A. 函数定义必须放在主函数main之前 B. 函数名可以是C语言关键字 C. 函数必须先定义后使用 D. 无参函数的括号可以省略 6.无参函数定义的一般形式中,函数体必须包含() A. 至少一个return语句 B. 声明部分和语句部分 C. 形式参数表 D. 变量初始化语句 7.有参函数定义中,形式参数表的作用是() A. 指定函数返回值的类型 B. 声明函数内部使用的变量 C. 接收主调函数传递的实际参数 D. 定义函数的存储类别 8.以下函数调用语句中,实参个数为3的是() A. func(a, b+2, c*3) B. func(a, (b, c)) C. func(a, b, ) D. func(a+b, c-d) 9.以下函数定义中,形参类型声明正确的是() A. int sum(int a, int b){ return a+b; } B. int sum(a, b){ int a, b; return a+b; } C. int sum(int a, b){ return a+b; } D. int sum(a int, b int){ return a+b; } 10.以下程序段中,函数调用后输出的结果是() void func(int n) { printf("%d", n);} main() { int a = 5; func(a);} A. 5 B. 0 C. 随机值 D. 编译错误 二、填空题。 1.函数定义的一般形式中,函数体由______和______组成。 2.函数调用的一般形式为___________。 3.实参可以是常量、变量、______或函数。 4.形参变量在______时分配内存,调用结束后释放。 5.函数调用作为表达式的一部分时,函数必须______(填“有返回值”或“无返回值”)。 6.以下函数定义中,形参的个数为___________。 int sum(int a, int b, int c) { return a + b + c; } 7.以下函数定义中,返回类型为___________。 void print() { printf("OK"); } 8.以下程序段中,函数调用后实参a的值为___________。 void func(int n) { n = n + 1; } main() { int a = 5; func(a); } 9.以下程序的输出结果是___________。 #include <stdio.h> int f(int a){ a = a + 2; return a;} main(){ int a=5; f(a); printf("%d", a);} 10.以下程序的输出结果是___________。 #include <stdio.h> void fun(int x){ printf("%d", x);} main(){ int a=10; fun(a); printf("%d", a);} 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> int func(int m){ m += 3; return m;} main(){ int a=2, b; b = func(a) + func(a); printf("%d", b);} 2.写出下列程序段的输出结果:________________。 #include <stdio.h> void hello() { printf("Hello, world ");} main() { hello();} 3.写出下列程序段的输出结果:________________。 #include <stdio.h> int max(int a, int b) { if (a > b) return a; else return b;} main() { int x = 3, y = 5; printf("max=%d ", max(x, y));} 4.写出下列程序段的输出结果:________________。 #include <stdio.h> void func(int n) { n = n + 1; printf("n=%d ", n);} main() { int a = 5; func(a); printf("a=%d ", a);} 5.写出下列程序段的输出结果:________________。 #include <stdio.h> int sum(int a, int b) { return a + b;} main() { int x = 2, y = 3; printf("sum=%d ", sum(x, y));} 6.写出下列程序段的输出结果:________________。 #include <stdio.h> int max(int a, int b) { return (a > b) ? a : b;} main() { int x = 7, y = 4; printf("%d ", max(x, y));} 7.写出下列程序段的输出结果:________________。 #include <stdio.h> int add(int a, int b) { return a + b;} main() { int x = 1, y = 2; printf("%d ", add(x, y));} 8.写出下列程序段的输出结果:________________。 #include <stdio.h> int max(int a, int b) { if (a > b) return a; else return b;} main() { int x = 5, y = 5; printf("%d ", max(x, y));} 9.写出下列程序段的输出结果:________________。 #include <stdio.h> void printStar() { printf("*");} main() { int i; for(i=0;i<3;i++) { printStar(); }} 10.写出下列程序段的输出结果:________________。 #include <stdio.h> int sum(int n) { int i, s=0; for(i=1;i<=n;i++) { s += i; } return s;} main() { printf("%d", sum(3));} 四、程序填空题(根据题意,将空缺的语句补上) 1.程序功能:定义有参函数max,返回两个整数的较大值。 #include <stdio.h> int max(int a, int b) { if (a > b) return a; else return b;} main() { int x = 3, y = 5; printf("max=%d ", _______________);} 2.以下程序定义了一个求两个数之和的函数,请补全函数头: #include <stdio.h> ______ add(int a, int b) { return a+b;} main() { int x=3, y=5; printf("%d", add(x,y));} 3.以下程序定义了一个求阶乘的函数,请补全代码: #include <stdio.h> int factorial(int n) { int i, result=1; for(i=1;______;i++) { result *= i; } return result;} main() { printf("%d", factorial(3));} 4.以下程序定义了一个求圆面积的函数,请补全代码: #include <stdio.h> float circleArea(float r) { return ______;} main() { float a=3; printf("%.2f", circleArea(a));} 5.以下程序定义了一个判断偶数的函数,请补全程序代码: #include <stdio.h> int isEven(int n) { if(______) return 1; else return 0;} main() { printf("%d", isEven(4));} 五、编程题。 1. 编写一个函数isLeapYear,判断某年是否为闰年。闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除。函数接收一个整数年份参数,如果是闰年返回1,否则返回0。编写主函数,输入一个年份,调用该函数并输出判断结果。 2.编写一个函数isPrime,判断一个正整数是否为素数(质数)。函数接收一个正整数参数n(n>1),如果是素数返回1,否则返回0。编写主函数,输入一个正整数,调用该函数并输出判断结果。 3.编写一个函数getSum(int n),接收一个整数参数n,返回 1 到n的累加和,在主函数中输入n的值并输出累加和。 4.编写一个函数getMin(int a, int b, int c),接收三个整数参数,返回其中最小的数,在主函数中输入三个整数并输出最小值。 5.编写一个函数printTriangle,打印一个由星号组成的直角三角形,行数由参数n指定。例如n=4时,打印如下图形: * ** *** **** 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 7.3节:函数的定义与调用 一、单项选择题 1.以下选项中,属于正确的无参函数定义形式的是( ) A. void func() { printf("test"); } B. func() { printf("test"); } C. void func; { printf("test"); } D. void func() { printf("test") } 【答案】A 【解析】B 选项缺少函数类型标识符;C 选项函数定义格式错误,多了分号;D 选项语句末尾缺少分号;A 选项格式正确。 2.以下函数定义中,形参声明格式正确的是( ) A. int add(int a, b) { return a+b; } B. int add(int a, int b) { return a+b; } C. int add(a, b) int a, b; { return a+b; } D. int add(int a; int b) { return a+b; } 【答案】B 【解析】形参列表中每个形参都需单独声明类型,A 错误;C 选项无形参类型;D 选项形参之间应使用逗号分隔,而非分号;B 选项格式正确。 3.调用无参函数func时,以下写法正确的是( ) A. func; B. func(); C. func(void); D. func(0); 【答案】B 【解析】无参函数调用格式为函数名();,A 缺少括号,C、D 带参数错误,B 正确。 4.以下关于形参和实参的描述,正确的是( ) A. 形参和实参的名称必须相同 B. 形参变量在函数定义时就分配内存单元 C. 实参只能是变量,不能是常量或表达式 D. 函数调用时,实参的值单向传递给形参 【答案】D 【解析】形参与实参名称可不同,A 错误;形参仅在函数调用时分配内存,调用结束后释放,B 错误;实参可以是常量、变量、表达式,C 错误;参数传递是单向值传递,形参变化不影响实参,D 正确。 5.以下关于C语言自定义函数的描述中,正确的是( ) A. 函数定义必须放在主函数main之前 B. 函数名可以是C语言关键字 C. 函数必须先定义后使用 D. 无参函数的括号可以省略 【答案】C 【解析】C语言规定函数必须先定义后使用;函数定义位置可在main前后;函数名是用户定义标识符,不能是关键字;无参函数的括号不可省略。 6.无参函数定义的一般形式中,函数体必须包含( ) A. 至少一个return语句 B. 声明部分和语句部分 C. 形式参数表 D. 变量初始化语句 【答案】B 【解析】无参函数定义形式为“类型标识符 函数名(){声明部分 语句部分}”,函数体包含声明和语句部分;无参函数若无返回值可无return;形式参数表是有参函数的内容。 7.有参函数定义中,形式参数表的作用是( ) A. 指定函数返回值的类型 B. 声明函数内部使用的变量 C. 接收主调函数传递的实际参数 D. 定义函数的存储类别 【答案】C 【解析】形式参数(形参)用于接收主调函数传递的实参值,实现数据传递;返回值类型由函数类型标识符指定,函数内部变量在声明部分定义。 8.以下函数调用语句中,实参个数为3的是( ) A. func(a, b+2, c*3) B. func(a, (b, c)) C. func(a, b, ) D. func(a+b, c-d) 【答案】A 【解析】实参以逗号分隔,A中a、b+2、c*3为3个实参;B中(b,c)是逗号表达式,视为1个实参;C语法错误(多余逗号);D为2个实参。 9.以下函数定义中,形参类型声明正确的是( ) A. int sum(int a, int b){ return a+b; } B. int sum(a, b){ int a, b; return a+b; } C. int sum(int a, b){ return a+b; } D. int sum(a int, b int){ return a+b; } 【答案】A 【解析】形参需在参数表中逐个声明类型,A正确;B中未声明类型,C中b未声明类型,D语法错误。 10.以下程序段中,函数调用后输出的结果是( ) void func(int n) { printf("%d", n);} main() { int a = 5; func(a);} A. 5 B. 0 C. 随机值 D. 编译错误 【答案】A 【解析】实参a的值(5)传递给形参n,func输出n的值(5)。 二、填空题。 1.函数定义的一般形式中,函数体由______和______组成。 【答案】声明部分;语句部分 【解析】函数体包含变量声明(声明部分)和执行语句(语句部分)。 2.函数调用的一般形式为___________。 【答案】函数名(实际参数表) 【解析】函数调用需指定函数名和实际参数(无参时参数表为空)。 3.实参可以是常量、变量、______或函数。 【答案】表达式 【解析】实参的类型包括常量、变量、表达式(如a+b)或函数调用。 4.形参变量在______时分配内存,调用结束后释放。 【答案】函数调用 【解析】形参内存仅在函数调用时分配,调用结束后释放,因此仅在函数内部有效。 5.函数调用作为表达式的一部分时,函数必须______(填“有返回值”或“无返回值”)。 【答案】有返回值 【解析】函数作为表达式的一项(如z=max(x,y))时,需通过返回值参与运算,因此必须有返回值。 6.以下函数定义中,形参的个数为___________。 int sum(int a, int b, int c) { return a + b + c; } 【答案】3 【解析】形式参数表中a、b、c为3个形参。 7.以下函数定义中,返回类型为___________。 void print() { printf("OK"); } 【答案】void 【解析】函数类型标识符为void,表示无返回值。 8.以下程序段中,函数调用后实参a的值为___________。 void func(int n) { n = n + 1; } main() { int a = 5; func(a); } 【答案】5 【解析】形参n的变化不影响实参a,因此a仍为5。 9.以下程序的输出结果是___________。 #include <stdio.h> int f(int a){ a = a + 2; return a;} main(){ int a=5; f(a); printf("%d", a);} 【答案】5 【解析】实参a(值为5)单向传递给形参a,在函数f中形参a变为7,但主函数中实参a的值并未改变,仍是5。 10.以下程序的输出结果是___________。 #include <stdio.h> void fun(int x){ printf("%d", x);} main(){ int a=10; fun(a); printf("%d", a);} 【答案】1010 【解析】函数fun接收实参a的值10,打印10。返回主函数后,打印主函数中变量a的值10。因此输出“1010”。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> int func(int m){ m += 3; return m;} main(){ int a=2, b; b = func(a) + func(a); printf("%d", b);} 【答案】10 2.写出下列程序段的输出结果:________________。 #include <stdio.h> void hello() { printf("Hello, world ");} main() { hello();} 【答案】Hello, world 3.写出下列程序段的输出结果:________________。 #include <stdio.h> int max(int a, int b) { if (a > b) return a; else return b;} main() { int x = 3, y = 5; printf("max=%d ", max(x, y));} 【答案】max=5 4.写出下列程序段的输出结果:________________。 #include <stdio.h> void func(int n) { n = n + 1; printf("n=%d ", n);} main() { int a = 5; func(a); printf("a=%d ", a);} 【答案】 n=6 a=5 5.写出下列程序段的输出结果:________________。 #include <stdio.h> int sum(int a, int b) { return a + b;} main() { int x = 2, y = 3; printf("sum=%d ", sum(x, y));} 【答案】sum=5 6.写出下列程序段的输出结果:________________。 #include <stdio.h> int max(int a, int b) { return (a > b) ? a : b;} main() { int x = 7, y = 4; printf("%d ", max(x, y));} 【答案】7 7.写出下列程序段的输出结果:________________。 #include <stdio.h> int add(int a, int b) { return a + b;} main() { int x = 1, y = 2; printf("%d ", add(x, y));} 【答案】3 8.写出下列程序段的输出结果:________________。 #include <stdio.h> int max(int a, int b) { if (a > b) return a; else return b;} main() { int x = 5, y = 5; printf("%d ", max(x, y));} 【答案】5 9.写出下列程序段的输出结果:________________。 #include <stdio.h> void printStar() { printf("*");} main() { int i; for(i=0;i<3;i++) { printStar(); }} 【答案】*** 10.写出下列程序段的输出结果:________________。 #include <stdio.h> int sum(int n) { int i, s=0; for(i=1;i<=n;i++) { s += i; } return s;} main() { printf("%d", sum(3));} 【答案】6 四、程序填空题(根据题意,将空缺的语句补上) 1.程序功能:定义有参函数max,返回两个整数的较大值。 #include <stdio.h> int max(int a, int b) { if (a > b) return a; else return b;} main() { int x = 3, y = 5; printf("max=%d ", _______________);} 【答案】max(x, y) 2.以下程序定义了一个求两个数之和的函数,请补全函数头: #include <stdio.h> ______ add(int a, int b) { return a+b;} main() { int x=3, y=5; printf("%d", add(x,y));} 【答案】int 3.以下程序定义了一个求阶乘的函数,请补全代码: #include <stdio.h> int factorial(int n) { int i, result=1; for(i=1;______;i++) { result *= i; } return result;} main() { printf("%d", factorial(3));} 【答案】i<=n 4.以下程序定义了一个求圆面积的函数,请补全代码: #include <stdio.h> float circleArea(float r) { return ______;} main() { float a=3; printf("%.2f", circleArea(a));} 【答案】3.14*r*r 5.以下程序定义了一个判断偶数的函数,请补全程序代码: #include <stdio.h> int isEven(int n) { if(______) return 1; else return 0;} main() { printf("%d", isEven(4));} 【答案】n%2==0 五、编程题。 1. 编写一个函数isLeapYear,判断某年是否为闰年。闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除。函数接收一个整数年份参数,如果是闰年返回1,否则返回0。编写主函数,输入一个年份,调用该函数并输出判断结果。 【参考代码】 #include <stdio.h> int isLeapYear(int year){ if((year%4==0 && year%100!=0) || (year%400==0)) return 1; else return 0; } main(){ int y; printf("请输入年份: "); scanf("%d", &y); if(isLeapYear(y)) printf("%d年是闰年", y); else printf("%d年不是闰年", y); } 2.编写一个函数isPrime,判断一个正整数是否为素数(质数)。函数接收一个正整数参数n(n>1),如果是素数返回1,否则返回0。编写主函数,输入一个正整数,调用该函数并输出判断结果。 【参考代码】 #include <stdio.h> int isPrime(int n){ int i; for(i=2; i<n; i++){ if(n % i == 0) return 0; // 发现因子,不是素数 } return 1; // 循环结束未发现因子,是素数 } main(){ int num; printf("请输入一个正整数: "); scanf("%d", &num); if(isPrime(num)) printf("%d是素数", num); else printf("%d不是素数", num); } 3.编写一个函数getSum(int n),接收一个整数参数n,返回 1 到n的累加和,在主函数中输入n的值并输出累加和。 【参考代码】 #include <stdio.h> int getSum(int n) { int i, sum=0; for(i=1;i<=n;i++) { sum += i; } return sum; } main() { int num, result; printf("请输入一个正整数:"); scanf("%d", &num); result = getSum(num); printf("1到%d的累加和为:%d", num, result); } 4.编写一个函数getMin(int a, int b, int c),接收三个整数参数,返回其中最小的数,在主函数中输入三个整数并输出最小值。 【参考代码】 #include <stdio.h> int getMin(int a, int b, int c) { int minVal = a; if(b < minVal) minVal = b; if(c < minVal) minVal = c; return minVal; } main() { int x, y, z, minNum; printf("请输入三个整数:"); scanf("%d%d%d", &x, &y, &z); minNum = getMin(x, y, z); printf("最小值为:%d", minNum); } 5.编写一个函数printTriangle,打印一个由星号组成的直角三角形,行数由参数n指定。例如n=4时,打印如下图形: * ** *** **** 【参考代码】 #include <stdio.h> void printTriangle(int n){ int i, j; for(i=1; i<=n; i++){ for(j=1; j<=i; j++) printf("*"); printf(" "); } } main(){ int lines; printf("请输入行数: "); scanf("%d", &lines); printTriangle(lines); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第7章 第3节:函数的定义与调用(练习)-《C语言程序设计》(电子工业出版社)上好课
1
第7章 第3节:函数的定义与调用(练习)-《C语言程序设计》(电子工业出版社)上好课
2
第7章 第3节:函数的定义与调用(练习)-《C语言程序设计》(电子工业出版社)上好课
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。