函数调用与宏定义巩固题

合集下载

C综合练习-4附参考答案

C综合练习-4附参考答案

C综合练习4 附参考答案(宏,结构体和文件)0.较为复杂的宏定义例题(1)定义一个宏,用于判断所给出的年份year是否为闰年:#define LEAP_YEAR(y)解:为闰年的条件是符合下面二者之一:(1)能被4整除,但不能被100整除。

(2)能被4整除,能被400整除。

#define LEAP_YEAR(y) (y%4==0 && y%100!=0)|| (y%400==0 )(2)定义带参数的宏为#define max(a,b) ((a)>(b)?(a):(b))对表达式max(a,max(b,max(c,d))) 作宏替换为(用文字描述):。

解:计算a、b、c、d中的最大值。

表达式是调用宏函数,两个参数分别是a,max(b,max(c,d)),其第二个参数又是一个调用宏函数,参数分别是b,max(c,d)。

(3)定义一个带参数的宏,将两个参数的值交换#define swap(a,b) { double t; }解:t=a; a=b; b=t;(4)定义一个带参数的宏,若变量中的字符为大写字母则转换成小写字母。

解:#define change(c) c=c>='A'&&c<='Z'? c:c+321. 单项选择题1.下面语句的输出结果是________。

#include “stdio.h”printf(“%d %d %d”,NULL,’\0’,EOF);A. 0 0 1B. 0 0 -1C. NULL EOFD. 1 0 EOF2.如果二进制文件a.dat已经存在,现要求写入全新的数据,应以________方式打开。

A.“w” B.”wb” C.”w+” D.”wb+”3.有以下的结构体变量定义语句:struct student { int num; char name[9]; } stu;则下列叙述中错误的是( )。

c语言题库(模拟题)

c语言题库(模拟题)

模拟一字符串"\\\'efg\'\\"的长度是:(C).A、3B、11C、7D、5设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为(A)。

A、doubleB、不确定C、intD、float下列语句的结果是(B)。

main(){ int j;j=3;printf("%d,",++j);printf("%d",j++);}A、3,3B、4,4C、3,4D、4,3逻辑表达式!(2-1)&&x||0的值是(B )A、1B、0C、3D、2int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为(C)。

A、3B、2C、1D、不一定执行语句 for(i=1;i++<4;); 后变量 i 的值是(B)。

A、3B、5C、4D、不定以下正确的描述是(A ).A、只能用continue语句来终止本次循环B、switch语句中不能出现continue语句C、在循环中break语句不能独立出现D、goto语句只能用于退出多层循环下面合法的语句定义是( A).A、char a[ ]={'0','1','2','3','4','5'};B、int a[ ]="string";C、int a[5]={0,1,2,3,4,5};D、char a="string";char a[10];不能将字符串"abc"存储在数组中的是(B)。

A、int i;for(i=0;i<3;i++)a[i]=i+97;a[i]=0;B、a="abc";C、strcpy(a,"abc");D、a[0]=0;strcat(a,"abc");在C语言中,一维数组的定义方式为:类型说明符数组名(B)。

c++第05章 补充练习

c++第05章 补充练习

第05章函数补充练习一、选择题1.当一个函数无返回值时,函数的类型应为。

A任意 B void C int D char 2.在函数声明中,是不必要的。

A函数参数的类型和参数名 B 函数名C 函数的类型 D 函数体3.一个函数带有参数说明时,则参数的默认值应该在中给出。

A函数定义 B 函数声明C 函数定义或声明D 函数调用4.下列叙述中错误的是。

A一个函数中可以有多条return语句B 调用函数必须在一条独立的语句中完成C 函数中通过return语句传递数值D 主函数名main也可以带参数5.在C++语言中函数返回值的类型是由决定的。

A调用该函数时系统临时B return语句中的表达式类型C 定义该函数时所指定的函数类型D 调用庐函数时的主调函数类型6.若有以下函数调用语句:“f(m+n,x+y,f(m+n,z,(x,y)));”,在此函数调用语句中实参的个数是。

A 6B 5C 4D 3 7.关于函数返回值类型和返回值表达式的类型的描述中,错误的是。

A函数返回值类型决定了返回值表达式的类型B 函数返回值的类型是在定义函数时确定的,在函数调用时不能改变C 函数返回值的类型就是返回值表达式的类型D 函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成函数返回值类型8.在C++语言中,main函数默认返回一个类型的值。

A intB floatC charD void 9.在C++语言中,对函数参数默认值描述正确的是。

A函数参数的默认值只能设定一个B 一个函数的参数若有多个,则参数默认值的设定可以不连续C 函数参数必须设定默认值D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值10.在不同文件的函数中,对全局变量的引用要加上。

A registerB autoC staticD extern 11.不能作为函数重载判断依据的是。

A constB 返回类型C 参数个数D 参数类型12.下列函数参数默认值定义错误的是。

习题四函数宏定义(4)

习题四函数宏定义(4)
int fun(int x, int y)
{ int z;
while (y)
{ z=x%y; x=y; y=z; }
return(x);
}
main( )
{ int i=16, j=6, k;
k=fun(i, j);
printf("%d\n", k);
}
73、以下函数用于统计一行中的单词个数,单词之间用空格分隔。请填空。
}
81、以下函数invert的功能是将一个字符串str1的内容倒置。请填空。
#include <string.h>
void invert(char str1[ ])
{ int a, b;
_____;
for (a=0, b=strlen(str1);_____; a++, b--)
{ c=str1[a]; str1[a]=str1[b-1]; str1[b-1]=c; }
count(_____)
{ static int k=0;
k++;
if (ch2=='!')
printf("count=%d\n",_____);
}
main( )
{ char ch1;
while (1)
{ scanf("%c", &ch1);
count(ch1);
if (ch1=='!')
break;
max_value(int arr[ ][4])
{ int i, j, max;
max=arr[0][0];
for (i=0;_____; i++)

C语言程序设计:函数的定义及调用单元测试与答案

C语言程序设计:函数的定义及调用单元测试与答案

一、单选题1、下面对函数的叙述,正确的是( )。

A.函数的返回值是通过return语句获得的B.函数中没有return语句,说明不带回值C.函数不能嵌套定义D.函数中无论是否有return语句,都能返回正确值正确答案:C2、下面叙述中错误的是( )。

A.一般来说,函数的形参和实参的类型要一致B.若函数的定义出现在主调函数之前,则可以不必再加说明C.函数的形参和实参必须要使用相同名字的变量D.函数的形式参数,在函数未被调用时不被分配存储空间正确答案:C3、若函数的调用形式如下:f((x1,x2,x3),(y1,y2))则函数形参个数是()。

A.4B.2C.5D.3正确答案:B4、下列程序段中,有错误的是()。

A. int f(){int x;scanf("%d", &x);return x++, x+5;}B. int f2(int x){return (x>1?printf("Y"): putchar('N'));}C. void change(int x, int y){int t;t=x; x=y; y=t;}D.int main(){float a=2.6 , b;b=max(2.1, 3.6)=a++;printf("%f", a+b);}正确答案:D5、关于函数正确的说法是()。

A.主函数可以写在其他函数之后,函数内不可以嵌套定义函数B.主函数必须写在其他函数之前,函数内可以嵌套定义函数C.主函数必须在写其他函数之后,函数内可以嵌套定义函数D.主函数必须写在其他函数之前,函数内不可以嵌套定义函数正确答案:A6、关于函数原型,叙述错误的是()。

A.函数可以不必进行声明,可以放在程序的任意位置B.当自定义函数被放在了主调函数的后面,就需要在函数调用之前,加上函数的原型声明C.被调用函数在主调函数之前定义,可以省略函数原型声明D.所有函数定义放在main函数之前,可以省略原型声明正确答案:A二、判断题1、函数可以根据需要通过参数与调用函数之间进行数据传递。

c语言应用考试题及答案详解

c语言应用考试题及答案详解

c语言应用考试题及答案详解一、选择题(每题2分,共20分)1. 在C语言中,以下哪个关键字用于定义一个函数?A. intB. voidC. returnD. function答案:A2. 下列哪个选项是正确的C语言注释?A. // 这是注释B. /* 这是注释 */C. //* 这是注释D. /* 这是注释 */答案:A3. 在C语言中,用于定义一个结构体的关键字是:A. structB. unionC. enumD. typedef答案:A4. 下列哪个选项是正确的C语言数组声明?A. int array[10];B. int array[];C. int array[10] = {0};D. All of the above答案:D5. 在C语言中,以下哪个运算符用于计算两个数的和?A. +B. -C. *D. /答案:A6. 在C语言中,用于获取当前年份的函数是:A. time()B. localtime()C. mktime()D. strftime()答案:A7. 下列哪个选项是C语言中正确的文件打开模式?A. "r"B. "w"C. "a"D. All of the above答案:D8. 在C语言中,以下哪个关键字用于定义一个指针?A. int*B. intC. int*D. int答案:A9. 下列哪个选项是C语言中正确的字符串声明?A. char str[10] = "Hello";B. char str[] = "Hello";C. char str[10] = {'H', 'e', 'l', 'l', 'o', '\0'};D. All of the above答案:D10. 在C语言中,用于定义一个枚举类型的关键字是:A. enumB. typedefC. unionD. struct答案:A二、填空题(每题3分,共15分)1. 在C语言中,使用________运算符可以将一个整数提升到一个指定的幂次。

C++ 编码规范试题1

C++ 编码规范试题1

31C++编码规范试题三C++编码规范试题(满分100分);一、单选题(5*2);1、关于函数参数,不正确的说法是:;A、对参数输入和非参数输入都要检查有效性;B、防止将函数的参数作为工作变量;C、在调用函数填写参数时,应尽量减少没有必要的默;D、非调度函数应减少或防止控制参数,尽量不要使用;2、宏定义#defineSQUARE(a)((a;A、0次;B、1次;C、2次;D、3次;C++编码规范试题(满分100分)一、单选题(5*2)1、关于函数参数,不正确的说法是:A、对参数输入和非参数输入都要检查有效性。

B、防止将函数的参数作为工作变量。

C、在调用函数填写参数时,应尽量减少没有必要的默认数据类型转换或强制数据类型转换D、非调度函数应减少或防止控制参数,尽量不要使用数据参数。

2、宏定义#define SQUARE(a) ((a) * (a)) 在b = SQUARE(a++)中,a被执行了次加1A、0次;B、1次;C、2次;D、3次3. ()关于可测性,正确的说法是:A 断言用来处理必须处理的错误情况B 调试时打印的出错信息只要有错误码就行了C 软件的DEBUG版本与发行版本分为两套进行维护D 项目组内要有一套统一的错误输出函数4. ()以下程序中,可读性较好的有:A rect.length = 10; char_poi = str; rect.width = 5;B if (Trunk[index].trunk_state == 0)C word = (high << 8) | low;D * ++ stat_poi += 1;5、若已经定义:int a[9], *p = a;并在以后的语句中未改变p的值,能表示a[1]地址的表达式是:A、++a;B、a++;C、++p;D、p++;二、多选题(11*4)1、关于变量,正确的说法是:A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;B、若全局变量仅在单个函数中访问,则可以将这个变量修改为该函数的静态局部变量,以降低模块间的耦合度;C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;D、静态全局变量过大,可能会导致堆栈溢出。

c语言 宏定义 笔试题

c语言 宏定义 笔试题

c语言宏定义笔试题C语言中的宏定义是一种预处理指令,用来创建常量值、函数或代码片段的缩写。

它们在编译时被处理,用定义的值替换代码中的宏名称。

下面我将从不同角度来回答你的问题。

首先,宏定义在C语言中的基本语法是使用`#define`关键字,后面跟着宏的名称和宏的取值。

例如,`#define PI 3.14159`就是一个简单的宏定义,将PI定义为3.14159。

在代码中,每次出现PI,都会被替换为3.14159。

其次,宏定义可以用来创建带参数的宏,类似于函数的宏。

例如,`#define MAX(x, y) ((x) > (y) ? (x) : (y))`定义了一个比较大小的宏,可以用来比较两个值的大小并返回较大的值。

在代码中,每次使用`MAX(a, b)`时,都会被替换为`((a) > (b) ? (a) : (b))`。

另外,宏定义可以用来进行条件编译。

通过在编译时根据宏的定义与否来选择性地包含或排除代码段。

例如,`#define DEBUG`定义了一个DEBUG宏,然后可以在代码中使用`#ifdef DEBUG`和`#endif`来包含调试相关的代码,而在发布版本中可以将DEBUG宏注释掉,从而排除调试代码。

此外,宏定义还有一些注意事项。

宏名称通常使用大写字母,以便与变量名区分开来。

在定义复杂的宏时,需要注意宏展开后可能带来的副作用,比如参数多次被求值、宏的作用域等问题。

因此,在使用宏定义时需要谨慎,避免出现意外的错误。

总的来说,宏定义是C语言中非常有用的功能,可以用来创建常量、函数宏以及进行条件编译,但在使用时需要注意一些细节,以避免潜在的问题。

希望这些信息能够帮助你更好地理解C语言中的宏定义。

宏定义练习题

宏定义练习题

宏定义练习题宏定义是C语言中非常重要的一部分,它可以帮助我们简化代码、提高开发效率。

在这篇文章中,我们将通过一些练习题来帮助大家巩固并深入理解宏定义的使用。

练习一:计算两数之和请定义一个宏,名为SUM,它能够计算两个整数的和,并将结果存储在一个变量中。

请编写相应的代码进行测试。

```c#include <stdio.h>#define SUM(a, b) ((a) + (b))int main() {int num1 = 5;int num2 = 10;int result = SUM(num1, num2);printf("Sum: %d\n", result);return 0;}```练习二:计算圆的面积请定义一个宏,名为CIRCLE_AREA,它能够计算给定半径的圆的面积,并将结果存储在一个变量中。

请编写相应的代码进行测试。

```c#include <stdio.h>#define PI 3.1415926#define CIRCLE_AREA(radius) (PI * (radius) * (radius))int main() {double radius = 5.0;double area = CIRCLE_AREA(radius);printf("Circle Area: %lf\n", area);return 0;}```练习三:判断奇偶数请定义一个宏,名为ODD_EVEN,它能够判断给定的整数是奇数还是偶数,并输出相应的提示信息。

请编写相应的代码进行测试。

```c#include <stdio.h>#define ODD_EVEN(num) ((num) % 2 == 0 ? "Even" : "Odd")int main() {int number = 7;printf("Number is %s\n", ODD_EVEN(number));return 0;}```练习四:字符串连接请定义一个宏,名为STRING_CONCAT,它能够将两个字符串连接为一个新的字符串,并将结果存储在一个字符数组中。

c语言宏定义的题目

c语言宏定义的题目

c语言宏定义的题目C语言宏定义宏定义是C语言中一种重要的预处理指令,可以用来定义常量、函数宏和条件编译等。

通过宏定义,我们可以在程序中简化代码的编写,提高代码的可读性和可维护性。

本文将介绍C语言中宏定义的使用方法及其相关注意事项。

一、常量宏定义C语言中,我们可以使用常量宏定义来定义一些常用的值,从而使程序具有更好的可读性。

常量宏定义的格式为:```c#define 宏名值```其中,宏名可以是任意合法的标识符,值可以是一个常量或者表达式。

宏名一般使用大写字母,以便与变量名区分开来。

例如:```c#define MAX_VALUE 100```在定义了MAX_VALUE之后,我们就可以在程序中使用MAX_VALUE来表示100,如:int num = MAX_VALUE;```二、函数宏定义除了定义常量宏,我们还可以使用函数宏来简化代码。

函数宏定义的格式为:```c#define 宏名(参数列表) 替换内容```在参数列表中可以定义需要传递给宏的参数,使用时按照函数调用的方式传递参数。

替换内容可以是一个表达式、语句或者其他宏定义。

例如:```c#define SQUARE(x) ((x) * (x))```上述宏定义了一个名为SQUARE的宏,它接收一个参数x,并返回x的平方。

在程序中可以这样使用宏:```cint result = SQUARE(5); // 得到25函数宏的一个重要特性是它是在预处理阶段进行替换的,因此在使用函数宏时需要注意参数的使用方式和避免副作用。

例如:```c#define MAX(x, y) ((x) > (y) ? (x) : (y))```这是一个求两个数中较大值的宏,我们可以使用MAX(1+2, 3)来得到较大值3。

但是,如果在参数中有副作用的表达式,如MAX(getNum(), 5),则会导致副作用执行多次,可能产生错误。

三、条件编译宏定义还可以用于条件编译,通过宏定义的值来控制编译时的不同处理方式。

C 语言期末复习题

C 语言期末复习题

一、简答题1、请问指针有哪些类型?指针的类型,跟他所指向的数据结构有关,基本类型的指针指向基本类型的数据结构。

2、函数式宏定义和函数调有什么不同?(1)函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。

(2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同。

(3)函数式宏定义要注意格式,尤其是括号。

(4)若函数参数为表达式,则普通函数的调用与函数式宏定义的替换过程是不一样的。

(5)函数式宏定义往往会导致较低的代码执行效率。

3、请问指针编程有哪些优点?(1)提高传输速度,又节省大量内存。

(2)可以用来做数据类型转换,比较常用于通讯缓冲区的填充。

(3)可以用在大量分支处理的实例当中。

(4)在数据结构中,链表、树、图等大量的应用都离不开指针。

4、C语言中,变量为什么要先定义后使用?(1)对于编译器处理更方便。

(2)不容易出错。

(3)程序更清晰。

5、二维数组的初始化定义的正确形式有哪些?请举例说明(1)分行赋初值例如:int a[2][3]={ {1,3,4},{2,3,1},{7,9,0} };(2)按顺序初始化例如:int a[2][3]={1,3,4,2,3,1,7,9,0};(3)省略一维长度的赋值例如:int a[][3]={1,3,4,2,3,1,7,9,0};(4)对数组的前几行元素初始化,其他元素自动初始化为0例如:int a[2][3]={ {1},{2,3} };6、while与do while相同点与不同点是什么?(1)while语句是先测试条件再执行语句,条件不符后终止;do while语句是先执行语句再测试条件,条件不符后终止,所以do while循环至少执行一次7、请写出一个C程序的构成(1)C程序是由若干个函数构成的(2)每个函数(包括主函数)的定义分为两个部分:函数说明部分和函数体。

(3)C程序中的语句最后总要有一个“分号(;)”,作为每个语句的结束。

c语言宏题

c语言宏题

c语言宏题【最新版】目录1.介绍 C 语言宏的概念2.讨论 C 语言宏的作用3.展示 C 语言宏的实例4.总结 C 语言宏的使用方法正文C 语言宏是一种强大的预处理指令,它可以在编译时被替换,从而简化代码的编写。

在 C 语言中,宏是一种标识符,可以用来表示一个字符串,一个表达式,或者一个命令。

C 语言宏的作用主要体现在以下几个方面:1.提高代码的可读性:通过使用宏,可以将一些复杂的表达式或者代码段简化为一个简洁的标识符,使得代码更易于阅读和理解。

2.代码复用:通过定义宏,可以实现代码的复用,避免了重复编写相同的代码。

3.优化代码结构:通过使用宏,可以将一些公共的代码段提取出来,从而优化代码的结构。

以下是一个 C 语言宏的实例:```c#define PI 3.1415926#define SQUARE(x) x * xint main() {double area = PI * SQUARE(RADIUS);printf("The area of the circle is: %lf", area);return 0;}```在这个例子中,我们定义了两个宏:PI 和 SQUARE。

PI 表示圆周率,SQUARE 表示求平方。

在 main 函数中,我们使用这两个宏来计算圆的面积。

使用 C 语言宏的方法如下:1.在宏定义之前,需要使用预处理指令`#define`来声明一个宏。

2.在使用宏时,可以直接在代码中使用宏名,宏名会被编译器替换为定义时的值。

需要注意的是,C 语言宏只是编译时的替换,不会影响程序的运行。

因此,在使用宏时,要避免出现宏名与变量名冲突的情况。

同时,宏定义时不需要加分号。

C语言开发基础(习题卷23)

C语言开发基础(习题卷23)

C语言开发基础(习题卷23)第1部分:单项选择题,共73题,每题只有一个正确答案,多选或少选均不得分。

1.[单选题]若有代数式 (其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是( )。

A)sqrt(fabs(pow(n,x)+exp(x)))B)sqrt(fabs(pow(n,x)+pow(x,e)))C)sqrt(abs(n^x+e^x))D)sqrt(fabs(pow(x,n)+exp(x)))答案:A解析:math.h是数学运算库函数的头文件名:doublesqrt(double):平方根函数;doublefabs(double):绝对值函数;double pow(double x, double y):返回x y;exp(double x):返回e x。

答案选择A选项。

2.[单选题]有以下程序段 char name[20]; int num; scanf("name=%s num=%d",name;&num); 当执行上述程序段,并从键盘输入:name=Lili num=1001后,name的值为( )。

A)LiliB)name=LiliC)Lili num=D)name=Lili num=1001答案:A解析:3.[单选题]有如下程序段Int *p,a=10,b=1;P=&a; a=*p+b;执行该程序段后,a的值为______。

A)12B)11C)10D)编译出错答案:B解析:4.[单选题]设变量x和y均己正确定义并赋值。

以下if语句中,在编译时将产生错误信息的是( )A)if(x++);B)if(x>y&&y!=0);C)if(x>0)x--else x++D)if(y<0){;}else x++答案:C解析:else y++;else x++;5.[单选题]C语句中,至少执行一次循环体的语句是( )A)for语句B)do~while语句解析:6.[单选题]设x、y均为float型变量,则以下不合法的赋值语句是()。

考研c语言试题及答案

考研c语言试题及答案

考研c语言试题及答案一、单项选择题(每题2分,共20分)1. 在C语言中,以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A2. 下列关于C语言函数的描述中,错误的是?A. 函数可以没有返回值B. 函数可以有多个返回值C. 函数可以嵌套定义D. 函数可以递归调用答案:C3. 在C语言中,以下哪个运算符用于取地址?A. *B. &C. %D. #答案:B4. 下列哪个选项不是C语言中的合法变量名?A. _nameB. 2namesC. nameD. name2答案:B5. 在C语言中,以下哪个选项是正确的字符串字面量?A. "Hello"B. 'Hello'C. "HelloD. 'Hello'答案:A6. 在C语言中,以下哪个选项是正确的文件包含指令?A. #include <stdio>B. #include "stdio.h"C. #include <stdio.h>D. #include "stdio"答案:C7. 下列关于C语言数组的描述中,错误的是?A. 数组可以是多维的B. 数组的索引从0开始C. 数组的大小在声明时确定D. 数组可以动态分配答案:D8. 在C语言中,以下哪个选项是正确的指针声明?A. int *p;B. int *p[];C. int (*p)[10];D. int (*p)();答案:A9. 下列关于C语言指针的描述中,错误的是?A. 指针可以指向一个变量B. 指针可以指向一个数组C. 指针可以指向一个函数D. 指针可以存储一个值答案:D10. 在C语言中,以下哪个选项是正确的宏定义?A. #define PI 3.14159B. #define PI 3.14159C. #define PI 3.14159D. #define PI 3.14159答案:A二、填空题(每题2分,共10分)1. 在C语言中,使用____关键字可以定义一个枚举类型。

第5章 函数与宏思考与练习题答案

第5章 函数与宏思考与练习题答案

第5章函数与宏1、请给出函数概念的基本描述。

答:函数就是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值。

2、什么叫函数原型?答:函数原型是指由函数定义中抽取出来的能代表函数应用特征的部分,包括函数的数据类型、函数名称、形式参数说明。

3、什么叫函数的实参?什么叫函数的形参?答:实参是在调用函数过程中传递给被调用函数的参数;形参是被调用函数接受调用函数传递过来的数据的参数。

4、请说出函数参数为一般变量的复制传递方式、地址传递方式和引用方式的异同点。

答:复制传递方式是实参的数据拷贝给了形参变量,实参和形参是具有相同数据类型但存储空间是不同的两组空间。

在复制传递方式下,被调用函数里对形参的操作不能改变实参的内容。

地址传递方式和复制传递方式正好相反,用函数的参数本身传给被调用函数。

被调用函数中对形参的操作将直接改变实参的值。

调用函数将实参的地址传送给被调用函数,被调用函数对该地址的目标操作即对实参本身的操作。

按地址传递,实参为变量的地址,而形参为同类型的指针。

引用方式和地址传递方式的效果一样,但引用更直接、更方便。

按引用传递,实参为变量,形参为同类型的引用。

采用引用方式实参和形参使用的是相同的内存空间,只是名称不同而已。

5、数组在函数间传递形式有哪些?并给以比较和解释。

答:数组在函数间的传递形式有复制传递方式、地址传递方式、引用方式和全局数组传递方式。

函数与函数之间数组的复制传递方式是调用函数将实参数组传递给被调用函数形参,形参接收是实参的地址。

函数与函数之间数组的地址传递方式是将调用函数中的实参数组的起始地址传递给被调用函数的指针变量形参。

被调用函数中对形参地址的目标操作,相当于对实参本身的操作,将直接改变实参数组的值。

地址传递方式,实参应该为数组的指针,而形参应为同类型的指针变量。

另外,数组的地址传递方式不仅要把实参数组的指针作为参数传递给函数,同时还需要传递数组的长度。

与引用方式不同的是被调用函数的形参应声明为数组同类型的指针变量。

第4章练习及答案

第4章练习及答案

第4章函数知识要点1.掌握C++中函数的定义、调用以及主调函数和被调函数之间的数据传递规则。

2.掌握函数的返回值和它的类型。

3.理解函数递归调用的过程,掌握简单的递归算法。

4.了解内联函数的概念和文件包含和条件编译。

一、选择题(1)关于函数的调用下面不正确的是()。

A.由于程序总是从主函数开始,所以函数的调用总是主函数调用其他函数B.除主函数外,函数的调用可以在任意函数之间进行,只要有需要C.除主函数外,一个函数可以自己调用自己D.函数返回时可以不必带返回值,这时函数在定义时其类型应用void表示答案:A(2) 关于函数的声明和定义正确的是()。

A.函数的声明是必须的,只有这样才能保证编译系统对调用表达式和函数之间的参数进行检测,以确保参数的传递正确B.函数的定义和声明可以合二为一,可以只有函数定义即可C.函数在声明时,其参数标识符可省略,但参数的类型、个数与顺序不能省略D.一个函数可在其他函数中被调用,它在定义时也可以在其他函数内定义答案:C(3)如果一个函数无返回值,定义时它的函数类型应是()。

A.任意 B.int C.void D.无答案:C(4)关于函数返回值的的描述正确的是()。

A.函数返回表达式的类型一定与函数的类型相同B.函数返回值的类型决定了返回值表达式的类型C.当函数类型与返回值表达式类型不同,将对返回值表达式的值进行类型转换D.函数返回值类型就是返回值表达式类型答案:C(5)在参数传递过程中,对形参和实参的要求是()。

A.函数定义时,形参一直占用存储空间B.实参可以是常量、变量或表达式C.形参可以是常量、变量或表达式D.形参和实参类型和个数都可以不同答案:B(6)下列各类变量,哪个不是局部变量()。

A.register型变量 B.外部static变量C.auto型变量 D.函数形参答案:B(7)对于一个功能不太复杂,并且要求加快执行速度,选用()合适。

A.内联函数 B.重载函数 C.递归调用 D.嵌套调用答案:A(8)预处理命令以()开头。

宏定义——精选推荐

宏定义——精选推荐

宏定义⼀、选择题*1、宏定义#define PI 31.14159中,宏名PI代替________A、单精度B、双精度C、常量D、字符串2、设有以下宏定义:#define N 3#define Y(n) ((N+1)*n)执⾏语句z=2*(N+Y(5+1));后,z的值为________A、出错B、42C、48D、543、以下说法正确的是________A、#define和printf都是C语句B、#define 是C语句,⽽printf不是C、printf是C语句,但#define不是D、#define 和printf都不是C语句4、宏定义的宏展开是在_________阶段完成的。

A、第⼀遍编译B、第⼆遍编译C、程序执⾏D、预编译5、编译预处理命令以________结尾。

A、;B、.C、\D、回车⼆、填空题*1、程序中有定义:#define S(r) r/rint a=4,b=3,area;则表达式area=S(a+b)的值为_________2、若有以下宏定义:#define STR “%d,%c”#define A 97已知字符a的ASCII码值为97,则语句printf(STR,A,A+2);的输出结果为_________3、以下程序的输出结果是_________#define M(x,y,z) x*y+zmain(){ int a=1,b=2,c=3;printf(“%d\n”,M(a+b,b+c,c+a));}4、下列程序执⾏后的输出结果是_________#define MA(x) x*(x-1)main(){ int a=1,b=2;pirntf(“%d\n”,MA(1+a+b));}5、C语⾔中,宏定义有效范围从定义处开始,到本源程序结束处中⽌。

但可以⽤_________来提前解除宏定义的作⽤。

C语言简答题答案

C语言简答题答案

C语言变量的存储特性可分四类:自动型(auto)、静态型(static)、外部型(extern)和寄存器型(register)。

Auto的特点:1.[auto] 类型标识符变量列表;常常可以缺省auto。

2.函数内定义的局部变量、函数的形式参数和函数体内分程序的局部变量。

3.随函数的调用而存在,随函数的返回而消失,它们在一次调用结束到下一次调用开始之间不再占有存储空间。

4.作用域局限于所定义的函数,其生存期就是函数的生存期,在一个函数中引用另一个函数的自动型变量的值是错误的。

Static的特点:1.局部变量在函数内定义2.局部变量的生存期虽然为整个源程序,但是其作用域仍域自变量相同3.允许对构造类静态局部量赋初值4.对基本类型的静态局部变量若在说明未赋予初值,则系统自动赋予0值Extern的特点:1.外部型变量和全局变量是对同一类变量的两种不同角度的提法。

全局变量是从它的作用域提出,外部变量是从它的存储方式提出的,表示它的生存期。

2.当一个源程序由若干个源文件组成时,在一个源文件中定义的外部变量在其他的源文件中也有效Rejister的特点:1. C语言提供的rejister说明符,能够让程序员去指定某个局部自动变量存放在寄存器里而不是内存中,以提高程序的变形速度。

2.现在计算机的运行速度越来越快,性能越来越高,优化的编译系统能够识别频繁使用的变量,自动把其放在寄存器中,而不需要程序员指定。

文件的概念从广义上来说,文件是指信息输入和输出的对象文件类型1.根据文件的保存内容,分为程序文件和数据文件2.根据文件袋存储形式,分为文本文件和二进制文件3.根据文件是否使用缓冲区,分为标准文件和非标准文件4.根据文件的存取方式,分为顺序存取文件和直接存取文件文件指针系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名,文件位置),这些信息在C语言中保存在一个结构类型变量中,该结构体类型是由系统定义的文件的操作顺序1.定义文件指针2.打开文件,判断是否成功打开,若打开失败,程序退出运行状态3.对文件进行读写操作4.关闭文件宏定义C语言源程序中允许用一个标识符来表示一个较复杂的字符串,称为“宏”,被定义为“宏”的标识符称为“宏名”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

函数调用、宏定义一.选择题(每题2分,共60分)1.有以下函数调用语句: Afun(rec1,rec2+rec3,(rec4,rec5);该函数调用语句中,含有的实参个数是。

A)3 B) 4 C)5 D)有语法错2.有以下程序:Dint fun(int a,int b){ return(a+b);}main(){int x=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%d\n”,r);}程序运行后的输出结果是。

A) 12 B)13 C) 14 D)153.有以下程序:Cint abc(int u,int v)main(){int a=24,b=16,c;c=abc(a,b);printf(“%d\n”,c);}int abc(int u,int v){int w;while(v) {w=u;u=v;v=w;}return u;}程序运行后的输出结果是。

A) 6 B)7 C) 8 D) 94.以下程序的输出结果是。

D#difine M(x,y,z) x*y+zmain(){int a=1,b=2,c=3;printf(“%d\n”,M(a+b,b+c,c+a));}A) 19 B) 17 C) 15 D)125.有如下程序#define N 2#define M N+1#define NUM 2*M+1main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该循环中的for循环执行的次数是。

BA) 5 B) 6 C) 7 D) 86.若已经定义的函数有返回值,则以下关于该函数调用的叙述中错误的是。

DA) 函数调用可以作为独立的语句存在B) 函数调用可以作为一个函数的实参C)函数调用可以出现在表达式中D)函数调用可以作为一个函数的形参7. 有以下程序int f(int a){ return a%2; }main(){ int s[8]={1,3,5,2,4,6},i,d=0;for (i=0;f(s);i++) d+=s;printf("%d\n",d);}程序运行后的输出结果是。

AA)9 B)11 C)19 D)218. 以下叙述中正确的是。

AA)局部变量说明为static存储数,其生存期将得到延长B)全局变量说明为static存储类,其作用域将被扩大C)任何存储类的变量在未赋初值时,其值都是不确定的D)形参可以使用的存储类说明符与局部变量完全相同有以下函数定义:void fun(int n,double x) {………..}若以下选项中的变量都已经正确定义并赋值,则对函数fun的正确调用语句是。

CA) fun(int y,double m) B) k=fun(10,12,5) C) fun(x,n) D)void fun(n,x)9. 当调用函数时,实参是一个数组名,则向函数传送的是。

BA) 数组的长度B) 数组的首地址C) 数组每一个元素的地址D) 数组每个元素中的值10.以下只有在使用时才为该类型变量分配内存的存储类说明是。

BA) auto和static B) auto和registerC) register和static D) extern和register11. 以下程序的输出结果是。

Dint f(){ static int i=0;int s=1;s+=i; i++;return s;}main(){ int i,a=0;for(i=0;i<5;i++) a+=f();printf("%d\n",a);}A)20 B) 24 C) 25 D) 1512. 若有以下程序#includevoid f(int n);main(){ void f(int n);f(5);}void f(int n){ printf("%d\n",n); }则以下叙述中不正确的是。

CA) 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB) 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数fC) 对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明D) 函数f无返回值,所以可用void将其类型定义为无值型13. 在C语言中,形参的缺省存储类是。

AA)auto B) register C) static D) extern14. 以下程序的输出结果是。

Af(int b[],int m,int n){ int i,s=0;for(i=m;ireturn s;}main(){int x,a[]={1,2,3,4,5,6,7,8,9};x=f(a,3,7);printf("%d\n",x);}A)10 B) 18 C) 8 D) 1515.以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序void sort(int a[],int n){int i,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;}}main(){int aa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(&aa[3],5);for(i=0;i<10;i++) printf("%d,",aa[i]);printf("\n");程序运行后的输出结果是______。

CA) 1,2,3,4,5,6,7,8,9,10, B) 10,9,8,7,6,5,4,3,2,1,C) 1,2,3,8,7,6,5,4,9,10, D) 1,2,10,9,8,7,6,5,4,3,16.有以下程序int f(int n){if (n==1) return 1;else return f(n-1)+1;}main(){int i,j=0;for(i=1;i<3;i++) j+=f(i);printf("%d\n",j);}程序运行后的输出结果是______。

BA) 4 B) 3 C) 2 D) 117.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是______。

BA)void B) int C) float D) double18.设有以下宏定义:#define N 3#define Y(n) ( (N+1)*n)则执行语句:z=2 * (N+Y(5+1));后,z的值为。

CA) 出错B) 42 C) 48 D)5419.有以下程序viod fun (int a,int b,int c){ a=456; b=567; c=678;}main(){ int x=10, y=20,z=30;fun (x,y,z);printf("%d,/%d\n",c,d);}输出结果是。

AA)30,20,10 B)10,20,30 C)456,567,678 D)678,567,45620.有以下程序#include "stdio.h"int abc(int u,int v);main (){ int a=24,b=16,c;c=abc(a,b);printf('%d\n",c);}int abc(int u,int v){ int w;while(v){ w=u%v; u=v; v=w }return u;}输出结果是。

CA) 6 B) 7 C) 8 D) 9 21.设有以下函数:f(int a){ int b=0;static int c=3;b++; c++;return(a+b+c))22.如果在下面的程序中调用该函数,则输出结果是。

Amain(){int a=2,I;for(i=0;i<3;i++) printf(“%d\n”,f(a));A) 7 B)7 c) 7 D) 78 9 10 79 11 13 7 23.以下关于宏替换的叙述不正确的是。

DA ) 宏替换只是字符替换B)宏名无类型C)宏替换不占用运行时间D)宏替换不占用编译时间24.程序中定义以下宏#define S(a,b) a*b若定义int area; 且令area=S(3+1,3+4),则变量area的值为。

AA)10 B)12 C)21 D)2825、有以下程序void f(int v , int w){ int t;t=v;v=w;w=t;}main( ){ int x=1,y=3,z=2;if(x>y) f(x,y);else if(y>z) f(y,z);else f(x,z);printf("%d,%d,%d\n",x,y,z);}执行后输出结果是。

CA)1,2,3 B)3,1,2 C)1,3,2 D)2,3,126、有以下程序void f(int a[],int i,int j){ int t;if(i<j){ t=a[i]; a[i]=a[j];a[j]=t;f(a,i+1,j-1);}}main( ){ int i,aa[5]={1,2,3,4,5};f(aa,0,4);for(i=0;i<5;i++) printf("%d,",aa[i]);printf("\n");}执行后输出结果是。

AA)5,4,3,2,1, B)5,2,3,4,1, C)1,2,3,4,5, D)1,2,3,4,5,27、有以下程序void swap1(int c[]){ int t;t=c[0];c[0]=c[1];c[1]=t;}void swap2(int c0,int c1){ int t;t=c0;c0=c1;c1=t;}main( ){ int a[2]={3,5},b[2]={3,5};swap1(a); swap2(b[0],b[1]);printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);}其输出结果是。

BA)5 3 5 3 B) 5 3 3 5 C)3 5 3 5 D)3 5 5 328.以下程序的输出结果是。

Cfun(int x,int y,int z){z=x*x+y*y;}main(){int a=31;fun(5,2,a);printf(“%d”,a);}A) 0 B) 29 C) 31 D) 无定值29.下列叙述中正确的是。

DA)C语言编译时不检查语法B) C语言的子程序有过程和函数两种C) C语言的函数可以嵌套使用D) C语言的所有函数都是外部函数30.下列程序执行后的输出结果是B#define MA(x) x*(x-1)main(){int a=1,b=2;printf(“%d\n”,MA(1+a+b));}A) 6 B)8 C) 10 D)12 (33)有以下程序# define f(x) (x*x)main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %d\n",i1,i2);}程序运行后的输出结果是A)64, 28 B)4, 4 C)4, 3 D)64, 64二.填空题(每空2分,共20分)1.以下程序的输出结果是.(1) 8,17#include int fun(int x,int y){ static int m=0,i=2;i+=m+1;m=i+x+y;return m}main(){ int j=4,m=1,k;k=fun(j,m); printf("%d,",k);k=fun(j,m); printf("%d\n",k);}3.设有如下宏定义#define MYSWAP(z,x,y) {z=x; x=y; y=z;}以下程序段通过宏调用实现变量a、b内容交换,请填空。

相关文档
最新文档