1、1. 单项选择题(1)在 C 语言程序中,下列叙述正确的是 。A. 函数的定义可以嵌套,但函数的调用不可以嵌套B. 函数的定义不可以嵌套,但函数的调用可以嵌套C. 函数的定义和调用都可以嵌套D. 函数的定义和调用均不可以嵌套【答】B(2)在 C 语言程序中,下列叙述错误的是 。A. 形参是局部变量B. 不同的函数中,可以使用相同名称的变量C. 在一个函数的内部,可以在复合语句中定义变量D. main()函数中定义的变量在整个文件或者程序中都有效【答】D(3)在 C 语言程序中,下列叙述正确的是 。A. 实参和对应的形参各占用独立的存储单元B. 实参和对应的形参共占用一个存储单元C. 形参是虚拟
2、的,不占用存储单元D. 只有当实参和对应的形参同名时才共占用存储单元【答】A(4)在 C 语言程序中,下列叙述正确的是 。A. 实参可以是常量、变量或表达式B. 实参可以是任意类型C. 形参可以是常量、变量或表达式D. 形参与对应的实参类型要求可以不一致【答】A(5)在 C 语言程序中,简单变量做实参时,它和对应形参之间的数据传递方式是 。A. 地址传递B. 单向值传递C. 由用户指定传递方式D. 由实参传给形参,再由形参传回给实参【答】C 语言函数调用时,只有单向的值传递,即实参将值传递给形参,传址调用也是一种单向的值传递,它是通过间接方式达到将形参回传给实参的。本题答案为 B。(6)下列关
3、于 return 语句说法正确的是 。A. 必须在每个函数中都出现B. 只能在除 main()函数之外的函数中出现一次C. 可以在同一个函数中多次出现D. 在 main()函数和其他函数中都可以出现【答】C(7)C 语言中规定函数的返回值的类型是由 。A. return 语句中的表达式类型所决定B. 调用该函数时的主调用函数类型所决定C. 调用该函数时系统临时决定D. 在定义该函数时所指定的函数类型所决定【答】D(8)如果要限制一个变量只能被本源文件中的函数使用,必须通过 来实现。A. 静态内部变量 B. 外部变量声明C. 静态外部变量 D. 内部变量声明【答】C(9)以下叙述中错误的是_。A
4、. 在 C 语言中,调用函数中,只能把实参的值传送给形参,形参的值不能传送给实参B. 在 C 语言的函数中,最好使用外部变量C. 在 C 语言中,形参只是局限于所在的函数D. 在 C 语言中,默认的函数存储类型为 extern【答】B(10)在一个源文件中定义的外部变量的作用域为 。A. 本文件的全部范围B. 本程序的全部范围C. 本函数的全部范围D. 从定义该变量的位置开始至本文件结束【答】D(11)若有以下函数调用语句:fun(a+b,(x,y),fun(n+k,d,(a,b);在此函数调用语句中实参的个数是 。A. 3 B. 4 C. 5 D. 6【答】A(12)以下程序的运行结果是 。
5、#include int fun(int m)int n=0;static int t=3;m=t+;n+;return(m);main()int m=2,i,j;for (i=0;ivoid fun(int *s,int *z)static int j=3;*z=sj;j-;main()int arr=1,2,3,4,i,p=0;for (i=0;iint func(int a,int b);main()int k=4,m=1,p;p=func(k,m);printf(“%d,“,p);p=func(k,m);printf(“%dn“,p);int func(int a,int b)stat
6、ic int m=0,i=2;i+=m+1; m=i+a+b;return(m);A. 8,17 B. 8,16 C. 8,20 D. 8,8【答】A(15)以下程序的运行结果是 。#include int fun(int a);main()int a=2,i;for (i=0;ivoid 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,%dn“,x,y);A. 12.2 B. 不确定 C. 5,25 D. 1,12【答】C(17)以下程
7、序的运行结果是 。#include int fun(int k);int w=3;main()int w=10;printf(“%dn“,fun(5)*w);int fun(int k)if(k=0) return w;return(fun(k-1)*k);A. 360 B. 3600 C. 1080 D. 1200【答】B2. 填空题(1)运行以下程序,输入 100,其输出结果是 。#include void func(int n)int i;for (i=n-1;i=1;i-)n=n+i;printf(“n=%dn“,n);main()int n;printf(“输入 n:“);scanf
8、(“%d“,func(n);printf(“n=%dn“,n);【答】main()中的 n 与 func 函数中的 n 都是局部变量,前者作为实参,后者作为形参,两者之间是传值调用。程序输出为:5050100(2)以下程序的运行结果是 。#include main()int swap();extern int a,b;a=3;b=10;swap();printf(“a=%d,b=%dn“,a,b);int a,b;swap()int temp;temp=a;a=b;b=temp;【答】a=10,b=3(3)以下程序的运行结果是 。#include void sub(float x,float
9、*y,float *z)*y=*y-1.0;*z=*z+x;main()float a=2.5,b=9.0,*pa,*pb;pa=pb=sub(b-a,pa,pa);printf(“%gn“,a);【答】8(4)以下程序的运行结果是 。#include int f(int b,int n)int i,r=1;for (i=0;ivoid func(int b);main()int a=5,6,7,8,i;func(a);for (i=0;iint func(int a,int b)int c;c=a+b;return c;main()int x=6,y=7,z=8,r;r=func(x-,y+
10、,x+y),z-);printf(“%dn“,r);【答】执行 func(x-,y+,x+y),z-)语句时,函数中的实参从右向左求值,先计算 z-返回 8,此时z=7,再计算(x-,y+,x+y),该逗号表达式从左向右执行,先计算 x-,x=6,再求 y+,y=8,最后计算并返回 x+y=13。这个调用函数语句变为 r=func(13,8)。程序输出为:21。(7)以下程序的运行结果是 。#include #include int fact()static int i=5;if (i=0) return 1;else i-;return (i+1)*fact();main()printf(“
11、fact=%dn“,fact(); 【答】函数 fact()中的 i 是一个静态变量,fact 又是一个递归函数。程序输出为: fact=120。(8)以下程序的运行结果是 。#include void func(int *s)static int j=0;dosj+=sj+1;while (+jvoid invert(int a,int n);main()int a10=0,1,2,3,4,5,6,7,8,9,i;invert(a,10);for (i=0;ivoid invert(int *s,int i,int j);VC+6.0VC+6.0main()int a10=0,1,2,3,4
12、,5,6,7,8,9,i;invert(a,0,9);for (i=0;i#include /*包含 abs()函数原型*/int func(int num)int s=0;num=abs(num);dos+=num%10;num/=10; while(num);return(s);main()int n;printf(“输入一个整数:“);scanf(“%d“,printf(“结 果:%dn“,func(n);(3)编写一个程序,验证哥德巴赫猜想:任一个不小于 6 的偶数可以表示为两个素数之和,例如:8=3+5,10=5+5,12=5+7,VC+6.0【解】设计一个函数 isprime(n)
13、,用于判断正整数 n 是否为素数。对于 x,从 i=3 开始找到 i=x/2,若其中有一个数 i,使 i 和 x-i 均为素数,则找到了解。程序如下:/*文件名:exci7_3.cpp*/#include #include int isprime(int n) /*判断 n 是否为素数*/int b=1,i;for (i=2;i#define Max 100void fun(int a,int n)VC+6.0VC+6.0int i=0,j=n-1,temp;while (i=0) j-;if (ivoid func(int m,int n)if (m=n) printf(“%d“,m);re
14、turn;else printf(“%d“,m);func(m+1,n);printf(“%d“,m);main()int n,i,j;f(m,i)=输出m若m=i输出m;f(m+1,i);输出m;其他情况f(n)=1若n=1n*n+f(n-1)其他情况VC+6.0VC+6.0printf(“输入 n:“);scanf(“%d“,if (n1 char *p=s,temp;for (len=0;*p!=0;p+,len+);for (i=0,j=len-1;i0) t=n%b;if (t=10)si+=t-10+A;elseVC+6.0si+=t+0;n=n/b;if (sign %s(%d
15、进制)n“,n,str,base); 程序运行结果:输入整数和基:1056 16转换结果:数 1056(10 进制) 420(16 进制)(9)编写一个程序,从键盘输入一串字符,逆序输出。要求采用递归函数实现。【解】程序如下:/*文件名:exci7_9.cpp*/#include void rev();main()rev();putchar(n);void rev()char c;c=getchar();if (c!=n)rev();putchar(c);(10)编写一个程序,对给定的整数数组 R 采用冒泡排序法进行从小到大的排序,要求将冒泡排序过程设计成一个函数。VC+6.0【解】程序如下:
16、/*文件名:exci7_10.cpp*/#include #define N 10void bubblesort(int R,int n);main()int R=6,3,9,8,1,5,4,10,2,7;int i;printf(“排序前:“);for (i=0;i=i;j-)if (Rj+1#define N 10void insertsort(int R,int n);VC+6.0VC+6.0main()int R=6,3,9,8,1,5,4,10,2,7;int i;printf(“排序前:“);for (i=0;i=0);Rj+1=tmp;(12)编写一个程序,对给定的整数数组 R
17、采用直接选择排序法进行从小到大的排序,要求将直接选择排序过程设计成一个函数。【解】程序如下:/*文件名:exci7_12.cpp*/#include #define N 10void selectsort(int R,int n);main()int R=6,3,9,8,1,5,4,10,2,7;int i;printf(“排序前:“);for (i=0;i#define N 10void partsort(int a,int n,int *x,int *y);main()int a=6,3,9,8,1,5,4,10,2,7;int x,y;partsort(a,N,printf(“最大值:%
18、d,次大值:%dn“,x,y);void partsort(int a,int n,int *x,int *y)int i,j,tmp,exchange;for (i=0;i=i;j-) if (aj+1aj)tmp=aj+1;VC+6.0aj+1=aj;aj=tmp;exchange=1;*x=a0;*y=a1;(14)编写一个程序,采用第 6 章中介绍的三种排序法将如下 10 种语言名称(用字符串数组 language 存放这 10 种语言名称)按词典顺序排序:English,Chinese,Russian,Japanese,Spanish,Italian,French,Finnish,D
19、anish,Greek【解】采用冒泡排序法排序的程序如下:/*文件名:exci7_14_1.cpp*/#include #include #define N 10void bubblesort(char a12,int n);main()char language12=“English“,“Chinese“,“Russian“,“Japanese“,“Spanish“,“Italian“,“French“,“Finnish“,“Danish“,“Greek“;int i;printf(“排序前:n“);for (i=0;i=i;j-) if (strcmp(aj+1,aj)#include #
20、define N 10void insertsort(char a12,int n);main()char language12=“English“,“Chinese“,“Russian“,“Japanese“,“Spanish“,“Italian“,“French“,“Finnish“,“Danish“,“Greek“;int i;printf(“排序前:n“);for (i=0;i=0);strcpy(Rj+1,tmp);采用直接选择排序法排序的程序如下:/*文件名:exci7_14_3.cpp*/#include #include #define N 10void selectsort(
21、char a12,int n);main()char language12=“English“,“Chinese“,“Russian“,“Japanese“,“Spanish“,“Italian“,“French“,“Finnish“,“Danish“,“Greek“;int i;printf(“排序前:n“);for (i=0;iN;i+)printf(“%12s “,languagei);if (i=4)printf(“n“);printf(“n“);selectsort(language,N);printf(“排序后:n“);for (i=0;iN;i+)printf(“%12s “,languagei);if (i=4)printf(“n“);printf(“n“);VC+6.0void selectsort(char R12,int n)int i,j,k;char tmp12;for (i=0;in-1;i+)k=i;for (j=i+1;jn;j+)if (strcmp(Rj,Rk)0)k=j;if (k!=i)strcpy(tmp,Ri);strcpy(Ri,Rk);strcpy(Rk,tmp);