c语言第8章函数习题
- 格式:doc
- 大小:29.50 KB
- 文档页数:10
第六~第八章基本概念练习题第6章数组一、选择题。
1. 以下对一维数组a的正确定义是:A)char a(10);B) int a[];C)int k=5,a[k];D)char a[3]={‘a’,’b’,’c’};2.以下能对一维数组a进行初始化的语句是: ( )A. int a[5]=(0,1,2,3,4,)B. int a(5)={}C. int a[3]={0,1,2}D. int a{5}={10*1};3.在C语言中对一维整型数组的正确定义为。
A)int a(10); B)int n=10,a[n];C)int n;a[n]; D)#define N 10int a[N];4. 若二维数组a有m列,则在a[i][j]之前的元素个数为A. j*m+iB. i*m+jC. i*m+j-1D. i*m+j+1*5. 下列说法中错误的是A 构成数组的所有元素的数据类型必须是相同的B 用指针法引用数组元素允许数组元素的下标越界C 一维数组元素的下标依次是1、2、3……·D 定义数组时的长度可以是整型常量表达式6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是A) 3 B) 6 C) 10 D) 207.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( )A. 2B. 3C. 4D.无确定值8.以下定义语句中,错误的是( )A) int a[]={1,2}; B) char *a;C) char s[10]=“test”; D) int n=5,a[n];9.下面程序段的输出结果是: ( )int i;、int x[3][3]={1,2,3,4,5,6,7,8,9};for (i=0;i<3;i++)printf("%d ",x[i][2-i]);A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9二.分析题。
编译预处理习题一.单项选择题1.在宏定义#define A 3.897678中,宏名A代替一个()。
A)单精度数 B)双精度数 C)常量 D)字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理()。
A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是()。
A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是A)#define和printf都是C语句 B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C语句6.#define A 3.897678#include <stdio.h>main( ){ printf(“A=%f ”,A);}程序运行结果为()。
A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b#define LJ(a,b) (a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是()。
A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=218.有以下程序# 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, 3D)64, 649.以下程序的输出结果是#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));}A) 19 B) 17 C) 15 D) 1210.有以下程序#define N 5#define M1 N*3#define M2 N*2main(){ int i;i=M1+M2; printf(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A) 5 B) 6C) 7 D) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。
第1部分课后练习题第1章C语言概述一、选择题1.一个C程序的执行是从。
A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束2.以下叙述正确的是。
.在C程序中,main函数必须位于程序的最前面A)C程序的每行中只能写一条语句B)C语言本身没有输入输出语句C)在对一个C程序进行编译的过程中,可发现注释中的拼写错误3.以下叙述不正确的是。
A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数D)在C程序中,注释说明只能位于一条语句的后面4.C语言规定:在一个源程序中,main函数的位置。
A) 必须在最开始 B) 必须在系统调用的库函数的后面C) 可以任意 D) 必须在最后5.一个C语言程序是由。
A) 一个主程序和若干子程序组成 B) 函数组成C) 若干过程组成 D) 若干子程序组成6.C语言中的语句需要符号作为结尾。
A) : B) ; C)。
D) //7.C 语言程序中可以对程序进行注释,注释部分用符号_____括起来。
A)‘{‘ 和’}’ B)‘[‘和’]’C)“/*”和”*/” D)“*/”和”/*”8.C语言中注释的位置。
A) 必须在程序的最开始 B) 必须在程序的结尾C) 可以在程序的任何位置 D) 不可以写到main函数里面9.C语言程序能够在不同的操作系统下面运行,这说明c语言具有很好的。
1A) 适应性 B)移植性 C)兼容性 D) 操作性10.C语言经过编译后生成的文件的后缀是。
A).c B) .cpp C) .exe D) .obj11.C语言编译程序的首要工作是。
A) 检查C语言程序的语法错误 B) 检查C语言程序的逻辑错误C)检查程序的完整性 D) 同时检查语法和逻辑错误12. C语言经过链接后生成的文件的后缀是。
一、单项选择题题目1标准输出设备显示器的文件流标识符是()。
a. stdinb. stdoutc. stderrd. stdio题目2表示文件结束符的符号常量EOF的值为()。
a. 0b. -1c. 1d. 127题目3假定一个磁盘数据文件占用n个字节的存储空间,则按字节进行编址的范围是()。
a. 1˜(n-1)b. 0˜(n-1)c. 0˜nd. 1˜n题目4在C语言中,为只写操作打开一个文本文件的方式为()。
b. "w"c. "r"d. "a"题目5在C语言中,文本文件的打开方式共有()。
a. 6b. 9c. 12d. 3题目6在C语言中,为读和写操作打开一个二进制文件,若文件不存在则自动建立空文件的打开方式为()。
a. "ab+"b. "w+"c. "rb+"d. "wb+"题目7从一个文本文件中读取以换行符结束的一个字符串的系统函数为()。
a. fgets()b. fputc()d. fputs()题目8向一个文本文件中写入一个字符的系统函数为()。
a. fputs()b. fputc()c. fgetc()d. fgets()题目9向一个二进制文件中写入数据的系统函数为()。
a. fputc()b. fwrite()c. fread()d. fputs()题目10从一个二进制文件中读取数据的系统函数为fread(),它的参数有()。
a. 2个b. 4个c. 3个d. 5个二、判断题题目11一个磁盘数据文件的文件名由文件主名和扩展名所组成,其中间用圆点分开。
对错题目12当向字符文件输出一个换行符时,实际将输出的是回车符或换行符。
对错题目13C语言系统中提供一个用来描述文件属性的类型标识符为FILE。
对错题目14在数据文件打开方式字符串中,字符r、w和a具有确定的含义,分别代表读、写和追加方式。
1、int *p 的含义是(B)A.p是一个指针, 用来存放一个整型数B.p是一个指针, 用来存放一个整型数据在内存中的地址C.p是一个整型变量D. 以上都不对2、以下函数用来求出两整数之和,并通过形参将结果传回,请填空。
void func(int x,int y, ___int*____ z){ *z=x+y; }3、有如下程序段(B)int *p,a=10,b=1;p=&a; a=*p + b;执行该程序段后,a的值是A. 12B. 11C. 10D. 编译出错4、若己定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是( C)A) p+1B) a+1C) a++D) ++p5、以下程序运行后的输出结果是(A)void main( ){ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p;for(p=a;p<a+10;p++) printf("%d,",*p);}A)1,2,3,4,5,6,7,8,9,0,B)2,3,4,5,6,7,8,9,10,1,C)0,1,2,3,4,5,6,7,8,9,D)1,1,1,1,1,1,1,1,1,1,6、下面程序的输出是(D)void prtv(int *x)printf("%d\n", ++*x);}main(){ int a=25;prtv(&a);}A) 23 B) 24 C) 25D) 267、有以下函数(B)char fun(char *p){ return p; }该函数的返回值是A) 无确切的值B) 形参p中存放的地址值C) 一个临时存储单元的地址D) 形参p自身的地址值8、下列程序的输出结果是(7)#include<stdio.h>void fun (int *p1, int *p2){ if (*p1>*p2) printf ("%d\n",*p1);else printf ("%d\n",*p2);}void main ( ){ int a=3,b=7;fun (&a, &b);}9、下列程序的运行结果是(B)void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf("%d %d", a, b);}A) 6 3 B) 3 6 C) 编译出错D) 0 010、以下程序调用findmax函数返回数组中的最大值(B)findmax(int *a,int n){ int *p,*s;for(p=a,s=a; p-a<n; p++)if ( ) s=p;return(*s);}main(){ int x[5]={12,21,13,6,18};printf("%d\n",findmax(x,5));}在下划线处应填入的是(B)A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s11、下列程序段的输出结果是(A)void fun(int *x, int *y){ printf("%d %d", *x, *y); *x=3; *y=4;}main(){ int x=1,y=2;fun(&y,&x);printf("%d %d",x, y);}A) 2 1 4 3 B) 2 1 3 4 C) 1 2 1 2 D) 2 1 1 212、以下程序执行后输出的结果是___84________。
第六部分函数一、单项选择题1.C语言中的函数返回值的类型是由(D)决定A.return语句中的表达式B.调用函数的主调函数C.调用函数时临时D.定义函数时所指定的函数类型2.下面不正确的描述是(B)。
A.调用函数时,实参可以是表达式B.调用函数时,实参和形参可以共用内存单元C.调用函数时,将形参分配内存单元D.调用函数时,实参与形参的类型必须一致3.在C语言中,调用一个函数时,实参变量和形参变量之间的数据传递是(D)A.地址传递B.值传递C.由实参传递给形参,并由形参传回给实参D.由用户指定传递方式4.下面的函数调用语句中含有(A)个实参inta,b,c;intsum(intx1,intx2);……total=sum((a,b),c);A.2B.3C.4 D.55.在C语言中(C)A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义和调用均不可以嵌套C.函数的定义不可以嵌套,但是函数的调用可以嵌套D.函数的定义和调用均可以嵌套6.关于C语言中的return语句正确的是(C)A.只能在主函数中出现B.在每个函数中都必须出现C.可以在一个函数中出现多次D.只能在除主函数之外的函数中出现7.两个形参中,第一个形参为指针类型、第二个形参为整型,则对函数形参的说明有错误的是(D)A.inta(floatx[],intn)B.inta(float*x,intn)C.inta(floatx[10],intn)D.inta(floatx,intn)8.在C语言中,函数的数据类型是指(A)A.函数返回值的数据类型B.函数形参的数据类型C.调用该函数时的实参的数据类型D.任意指定的数据类型9.已知如下定义的函数:fun1(a){printf("\n%d",a);}则该函数的数据类型是(C)A.与参数a的类型相同B.void型C.整型D.无法确定10.定义一个函数实现交换x和y的值,并将结果正确返回。
C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#includevoidmain(){inta,b,num1,num2,temp;printf(\请输入两个正整数:\\n\canf(\if(num1temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(\它们的最大公约数为:%d\\n\printf(\它们的最小公倍数为:%d\\n\}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解:#includevoidmain(){charc;intletter=0,pace=0,degit=0,other=0;printf(\请输入一行字符:\\n\while((c=getchar())!='\\n'){if(c>='a'&&c<='z'||c>'A'&&c<='Z')letter++;eleif(c=='')pace++;eleif(c>='0'&&c<='9')digit++;eleother++;}printf(\其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\\n\digit,other);}6.3求(n)=a+aa+aaa++aaa之值,其中a是一个数字,n表示a的位数。
解:voidmain(){inta,n,count=1,n=0,tn=0;printf(\请输入a和n的值:\\n\canf(\printf(\while(count<=n){tn=tn+a;n=n+tn;a=a某10;++count;}printf(\\\n\}6.4求(即1+2!+3!+4!++20!)voidmain(){floatn,=0,t=1;for(n=1;n<=20;n++){t=t某n;=+t;}printf(\\\n\}阶乘利用递归,再求和:#includeuingnamepacetd;longFunc(intn){ if(1==n)returnn;if(n>1)returnn某Func(n-1);}main(){long=0;inti=1;while(i<=6){=+Func(i);i++;}cout<6.5求voidmain(){intk,N1=100,N2=50,N3=10;float1=0.0,2=0.0,3=0.0;for(k=1;k<=N1;k++)/某计算1到100的和某/{1=1+k;}for(k=1;k<=N2;k++)/某计算1到50各数平方和某/{2=2+k某k;}for(k=1;k<=N3;k++)/某计算1到10各数倒数之和某/{3=3+1.0/k;}printf(\总和=%8.2f\\n\}已通过intmain(){intk=1,i=11,j=51;float=0.0;while(k<=10){=+k+k某k+1.0/k;while(k==10&&i<=50){=+i+i某i;while(i=50&&j<=100){ =+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。
第8章函数习题A卷1. 单项选择题(1)C 语言总是从函数开始执行。
AA. mainB. 处于最前的C.处于最后的D. 随机选一个(2)函数在定义时,省略函数类型说明符,则该函数值的类型为。
AA. intB. floatC. longD. double(2)以下函数,真正地没有返回值。
BA. int a(){int a=2;return (a);}B. void b(){printf("c");}C. int a(){int a=2;return a;}D. 以上都是(3)在 C 语言中,有关函数的说法,以下正确的是。
AA. 函数可嵌套定义,也可嵌套调用B. 函数可嵌套定义,但不可嵌套调用C. 函数不可嵌套定义,但可嵌套调用D. 函数不可嵌套定义,也不可嵌套调用(4)以下函数调用语句中,含有实参的个数为。
Cfun((2,3),(4,5+6,7));A. 1B. 2C. 5D. 6(5)函数调用可以在。
DA. 函数表达式中B. 函数语句中C. 函数参数中D. 以上都是(6)被调函数返回给主调函数的值称为。
CA. 形参B. 实参C. 返回值D. 参数(7) ,可以不进行函数类型说明。
DA. 被调函数的返回值是整型或字符型时B. 被调函数的定义在主调函数定义之前时C. 在所有函数定义前,已在函数外预先说明了被调函数类型D. 以上都是(8)被调函数通过语句,将值返回给主调函数。
DA. ifB. forC. whileD. return(9)被调函数调用结束后,返回到。
DA.主调函数中该被调函数调用语句处B.主函数中该被调函数调用语句处C.主调函数中该被调函数调用语句的前一语句D.主调函数中该被调函数调用语句的后一语句(10)以下对 C语言函数的有关描述中,正确的是。
AA. 在 C 中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B. C函数既可以嵌套定义又可递归调用C. 函数必须有返回值,否则不能使用函数D. C程序中有调用关系的所有函数必须放在同一个源程序文件中(11)C 语言中函数的隐含存储类型是。
CA. autoB. staticC. externD. 无存储类型(12)能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是。
AA. return 这两个数B. 形参用两个元素的数组C. 形参用两个这种数据类型的指针D. 用两个全局变量(13)C语言可执行程序从什么地方开始执行 ( )。
CA. 程序中第一条可执行语句B. 程序中第一个函数C. 程序中的main函数D. 包含文件中的第一个函数(14)有一个函数原型如下所示,则该函数的返回类型为( ) 。
Cabc(float x,float y);A. voidB. doubleC. intD. float2. 填空题(1) 变量的作用域主要取决于变量,变量的生存期既取决于变量,又取决于变量。
所处的位置,所处的位置,存储类型(2) 说明变量时,若省略存储类型符,系统默认其为存储类别,该存储类别的类型符为:。
动态,auto(3) 静态型局部变量的作用域是 ,生存期是。
它所在的局部,整个程序(4) 函数中的形参和调用时的实参都是数组名时,传递方式为,都是变量时,传递方式为。
址传递,值传递(5) 函数的形式参数的作用域为,全局的外部变量和函数体内定义的局部变量重名时, _________变量优先。
该函数中,局部(6) 若自定义函数要求返回一个值,则应在该函数体中有一条语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符。
return,void(7) 若函数的形式参数是指针类型,则实参可以是或。
指针,数组名(8) 函数的参数为 char *类型时,形参与实参结合的传递方式为。
址传递(9) 函数的实参为常量时,形参与实参结合的传递方式为。
值传递(10) 下面这个函数的功能是求两个整数的积,并通过形参传回结果,请填空。
int int int* *resultvoid mul(___x,___y,___result){___=x*y;}3. 判断题(× )(1) 函数说明指的是在程序中设定一个函数模块。
(√ )(2) 形参只有在被调用时才分配存储空间。
(× )(3) 在C的函数中,最好使用全局变量。
(× )(4) 在调用函数时,实参传值给形参,调用结束时,形参值传给实参。
(√ )(5) 所有函数定义都是并行的,相互独立的。
(× )(6) 函数的隐含存储类型是extern。
(× )(7) 形参可以是常量、变量或表达式。
(× )(8) 函数调用可以作为一个函数的形参。
(√ )(9) C语言规定,实参应与其对应的形参类型一致。
(× )(10) 定义函数时,形参的类型说明可以放在函数体内。
4. 程序填空题(1) 对数组按值从大到小的顺序排序后输出,请填空。
#include <stdio.h>void main(){float a[7]={2,6,3,8,3,12,9};int i ;void sort(float*,int);;for(i=0;i<7;i++) printf("%f ",a[i]);printf("\n");}void sort( ){int i,j,k; float t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if( ) k=j;{ t=*(p+i); *(p+i)=*(p+k); *(p+k)=t; }}}sort(a,7) float* p,int n *(p+k)<*(p+j) if(k!=i)(2) 下列函数在 n 个元素的一维数组中,找出最大值、最小值并传送到调用函数,请填空。
#include <stdio.h>void find(float *p, int max, int min, int n){int k;*max=*p;for(k=1;k<n;k++){t=*(p+k);if( ) *max=t; if(t<*min) *min=t;}}float t; *min=*p; *max<tB卷5. 写出下列程序运行结果(1)main(){int i=1,p;p=fun(i,i+1);printf("%d\n",p);}int fun(int a,int b){int f;if(a>b)f=1;else if(a==b)f=0;elsef=-1;return f;}-1(2)键盘输入 abcdef<CR>#include <stdio.h>void fun( ){char c ;if((c=getchar( ))!='\n')fun( ) ;putchar(c);}void main( ){ fun( ); }fedcba(3)#include <stdio.h>#define C 5int x=1,y=C;void main( ){int x;x=y++; printf("%d %d\n", x,y);if(x>4) { int x ; x=++y; printf("%d %d\n",x,y) ; } x+=y--;printf("%d %d\n",x,y);}5 67 712 6(4)#include <stdio.h>int c , a=4 ;func(int a , int b){ c=a*b ; a=b-1 ; b++ ; return (a+b+1) ; } void main( ){int b=2 , p=0 ; c=1 ;p=func(b , a) ;printf("%d,%d,%d,%d\n", a,b,c,p) ;}4,2,8,9(5)unsigned fun6(unsigned num){unsigned k=1;do { k*=num%10; num/=10; }while(num);return k;}void main( ){unsigned n=26;printf("%d\n", fun6(n));}12(6)#include <stdio.h>int max(int a,int b);main(){int x,y,z,t,m;scanf("%d,%d,%d",&x,&y,&z);t=max(x,y);m=max(t,z);printf("%d",m);}int max(int a,int b){if(a>b)return(a);elsereturn(b);}运行时若输入:10,15,9 则输出:___ 15运行时若输入:300,129,300 则输出:___ 300(7)#include <stdio.h>long sum(int a,int b);long factorial(int n);main(){int n1,n2;long a;scanf("%d,%d",&n1,&n2);a=sum(n1,n2);printf("a=%1d",a);}long sum(int a,int b){long c1,c2;c1=factorial(a);c2=factorial(b);return(c1+c2);}long factorial(int n){long rtn=1;int i;for(i=1;i<=n;i++)rtn*=i;return(rtn);}运行时若输入:2,3 则输出:___ 8运行时若输入:0, 5 则输出:___ 121(8)#include <stdio.h>int s();int x,y;main(){int n;x=1;y=2;n=s();printf("x=%d,y=%d,n=%d",x,y,n);}int s(){int z;x=3;y=4;z=x+y;return(z);}程序运行后输出:___ 3,4,7(9) 以下程序的输出结果是a=___,b=___,c=___。
#include <stdio.h>int func(int a,int *p);void main(){int a=1,b=2,c;c=func(a,&b);b=func(c,&a);a=func(b,&c);printf("a=%d,b=%d,c=%d",a,b,c);}int func(int a,int *p){a++;*p=a+2;return(*p+a);}36 16 19。