函数调用与宏定义巩固题
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语言题库(模拟题)

模拟一字符串"\\\'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章 补充练习

第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)

{ 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语言程序设计:函数的定义及调用单元测试与答案

一、单选题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语言应用考试题及答案详解一、选择题(每题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

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语言中的基本语法是使用`#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语言中的宏定义。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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内容交换,请填空。