实验五 函数与编译预处理(题目)

合集下载

函数与编译预处理

函数与编译预处理

函数与编译预处理一、函数的定义1、无参函数的定义形式类型标识符函数名()第一行:函数首部{声明部分语句 { }包含的:函数体}例1:void fun( ){printf(“Hello!\n”);}2、有参函数的定义形式类型标识符函数名(形式参数列表){声明部分语句}例2:int max(int x, int y){ int z;z = x > y ? x : y;return (z);}注:“类型标识符”是指函数值的类型。

若省略,默认为int。

二、函数的调用无参函数:函数名()有参函数:函数名(实际参数列表)例3:在main函数中调用fun和max函数void main( ){int m,n,t;scanf(“%d,%d”,&m,&n);t=max(m,n); /*调用max函数*/fun(); /*调用fun函数*/printf(“max number is %d\n”,t);}注:1、C语言程序由函数构成,其中有且仅有一个main函数,各函数书写的先后顺序任意。

2、函数的定义是相互独立的,不能在一个函数的内部定义另一个函数,即函数的定义不能嵌套。

3、程序从main函数开始执行,其他函数被调用时执行,调用完后回到主调函数,最后在main函数中结束整个程序。

三、函数的声明在主调函数中一般要对被调函数进行声明。

声明的作用是告知编译器被调函数的函数名、函数类型、参数个数和参数类型,方便进行语法检查。

声明的形式:类型标识符函数名(形式参数列表);即:函数首部加分号例如:void fun( );int max(int x, int y);其中参数名称可省略,如:int max(int , int );Turbo C在以下两种情况中,可省略函数声明:1、被调函数定义在主调函数前。

2、被调函数类型为int、char。

四、参数的传递1、形参是变量,但函数被调用时才被分配内存,调用完毕,所占内存将被释放。

函数与编译预处理05

函数与编译预处理05

使用参数数目可变的函数时要注意以下几点:1、在定义函数时,固定参数部分必须放在参数表的前面,可变参数在后面,并用省略号“...”表示可变参数。

在函数调用时,可以没有可变的参数。

2、必须使用函数va_start()来初始化可变参数,为取第一个可变的参数作好准备工作;使用函数va_arg()依次取各个可变的参数值;最后用函数va_end()做好结束工作,以便能正确地返回。

3、在调用参数个数可变的函数时,必定有一个参数指明可变参数的个数或总的实参个数。

函数的重载所谓函数的重载是指完成不同功能的函数可以具有相同的函数名。

C++的编译器是根据函数的实参来确定应该调用哪一个函数的。

int fun(int a, int b) { return a+b; }int fun (int a){ return a{ return a**a; }void main(void){cout<<fun(3,5)<<endl;cout<<fun(5)<<endl;}8251、定义的重载函数必须具有不同的参数个数,或不同的参数类型。

只有这样编译系统才有可能根据不同的参数去调用不同的重载函数。

2、仅返回值不同时,不能定义为重载函数。

即仅函数的类型不同,不能定义为重载函数int fun(int a, int b) { return a+b; } float fun (int a,int b) { return (float)a*a; }void main(void){cout<<fun(3,5)<<endl; cout<<fun(3,5)<<endl;宏定义不带参数的宏定义用一个指定的标识符(即名字)来代表一个字符串,以后凡在程序中碰到这个标识符的地方都用字符串来代替。

这个标识符称为宏名,编译前的替代过程称为“宏展开”。

# define 标识符字符串注意:1、宏展开只是一个简单的“物理”替换,不做语法检查,不是一个语句,其后不加分号“;”2、#define命令出现在函数的外面,其有效范围为定义处至本源文件结束。

实验五_函数与编译预处理

实验五_函数与编译预处理

《C语言程序设计》实验报告实验五函数与编译预处理学号姓名一、实验目的1、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系;2、掌握并正确使用数组作为函数参数;3、掌握函数的嵌套调用和递归调用的方法;4、理解变量的作用域和生存期;5、掌握宏定义、文件包含。

二、实验内容1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。

#include <stdio.h>int fun(int k){int result=1,i;for(i=1;i<=k;i++){result=result*i;}return result;}void main(){int n;printf("Input n please(1<=n<=10)");scanf("%d",&n);printf("%d!=%d\n",n,fun(n));}『运行结果:』2、编写程序,输出2~n之间的所有素数,n由键盘输入。

要求判断素数的过程要写在函数中,由主函数调用实现,并写出2组以上程序运行结果。

程序代码:『运行结果:』3、编程实现输入8个学生某门功课的成绩,用函数求出平均分,并在主函数中输出平均分以及高于平均分的同学的成绩。

并写出2组以上程序运行结果。

程序代码:运行结果:』三、问题讨论1、举例说明自动变量和静态变量的区别。

四、实验总结1 总结本次实验完成情况、相关知识掌握情况2 总结本次实验编辑、编译、连接、运行所取得的经验3 分析本次实验出现的主要错误最直接原因。

学习情境五函数与编译预处理习题

学习情境五函数与编译预处理习题

学习情境五函数与编译预处理习题一、选择题1.以下正确的函数定义是()。

A.double fun(int x, int y) B.double fun(int x,y) { z=x+y; return z ; } { int z; return z;} C.fun (x,y) D.double fun (int x, int y) { int x, y; double z ; { double z ;z=x+y; return z;} return z;}2.若调用一个函数,且此函数中没有return语句,则正确的说法是()。

A.该函数没有返回值B.该函数返回若干个系统默认值C.能返回一个用户所希望的函数值D.返回一个不确定的值3.以下不正确的说法是()。

A.实参可以是常量,变量或表达式B.形参可以是常量,变量或表达式C.实参可以为任意类型D.如果形参和实参的类型不一致,则以形参类型为准4.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是()。

A.地址传递B.值传递C.有实参传给形参,再由形参传给实参D.由用户指定传递方式5.C语言规定,函数返回值的类型是决定于()。

A.return语句中的表达式类型B.调用该函数时的主调函数类型C.调用该函数时由系统临时D.在定义函数时所指定的函数类型6.若用数组名作为函数调用的实参,传递给形参的是()。

A.数组的首地址B.数组中第一个元素的值C.数组中的全部元素的值D.数组元素的个数7.如果在一个函数中的复合语句中定义了一个变量,则该变量()。

A.只在该复合语句中有定义B.在该函数中有定义C.在本程序范围内有定义D.为非法变量8.下面程序的输出是()。

int i=2;printf("%d%d%d",i*=2,++i,i++);A.8,4,2 B.8,4,3 C.4,4,5 D.4,5,6 9.已知一个函数的定义如下:double fun(int x, double y){ }则该函数正确的函数原型声明为()。

函数和编译预处理

函数和编译预处理

函数和编译预处理(第五章)一、单项选择题1.关于函数,以下正确的描述是( B)A. 函数的定义可以嵌套,但函数的调用不可以嵌套B. 函数的定义不可以嵌套,但函数的调用可以嵌套C. 函数的定义可以嵌套,函数的调用也可以嵌套D. 函数的定义和函数的调用都不可以嵌套2.关键字inline用于定义内联函数,定义时,是将该关键字( D )A. 取代定义函数的类型标识符B. 取代被定义的函数名C. 加在类型标识符之后D. 加在类型标识符之前3.以下不正确的描述为( B )A. 在函数之外定义的变量称为外部变量,外部变量是全局变量。

B. 在函数之内说明的外部变量是局部变量,仅在本函数中有效。

C. 在函数之外说明的静态变量也是全局变量,其作用域是文件作用域。

D. 文件作用的域范围是一个程序文件,但必须符合“定义在前,使用在后”的规则。

4.以下正确的描述为( C )A. 每个C++程序必须在开头用预处理命令#include <iostream.h>B. 预处理命令必须位于C++源程序的首部C. 在C++中,预处理命令都以#开头D. C++语言的预处理命令只能实现宏定义和条件编译的功能5.在下面的函数原型说明中,存在着语法错误的是( D )A.void BC(int a,int);B.void BD(int , int);C.void BE(int , int=5);D.int BF(int x ; int y);6.下列哪个不是重载函数在调用时选择的依据( C )A. 形参类型B. 形参个数C. 函数返回值类型D. 函数名7.在一个源程序文件中有以下函数定义,其中( D )是重载函数。

A.ABC B. BCDC. ACDD. 全部A) int sum(float x,int y) B) float sum(float x,int y,char z){...} {...}C) float sum(float x,float y) D) int sum(int x,int y,char z){...}{...}8.有一个函数原型abc(float x,float y);该函数的返回值类型为( C )A. voidB. doubleC. intD. float9.在程序中,函数声明语句正确位置是( D )A. 随便任何位置B. 不包含在另一函数中的任何位置。

实训五 函数程序设计和答案

实训五 函数程序设计和答案

实训五函数程序设计(附:答案在后面)班级:姓名:学号:一、实训目标熟练掌握函数的定义、调用和调试方法。

1、学会函数的接口设计,能够快速构建函数框架。

2、掌握函数的定义和调用方法。

3、掌握函数的调试方法(step into)。

4、理解函数的形参、实参、返回值的概念。

二、语法基础1、函数是一个完成特定工作的独立程序模块,包括和两种。

2、对于用户自定义函数,用户需要完成函数的定义、函数的声明及函数的调用三部分内容;而对于库函数用户只需要完成及头文件的包括。

3、以下说法中正确的是。

A)C语言程序总是从第一个定义的函数开始执行B)在C语言程序中,要调用的函数必须在main( )函数中定义C)C语言程序总是从main( )函数开始执行D)C语言程序中的main( )函数必须放在程序的开始部分4、程序填空。

下列两个函数模块,请完成函数体部分内容。

1) 函数功能:求两个数的较大值。

/*函数功能:求两个数的最大值函数入口参数:双精度浮点型 x 表被比较的第一个数双精度浮点型 y 表被比较的第二个数函数返回值:较大的数 (类型为double)*/double max(double x, double y){2) 函数功能:输入一个整数n 的值,从屏幕显示n 个星号(‘*’)。

5、函数调用时的实参和函数定义时的形参可以是相同的变量名吗? ;如果两者变量名完全相同,那么它们代表的同一内存空间吗? ;写出下面程序的输出结果。

/*函数功能:输入一个数n ,输出n 个星号函数入口参数:整型 n 表星号的个数 函数返回值:无 */void printstar(int n) { }#include <stdio.h> int main(void) { int a,b;int even(int a); /*函数声明*/ printf(“input 1 integers : \n”); scanf(“%d”,&a );b=even(a); /*函数调用*/ printf(“2: a=%d,b=%d\n ”,a,b); return 0; }int even(int a) {a=a+1;printf(“1: a=%d\n ”,a); if(a%2==0)return 1; /*偶数返回1*/ elsereturn 0; /*奇数返回0*/ } 预期输出结果:实际运行结果:思考:在调用even 函数时main 函数中的a 变量作为实参,将其值传递给even 函数的形参a ;而在even 函数执行完后返回到main 函数时,形参a 的值会传递给实参a 吗?三、实训内容和步骤1、改错(教育在线上需改错的程序文件夹中error05_1.cpp ),程序功能为:输入一个正整数n ,计算n!,要求定义和调用函数实现。

5--函数和编译预处理

5--函数和编译预处理

一、选择题1、函数调用语句int fun( ) { return 50,60; },则函数调用后返回值为()。

A、50B、60C、50,60D、编译错2、设有函数定义调用语句“f((e1,e2),(e3,e4,e5));”,则实参个数是()。

A、2B、3C、4D、53、若用下列程序f(char a){ float b=5;b+=a/b;return b;}则函数返回值的类型是()。

A、intB、charC、voidD、float4、若定义函数int f(int x) { x++; return x; }执行以下语句:int a=5; f(a)+f(a);则a的值是()。

A、5B、6C、7D、85、下列程序的运行结果是()。

fun1(int a, int b){ return fun2(a++, --b); }fun2(int a, int b){ return a/b; }void main( ){ int x=5, y=6;cout<<fun1(x,y);}A、1B、1.6C、2D、语法错6、以下程序执行后输出结果是()。

int f(int x,int y){ return (y-x)*x; }void main( ){ int a=3, b=4, c=5, d;d=f(f(a,b),f(a,c));cout<<d;}A、3B、8C、9D、67、设有宏定义和语句#define P(x, y) x/y#define PP(a,b) a*bint c=P(2+3, 2+3)+PP(2+3, 2+3);则变量C的值是()。

A、26B、17C、17.5D、318、若有定义int k=3,以k+1作为参数,对下列宏定义进行宏展开,则最终结果不为7的是()。

A、#define s(x) x*xB、#define s1(x) (x)*(x)C、#define s2(x) (x*x)D、#define s4(x) (x*(x))9、下列编译预处理指令没有语法错误的是()。

函数与编译预处理实验报告

函数与编译预处理实验报告

函数与编译预处理实验报告一、实验目的本次实验旨在通过编写程序,掌握函数与编译预处理的相关知识,了解函数的调用和返回机制以及编译预处理的作用。

二、实验环境操作系统:Windows 10开发工具:Code::Blocks 17.12编程语言:C语言三、实验内容1. 函数的定义和调用函数是C语言中的一个重要概念,它可以将一段代码封装成一个功能单元,方便代码重用和维护。

在本次实验中,我们需要掌握如何定义函数,并且了解函数的调用过程。

在C语言中,函数通常由以下几部分组成:返回类型函数名(参数列表){函数体;return 返回值;}其中,返回类型指定了函数返回值的类型;函数名是唯一标识符,用于调用该函数;参数列表指定了该函数需要传入的参数;函数体是一段具体的代码逻辑;return语句则将结果返回给调用者。

在调用一个函数时,我们需要按照以下格式进行:返回值变量 = 函数名(参数列表);其中,返回值变量接收该函数返回的结果;参数列表则按照定义顺序传入相应参数。

如果该函数不需要传入任何参数,则可以省略参数列表。

2. 函数指针除了直接调用一个已经定义好的函数外,我们还可以使用函数指针来间接调用一个函数。

函数指针和普通指针类似,它指向的是一个函数的地址。

通过函数指针,我们可以在运行时动态地确定需要调用哪个函数。

在C语言中,声明一个函数指针的方法如下:返回类型 (*指针变量名)(参数列表);其中,括号中的*表示这是一个指针变量;指针变量名则是该变量的标识符;参数列表和返回类型与被指向的函数相同。

通过以下代码可以将一个已经定义好的函数赋值给一个函数指针:int max(int a, int b){return a > b ? a : b;}int (*p)(int, int) = max;在上述代码中,p就是一个用于存储max函数地址的函数指针。

3. 编译预处理编译预处理是C语言中一项重要的功能,在编译过程中会对源代码进行一些预处理操作。

C语言程序设计实验五:函数(5篇范例)

C语言程序设计实验五:函数(5篇范例)

C语言程序设计实验五:函数(5篇范例)第一篇:C语言程序设计实验五:函数C语言程序设计实验五:函数1、定义函数返回两个数中较大的数,在主函数中通过调用该函数求三个数中较大的数并输出,编写主函数调用该函数。

说明:(1)请大家按学号来坐,便于考勤和管理。

(2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。

(3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。

(4)文档名称:班级+学号后2位+姓名+实验编号,例如12通1班12张山实验五.doc。

第二篇:C语言程序设计实验七:函数、数组、指针C语言程序设计实验七:函数、数组、指针1、程序运行后,用户任意输入一个字符串,求出字符串长度,然后输出字符串内容及个数。

不能使用strlen函数。

求字符串长度函数的函数原型必须如下:int MyStrLenPt(char *str)若输入:nihao123!则输出:nihao123!:9 chars2、编写一个对一维数组进行排序的程序。

要求:写两个函数,一个主函数,一个sort函数。

在主函数中完成数组的输入和输出,通过调用sort函数对数组进行排序。

sort函数的原型为:voidsort(int*p, intn);说明:(1)请大家按学号来坐,便于考勤和管理。

(2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。

(3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。

(4)文档名称:班级+学号后2位+姓名+实验编号,例如11电1班12张山实验七.doc。

第三篇:C语言程序设计—函数—实验报告实验报告专业软件工程班级X班学号_ XXXXXXXXXXX_姓名实验日期:201X年X月X日报告退发(订正、重做)课程C程序设计实验实验名称函数一、实验目的① 熟练掌握C程序中函数的定义;② 掌握函数的调用,函数参数的传递;③ 熟练掌握函数的嵌套调用和递归调用;二、实验环境(描述实验的软件、硬件环境)① 软件环境:windows xp/win7等操作系统,Microsoft Visual C++ 6.0编译器;② 硬件环境:PC机一台三、实验内容、步骤和结果分析题目一:编写一个用来判断质数(素数)的函数。

函数与编译预处理实验报告

函数与编译预处理实验报告

函数与编译预处理实验报告1. 背景函数与编译预处理是计算机编程中非常重要的两个概念,它们对于程序的结构和执行效率都起着关键作用。

函数是一段可重复使用的代码块,通过将任务划分为多个函数可以提高代码的可读性与维护性。

而编译预处理则是在编译过程中对源代码进行预处理,包括宏展开、文件包含和条件编译等操作。

本次实验通过设计并实现一段使用函数和编译预处理的程序,旨在加深对函数和编译预处理的理解,掌握它们的基本概念和使用方法,并通过实践感受它们对程序结构和性能的影响。

2. 分析2.1 需求在实验中,我们需要设计一个问题,通过函数和编译预处理来实现对问题的解决。

首先,我们需要确定问题的具体要求和输入输出规范。

只有明确了问题的需求,才能设计出合适的函数和合理的编译预处理指令。

2.2 设计根据实验要求,我们可以设计一个简单的问题:计算一个整数的平方。

用户输入一个整数,程序输出该整数的平方。

这是一个简单的计算问题,可以通过函数和编译预处理来实现。

我们可以设计一个函数calculate_square用于计算平方,并通过编译预处理指令来实现输入输出的控制。

具体的实现细节如下:#include <stdio.h>// 函数:计算平方int calculate_square(int x) {return x * x;}// 编译预处理指令:实现输入输出控制#define ENABLE_INPUT_OUTPUT#ifdef ENABLE_INPUT_OUTPUTint main() {int num;printf("Please enter an integer: ");scanf("%d", &num);int result = calculate_square(num);printf("The square of %d is %d.\n", num, result);return 0;}#endif上述代码中,我们定义了一个函数calculate_square用于计算整数的平方。

函数和编译预处理.doc

函数和编译预处理.doc

函数和编译预处理函数和编译预处理(第五章)一、单项选择题1.关于函数,以下正确的描述是(B)A,函数的定义可以嵌套,但函数的调用不可以嵌套B,函数的定义不可以嵌套,但函数的调用可以嵌套C,函数的定义可以嵌套,函数的调用也可以嵌套D,函数的定义和函数的调用都不M以嵌套2.关键字inline用于定义内联函数,定义时,是将该关键字(D )A.取代定义函数的类型标识符B.取代被定义的函数名C.加在类型标识符之后D.加在类型标识符之前3.以下不正确的描述为(B )A.在函数之外定义的变量称为外部变量,外部变量是全局变量。

B.在函数之内说明的外部变量是局部变量,仅在本函数中有效。

C.在函数之外说明的静态变量也是全局变量,其作用域是文件作用域。

D.文件作用的域范围是一个程序文件,但必须符合“定义在前,使用在后”的规则。

4.以下正确的描述为(C )A,每个C++程序必须在开头用预处理命令^include <iostream. h>B,预处理命令必须位于C++源程序的首部C.在C++中,预处理命令都以#开头D.C++语言的预处理命令只能实现宏定义和条件编译的功能5.在下面的函数原型说明中,存在着语法错误的是(D )A.void BC(int a, int) ;B. void BD(int , int);C. void BE(int , int=5) ;D. int BF(int x ; int y);6.下列哪个不是重载函数在调用时选择的依据(C )A.形参类型B.形参个数C.函数返回值类型D.函数名7.在一个源程序文件中有以下函数定义,其中(D )是重载函数。

A.ABCB. BCDC. ACDD.全部A) int sum (float x, int y) B) float sum (float x, int y, char z) (. . . )C) float sum (float x, float y) D) int sum(int x, int y, char z) (. . . )8.有一个函数原型abc(float x, float y);该函数的返回值类型为(C )A.voidB. doubleC. intD. float9.在程序中,函数声明语句正确位置是(D )A.随便任何位置B.不包含在另一函数中的任何位置。

C语言实验5-7参考答案

C语言实验5-7参考答案

实验五函数和预处理命令四、设计流程(算法描述)(请写出上机内容1的算法描述)利用循环将m乘n次五、程序清单m的值。

利用此函数编程序实现:从1.编写自定义函数long power(int m,int n),计算nm的值。

键盘输入两个整数m和n,计算出n#include<stdio.h>long power(int m,int n)//要返回的是long型{int i;long s;//因为是要返回的数,所以这里也定义为long型s=1;for(i=1;i<=n;i++){s *=m;}return s;}int main(void){int m,n;scanf("%d%d",&m,&n);printf("s=%ld\n",power ( m,n));return 0;}2、写出两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。

1.源程序如下:#include <stdio.h>int zdgys(int n1,int n2){int i;for(i=n2;i>=1;i--)if(n1%i==0&&n2%i==0){break;}return i;}int zxgbs(int n1,int n2){int i;for(i=n1;i<=n1*n2;i++)if(i%n1==0&&i%n2==0){break;}return i;}main(){int n1,n2,t;scanf("%d %d",&n1,&n2);if(n1<n2){t=n1;n1=n2;n2=t;}printf("zdgys=%d zxgbs=%d",zdgys(n1,n2),zxgbs(n1,n2)); }3、改错题正确程序如下:#include <stdio.h>double fact(int n);double multi(int n);main(){int i;double sum,item,eps;eps=1E-6;sum=1;item=1;for(i=1;item>=eps;i++){item=fact(i)/multi(2*i+1);sum=sum+item;}printf("PI=%0.5lf\n",sum*2);return 0;}double fact(int n){int i;double res=1;for(i=1;i<=n;i++)res=res*i;return res;}double multi(int n){int i;double res=1;for(i=3;i<=n;i=i+2)res=res*i;return res;}六、调试和测试结果1、输入:2 3输出:s=82、输入:n1=24 n2=16输出:zdgys=8 zxgbs=482.3、输出结果为:实验六数组四、设计流程(算法描述)(请写出上机内容1的算法描述)设置两个变量分别指示头和尾。

函数与编译预处理

函数与编译预处理

一、选择题.1.在C语言中,函数的隐含存储类别是( A )A.autoB.staticC.externD.无存储类别2.以下函数值的类型是( A )fun(float x){float y;y=3*x-4;return y;}A.intB.不确定C.voidD.float3.下面程序的输出结果为( C )int x=3;main(){int i;for(i=1;i<x;i++)incre();}incre()static int x=1;x*=x+1;printf(“%d”,x);}A.3 3B.2 2C.2 6D.2 54.有如下函数调用语句:func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是( A )A.3B.4C.5D.有语法错误5.有以下程序:void f(int x,int y){int t;if(x<y){t=x;x=y;y=t;}}main(){int a=4,b=3,c=5;f(a,b);f(a,c);f(b,c);printf(“%d,%d,%d\n”,a,b,c);}执行后输出结果是( D )A.3,4,5B.5,3,4C.5,4,3D.4,3,56.下列程序段的输出结果是( C )int x=10;int y=x++; y=10 x=11printf(“%d,%d”,(x++,y),y++);A.11,10B.11,11C.10,10D.10,117.下述程序段的输出结果是( )#include<stdio.h>long fun(int n){long s;if(n= =1||n= =2)s=2;elses=n+fun(n-1);return s;}void main(){printf(“\n%ld”,fun(4));}A.7B.8C.9D.108.以下对C语言函数的有关描述中,正确的是( A )A.C程序由一个或一个以上的函数组成B.C函数既可以嵌套定义又可以递归调用C.函数必须有返回值,否则不能使用函数D.C程序中有调用关系的所有函数必须放在同一个源程序文件中9. 若用数组名作为函数调用的实参,传递给形参的是(A)A.数组的首地址B. 数组第一个元素的值C. 数组中全部元素的值D. 数组元素的个数10.一个完整的可运行的C源程序(B )A.至少需由一个主函数和一个以上的辅函数构成B.由一个且仅由一个主函数和零个以上(含零个)的辅函数构成C.至少由一个主函数和一个以上的辅函数构成D.至少由一个且只有一个主函数或多个辅函数构成11.以下正确的函数定义形式是( A )A.double fun(int x,int y) B.double fun(int x;int y)C. double fun(int x,int y);D. double fun(int x; y);12.在C语言的函数中,( C )A.必须有形参 B.形参必须是变量名C.可以有也可以没有形参D.数组名不能做形参13.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( B )A.地址传递B.单项值传递C.由实参传递给形参,再由形参传回给实参D.由用户指定传递方式14.下面函数调用语句含有实参的个数为( B )func((exp1,exp2),(exp3,exp4,exp5));A.1B.2C.4D.515.若调用一个函数,且此函数中无return语句,则正确的说法是( D )A.该函数没有返回值B.返回若干个系统默认值C.能返回一个用户所希望的函数值D.返回一个不确定的值16.如果在一个函数中的复合语句中定义了一个变量,则该变量正确的说法是( A )A.只在该复合语句中有效B.在该函数中有效C.在本程序范围内均有效D.为非法变量17.如果要限制一个变量只能为本文件所使用,必须通过( C )来实现A.外部变量说明B.静态内部变量C.静态外部变量D.局部变量说明18.C语言允许函数值类型默认定义,此时该函数值隐含的类型是( B )A.float型B.int型C.long型D.double型19.以下函数形式正确的是( D )A.double fun(int x,int y)B.fun(int,x,y){z=x+y;return z;} {int z;return z;}C.fun(x,y);D.double fun(int x,int y){int x,y;double z;z=x+y;return z;} {double z;z=x+y;return z;}20.以下程序的输出结果是( B )fun(int a,int b,int c){a=456;b=567;c=677;}main(){int x=10,y=20,z=30;fun(x,y,z);printf(“%d,%d,%d”,x,y,z);}A.30,20,10B.10,20,30C.456,567,677D.677,567,45621.下面程序的输出结果是(B )fun(int k){if(k>0)fun(k-1);printf(“%d”,k);}main(){int w=5;fun(w);printf(“\n”);}A.5 4 3 2 1B.0 1 2 3 4 5C.1 2 3 4 5D.5 4 3 2 1 022.以下程序的正确运算结果是( C )num(){extern int x,y;int a=15,b=10;x=a-b;y=a+b;}int x,y;main(){int a=7,b=5;x=a+b;y=a-b;num();printf(“%d,%d\n”,x,y);}A.12,2B.不确定C.5,25D.1,1223.下面程序执行后输出结果是( D )f(int a){int b=0;static c=3;a=c++,b++;return(a);}main(){int a=2,i,k;for(i=0;i<2;i++)k=f(a++);printf(“%d\n”,k);}A.3B.0C.5D.4二、填空题。

第5次实验-函数与预处理

第5次实验-函数与预处理

实验4:函数与预处理说明:所有的源代码和运行结果截图都放到实验报告文档中,注意按照要求命名并提交到指定邮箱。

⑴掌握函数的概念,及其声明和定义方法。

⑵掌握实参和形参的概念,理解在函数调用过程中数据传递的规则。

⑶理解函数的嵌套调用意义。

⑷理解内联函数和重载函数的基本含义和使用方法。

⑸理解函数模板的概念,掌握其定义和使用的方法。

⑹理解带默认参数值的函数的意义。

⑺理解变量存储分类的概念。

⑻理解全局变量和局部变量及作用域的概念。

第一部分教程练习:1.求两个正整数的最大公约数和最小公倍数。

要求:编写两个函数,分别求最大公约数和最小公倍数,在主函数中输出结果。

源代码:运行结果截图:2.编程实现对键盘输入的英文字符进行加密。

加密方法为,当内容为英文字母时,使用26个字母中该字母后的第三个字母代替该字母,即'A'替换为'D','X'替换为'A'等等,若为其它字符时不变。

源代码:运行结果截图:3. 编程实现将字符串按逆序存放,如字符串为“abcd”,运行结果为“dcba”。

◆要求:主函数中键盘输入一个字符串存放在一个数组里,通过参数将数组传递给被调函数,逆序调整后存放在原数组,在主函数中输出。

源代码:运行结果截图:◆思考题及问题字符串中如果包含空格,请修改程序实现正确的输入操作。

4.利用模板设计一个将数组元素排序并输出的函数,并检验。

◆设计两个函数模板:一个显示数组元素,一个实现排序。

使用整型和双精度两组数据检验。

源代码:运行结果截图:第5次实验-函数与预处理第二部分自测练习1.自测练习一编写重载函数Max可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。

2.自测练习二设计一个打印年历的程序。

要求:打印每个月的月历的功能由一个独立的函数完成,程序运行时,主程序通过若干次调用该函数完成年历的输出。

注意处理闰年问题。

3. 自测练习三:十进位制数转换二,十六进制数程序。

C++学习课件PPT5 函数和编译预处理

C++学习课件PPT5 函数和编译预处理

#include “iostream.h” int i=100;
全局变量i
void main(void)
局部变量i
{ int i=50,j=20; int max(int i,int j);
局部变量i
cout<<max(i,j)<<‘\t’;
cout<<max(::i,j); }
引用全局变量
int max(int i,int j)
14:07
5.2 例
#include "iostream.h"
int maxi(int a,int b) 注意这里的
{ return a>b?a:b;} 实参表达式
void main()
计算顺序
{
int a,b;
a=20; b=40;
cout<< maxi(b+a,b=b+1); 问题:maxi函数输出值?
14:07
动态变量与静态变量例
例 #include “iostream.h”
int t(void) {static int i=100;
i+=5; return i; } void main(void) {cout<<“i=“<<t()<<‘\t’; cout<<“i=“<<t()<<‘\t’; }
14:07
河内塔问题:
第一步已完成: A(n-1)B(借助C)
A柱
B柱
C柱
第二步:将A柱剩下的一个最大的盘子移到C 柱
AC
14:07
原状态: A柱
河内塔问题:

函数与预编译选择题

函数与预编译选择题

1.设有下列语句:charstr1[]="string",str2[8],*str3,*str4="string";则()是对库函数strcpy的不正确调用。

此函数用来复制字符串。

A.strcpy(str3,"HELLO3");B.strcpy(str2,"HELLO2");C.strcpy(str1,"HELLO1");D.strcpy(str4,"HELLO4");2.用数组名作为函数的实参时,错误的说法是()。

A.定义形参数组时,元素的个数必须与实参相同B.可以使用数组名作为形参C.实参传递给形参的值是数组的首地址D.可以使用指针变量作为形参3.以下程序的运行结果是()。

int fun(int a[4][4]){ int i;for(i=0;i<4;i++)printf("%2d",a[i][2]);printf("\n");}main(){ inta[4][4]={1,1,2,2,1,9,0,0,2,4,0,0,0,5,9,8};fun(a);}A. 1 9 0 5B. 2 0 0 0C. 2 0 0 8D. 2 0 0 94.自定义函数中若缺省函数值类型,则隐含的类型是()。

A.intB.longC.floatD.double5.以下程序运行后输出结果是()。

#include <stdio.h>int fun(int a, int b){return(a-b);}main(){int x=5,y=3,k;k=fun(x,y);printf("%d-%d=%d\n",x,y,k);}A.0B.x-y=2C.5-3=2D. 26.以下程序运行后输出结果是()。

#include <stdio.h>int a=2,b=3,c=5;int fun(int a, int b){int c;c=a>b?a:b;return(c);}main(){int a=6;printf("%d",fun(fun(a,b),c));}A. 5B.3,5C.6,5D. 67.以下程序运行后输出结果是()。

计算机程序设计基础:函数与编译预处理单元测试与答案

计算机程序设计基础:函数与编译预处理单元测试与答案

一、单选题1、C语言规定,函数返回值的类型由()。

A.return语句中的表达式类型决定B.调用该函数的主调函数类型决定C.调用该函数时系统临时决定D.定义该函数时所指定的函数类型决定正确答案:D2、以下正确的函数定义首部是()。

A.double fun(int x;int y)B.double fun(int x,int y);C.double fun(int x,int y)D.double fun(int x,y)正确答案:C3、简单变量作函数形参时,以下说法正确的是()。

A.形参是虚拟的,函数调用时不占用存储单元B.实参和与其对应的形参各自占用独立的存储单元C.实参和与其对应的形参共享一个存储单元D.只有当形参和与其对用的实参同名时才共享存储单元正确答案:B4、函数调用时,下列说法中不正确的是()。

A.值传递方式时,形参不予分配内存单元B.实参和形参可以同名C.主调函数和被调用函数可以不在同一个文件中D.函数间传送数据可以使用外部全局变量正确答案:A5、以下程序的输出结果是()。

#include <stdio.h> void fun(int x,int y,int z){ z=x*x+y*y; }int main(){int a=31;fun(5,2,a);printf("%d\n",a);return 0;}A.0B.29C.31D.无确定值正确答案:C6、下列程序的运行结果是()。

#include <stdio.h> int a=3,fun();int main(){int a=1,b;{int a=2;b=fun();printf("%d,",a);}printf("%d\n",b);return 0;}int fun(){return a+2;}A.1,2,5B.1,2,4C.2,1,4D.2,1,5正确答案:D7、下列程序的运行结果是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(max<x[i])
max=x[i];
return max;
}
相关知识:练习形参是数组的函数申明、调用格式;复习数组的输入方法。
5.程序c60105.c的功能是从键盘上输入的若干个数按升序排序。请调试检查该程序中的错误,程序如下:
#include <stdioபைடு நூலகம்h>
void main( )
{int i , k;
printf("(1)in main :x=%d,y=%d\n",x,y);
swap(x,y);
printf("(4)in main :x=%d,y=%d\n",x,y);
}
void swap (int m,int n)
{ int temp;
printf("(2)in main :m=%d,n=%d\n",m,n);
int i = HIGH ;
reset ( i / 2) ;
printf(" i = %d \n ", i );
reset ( i = i / 2) ;
printf(" i = %d \n ", i );
reset ( i / 2) ;
printf(" i = %d \n ", i );
workover ( i );
#include <stdio.h>
void main()
{ void fun(int i, int j, int k);
int x,y,z;
x=y=z=6;
fun(x,y,z);
printf("%x=%d;y=%d;z=%d\n",x,y,z);
}
void fun(int i, int j, int k)
{ n++ ; printf ("%d\n",n); }
printf("\n");
}
11.分析程序c60104.c的运行结果,上机验证。
#define POWER(x) ((x)*(x))
#define MAX(x,y) (x)>(y)?(x):(y)
#define PR printf
#include <stdio.h>
scanf("%d",&m);
printf( "\nPlease input a number in (2,8,16):");
scanf("%d",&k);
dtoo(m,k);
}
void dtoo( int n ,int r )
{ if(n>=r) dtoo(n/r,r);
printf("%d",n%r);
注意:for (i = 0; scanf("%f",&j); i++)这一行中for语句第二个表达式的使用形式,此处用了scanf()函数的出错来结束输出循环。请读者查一下教材后面的附录,看看什么时候scanf()函数返回0,此时就可以结束循环。
6.编写程序,实现由主函数输入m、n,按下述公式计算并输出 的值。
; /*调用求素数函数*/
}
void prime(int n)
{ int i,k;
k=sqrt(n);
for(i=2;i<=k;i++)
if (n%i==0) break;
if(i>=k+1)
printf("This is a prime number");
else printf("This isn’t a prime number");
temp=m;m=n;n=temp;
printf("(3)in main :m=%d,n=%d\n",m,n);
}
把用户自定义函数swap()中的形式参数m和n对应改成x和y,使其与实参变量同名,再用F7跟踪程序的运行,看看有什么变化。
相关知识:形参具有“用之则建,用完则撤”的特点。在函数定义时,函数名后面圆括号内的参数称为形参;在函数调用时,函数名后面圆括号内的参数称为实参。对于实参,在调用函数中对其进行定义时,不仅指明它的类型,而且系统还为其分配存储单元。而对于形参,定义时仅仅只是指明它的类型,并不在内存中为它们分配存储单元,只是在调用时才为其分配临时存储单元,函数执行结束,返回调用函数时,该存储单元立即撤销。
{ int i, j, temp,min;
for ( i=0; i<n-1; i++)
{ min=i;
for(j=i+1;j<n;j++)
if ( x[j] < x[min])
min=j;
if(min!=i)
{ temp=x[i];
x[i]=x[min];
x[min]=temp;
}
}
}
错误提示:形参和实参的数据类型不一致;一般形参数组在说明时不指定数组的长度,而仅给出类型、数组名和一对方括号;用户自定义函数sort()没有申明过。
(2)每门课的平均分。
(3)按学生平均分降序排列输出学生信息。
(4)统计不及格学生,输出其相应信息。
(5)编写一菜单主函数,菜单内容包括以上4部分。
分析:本题要求完成的操作有录入数据、求平均分、排序、统计。这些操作分别用函数来实现。先分析表示这些数据的数据结构,可用如下结构来表示学生的成绩:
课程1
课程2
实验五
一、实验目的及要求
1.掌握函数定义的方法;
2.掌握函数实参与形参的对应关系以及“值传递”的方式;
3.掌握函数的嵌调用和递归调用的方法;
4.掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
5.学习对多文件程序的编译和运行。
二、实验学时
4学时
三、实验任务
1.阅读c60101.c程序,通过调试该程序,熟悉函数的调用方法及单步跟踪键F7和F8的不同。
}
8.预习c60201.c程序,写出预习结果,上机验证并写出分析。
变量的作用范围
# define LOW 10
# define HIGH 5
# define CHANGE 2
int i = LOW ;
#include <stdio.h>
void main( )
{ int workover ( int i ) , reset ( int i );
;
/*调用Findmax函数*/
;
for (i=0;i<10; i++)
printf("%4d", s[i]);
printf("\nthe max is %d ",max);
}
int Findmax( int x[ ], int n )
{ int max,i;
max=x[0];
for ( i=1; i<n; i++)
{ i = i <= CHANGE ? HIGH : LOW ;
return ( i );
}
相关知识:“变量用之不尽,一写就走”。在main()主函数中reset(i/2)和reset(i=i/2)不同,第一个reset的i没有被赋值到,所以该函数调用结束后还保持原来的值;而第二个reset的i被赋值了,所以函数调用结束后以前的值就没有。全局变量:在所函数外面定义的变量,其有效范围到整个源程序结尾;局部变量:在函数内部定义的变量或在函数头部定义的形参,其有效范围只在所定义的函数,局部变量具有“用之则建,用完则撤”的特点。在不同函数内定义的变量同名互不干扰。如果一个源程序中的局部变量和全局变量同名,则局部变量优先。
10.预习程序c60203.c,分析在程序运行前宏NUM的值,并上机运行,比较一下的预习结果和实际结果。
#include "stdio.h"
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{ int i,n=0;
for (i=1; i<=NUM; i++)
提示:定义一个求阶层的函数,然后在主函数中调用三次即可求得。
7.阅读如下递归程序c60107.c,其功能是什么?上机调试。
#include <stdio.h>
void main( )
{int m, k;
void dtoo( int n ,int r );
printf("Pleae input the decimal number:");
3.程序c60103.c是实现求素数的,请填空完成该程序,并上机运行测试。
#include <math.h>
#include <stdio.h>
void main()
{ int m;
; /*申明求素数函数*/
printf("Please input a data m=:");
scanf("%d",&m);
9.上机调试c60202.c程序,观察静态局部变量在调用过程中的变化。
#include <stdio.h>
void main( )
{int i ;
int f(int);
for ( i = 1; i <= 5; i ++)
printf( "(%d):% d\n", i,f(i));
相关文档
最新文档