文档库 最新最全的文档下载
当前位置:文档库 › C语言经典例题填空选择编程

C语言经典例题填空选择编程

C语言经典例题填空选择编程
C语言经典例题填空选择编程

第一章C语言概述

一、选择题:

1、一个C程序的执行是从( A )。

A本程序的main函数开始,到main函数结束

B本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

C本程序的main函数开始,到本程序文件的最后一个函数结束

D本程序文件的第一个函数开始,到本程序main函数结束

2、在 C 语言中,每个语句必须以(D )结束。

A. 回车符

B. 冒号

C. 逗号

D. 分号

3、C 语言规定:在一个源程序中,main函数的位置( C )。

A. 必须在最开始

B. 必须在系统调用的库函数的后面

C. 可以任意

D. 必须在最后

4、一个C 语言程序是由(B )。

A. 一个主程序和若干子程序组成

B. 函数组成

C. 若干过程组成

D. 若干子程序组成

5、下列说法中错误的是( D )。

A. 主函数可以分为两个部分:主函数说明部分和主函数体

B. 主函数可以调用任何非主函数的其他函数

C. 任何非主函数可以调用其他任何非主函数

D. 程序可以从任何非主函数开始执行

6、用C 语言编写的源文件经过编译,若没有产生编译错误,则系统将( B )。

A. 生成可执行目标文件

B. 生成目标文件

C. 输出运行结果

D. 自动保存源文件

二、填空题:

1、C 语言只有32 个关键字和9 种控制语句。

2、每个源程序有且只有一个main 函数,系统总是从该函数开始执行C语言程序。

3、C 语言程序的注释可以出现在程序中的任何地方,它总是以\* 符号作为开始标记,

以*/ 符号作为结束标记。

4、C 语言中,输入操作是由库函数scanf 完成的,输出操作是由库函

数printf 完成的。

5、系统默认的C 语言源程序文件的扩展名是.c ,经过编译后生成的目标文件的扩展名是.obj ,经过连接后生成的可执行文件的扩展名是.exe 。

6、C 语言的标识符只能由字母、数字和下划线三种字符组成。

第三章数据类型、运算符和表达式

一、选择题:

A. 160.

B. 0.12

C. 2e4.2

D. 0.0 2、以下选项中,( D )是不正确的 C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" 3、 在 C 语言中,字符型数据在计算机内存中,以字符的( C )形式存储。 A. 原码 B. 反码 C. ASCII 码 D. BCD 码

4、若x 、i 、j 和k 都是int 型变量,则计算下面表达式后,x 的值是( C )。 x=(i=4,j=16,k=32)

A. 4

B. 16

C.32

D.52

5、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为( B )。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算

6、若有代数式bc

ae

3 ,则不正确的C 语言表达式是( C )。

A.a/b/c*e*3

B. 3*a*e/b/c

C.3*a*e/b*c

D. a*e/c/b*3 7、表达式!x||a==b 等效于( D )。

A. !((x||a)==b)

B. !(x||y)==b

C. !(x||(a==b))

D. (!x)||(a==b) 8、设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是( A )。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 9、 设有语句 int a=3;,则执行了语句 a+=a-=a*=a;后,变量 a 的值是( B )。 A. 3 B. 0 C. 9 D. -12

10、在以下一组运算符中,优先级最低的运算符是( D )。 A. * B. != C. + D. =

11、设整型变量 i 值为2,表达式(++i)+(++i)+(++i)的结果是( B )。 A. 6 B. 12 C. 15 D. 表达式出错

12、若已定义 x 和 y 为double 类型,则表达式 x=1,y=x+3/2 的值是( C )。 A. 1 B. 2 C. 2.0 D. 2.5 13、sizeof (double)的结果值是( A )。 A. 8 B. 4 C. 2 D. 出错

14、设a=1,b=2,c=3,d=4,则表达式:a

15、设a 为整型变量,不能正确表达数学关系:1010 && a<15 D. !(a<=10) && !(a>=15)

16、设 f 是实型变量,下列表达式中不是逗号表达式的是( D )。

A. f= 3.2, 1.0

B. f>0, f<10

C. f=2.0, f>0

D. f=(3.2, 1.0) 17、 表达式18/4*sqrt(4.0)/8值的数据类型是( C )。 A. int B. float C. double D. 不确定

18、已知字母A 的ASCII 码为十进制数65,且c2为字符型,则执行语句 C2=’A ’+’6’-‘3’;后c2中的值是( B )。 A. D B. 68 C. 不确定的值 D. C 19、以下用户标识符中,合法的是( B )。

A. int

B. nit

C. 123

D. a+b

20、C 语言中,要求运算对象只能为整数的运算符是( A )。 A. % B. / C. > D. *

21、若有说明语句:char c='\72';则变量c 在内存占用的字节数是( A )。

22、字符串"ABC"在内存占用的字节数是( B )。

A. 3

B. 4

C. 6

D. 8

23、要为字符型变量 a赋初值,下列语句中哪一个是正确的( B )。

A. char a="3";

B. char a=’3’;

C. char a=%;

D. char a=*;

24、下列不正确的转义字符是( C )。

A. \\

B. \'

C. 074

D. \0

二、填空题:

1、C 语言中的逻辑值“真”是用 1 表示的,逻辑值“假”是用 0 表示的。

2、若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为 0 。

3、设 c='w',a=1,b=2,d=-5, 则表达式 'x'+1>c, 'y'!=c+2, -a-5*b<=d+1, b==a=2的值分别为 1 、 0 、 1 、 1 。

4、设 float x=2.5,y=4.7; int a=7;,表达式 x+a%3*(int)(x+y)%2/4的值为 2.5 。

5、判断变量 a、b 的值均不为 0 的逻辑表达式为a!=0&&b!=0 。

6、求解赋值表达式 a=(b=10)%(c=6),表达式值、a、b、c 的值依次为 4,4,10,6 。

7、求解逗号表达式 x=a=3,6*a 后,表达式值、x、a 的值依次为18,3,3 。

8、数学式a/(b*c)的 C 语言表达式 a/b/c 。

三、编程题:

1、设长方形的高为 1.5,宽为 2.3,编程求该长方形的周长和面积。

2、编写一个程序,将大写字母 A转换为小写字母 a。

1.

main()

{float x=1.5,y=2.3;printf(“area is %6.2f\n”,x*y);}

2.

main()

{char c=’A’;printf(“%d”,c+32);}

顺序结构答案

一、单项选择题

AADAB CCBBD

二、程序改错题

1.正确的程序为

# include "stdio.h"

main( )

{ char c ;

getchar(c);

putchar('\007') ; /*鸣笛*/

putchar( );

}

2.正确的程序为

main( )

scanf("%d,%d",&a,&b);

s=a*b; l=2*(a+b);

printf("l=%d,s=%d\n", l ,s);

}

三、写出程序运行结果

1. 68

2. x=4

y=11

四、编程题

1. main( )

{ int a,b,c,sum;

float ave;

scanf(“%d%d%d”,&a,&b,&c);

sum=a+b+c; ave=sum/3.0;

printf(“sum=%d,ave=%.2f\n”,sum,ave);

}

五、选做题

1.void main( )

{ float a,b,temp;

printf("input a and b:");

scanf("%d,%d",&a ,&b);

temp = a; a = b; b = temp;

printf("a=%d , b=%d\n", a , b);

}

选择结构答案

一、单项选择题

1.B

2.A

3.D

4.C

5.D

6.B

7.C

二、填空题

1. 5 5 4

5 5 4

3 3 4

2. 4 0

3. VeryGood

Good

VeryGood

Fail

Pass

Pass

三、阅读程序,写出运行结果

2. -1

3. 3

4. 6

5. 1

四、程序设计题

1. main( )

{ int a,b,x,y;

scanf(“%d %d”,&a,&b);

x=a*a+b*b;

if(x>100)

{y=x/100; printf(“%d”,y);}

else printf(“%d”,a+b);

}

2. if结构

main()

{ float t;char c;

printf(“input score,max as 100:\n”); scanf(“%f”,&t);

if(t>=90) ch=?A?;

else if(t>=80) ch=?B?;

else if(t>=70) ch=?C?;

else if(t>=60) ch=?D?;

else ch=?E?;

printf(“Grade=%d\n”,ch);

}

switch结构

main()

{float t;char c;

printf(“input score,max as 100:\n”); scanf(“%f”,&t);

switch(t/10)

{ case 10:

case 9: ch=?A?;break;

case 8: ch=?B?;break;

case 7: ch=?C?;break;

case 6: ch=?D?;break;

case 5: ch=?E?;

}

printf(“Grade=%d\n”,ch);

}

五、选做题

1. main()

scanf(“%d%d%d”,&a,&b,&c);

if(a

if(a

if(b

printf(“%d,%d,%d\n”,a,b,c);

}

2. switch((s>0)&&(s<=10))

{case 1: switch ((s>=3)&&(s<=6))

{ case 1: x=2; break;

case 0: switch (s>1)||(s>8))

{ case 1: x=3; break;

case 0: x=1; break;

}

} break;

case 0: x=0; break;

}

循环结构答案一、选择题

1.B 2.A 3.B 4.D 5.C 6.B 7.A 8.A 9.D 10.D

二、填空题

1. x1 x1/2-2

2. ch=getchar() ch>=’A’&&ch<=’Z’

3. s=s+t*i t=-t

三、阅读下列程序,写出程序运行的输出结果

1.852

2. 8921

3. 5

4. SUM=2468

四、程序改错

1.main()

{ int i=200,n=0; /*n用来记录每行已打印数的个数*/

while(i<=300)

{if(i%7==0)

{ //break;

printf("%5d",i); n=n+1;

if(n==5) /*满5个换行*/

{ printf("\n"); n=0; }

}

i++; } }

2). main( )

{ int i,s=0,t=1;

for(i=1;i<=7;i++)

{ t=t*i; s=s+t; }

printf("sum=%d\n",s);

}

五、程序设计题

1. main()

{int x,g,s,b;

for(x=100;x<1000;x++)

{ b=x/100;s=x%100/10;g=x%10;

if((g*g*g+s*s*s+b*b*b)==x)

printf(“%d\n”,x); }

}

2. main()

{ int i,s=0,f=1;

for(i=2;i<80;i++)

{s=s+f*(i-1)/i; f=-f;}

printf(s=%f\n”,s);

}

六、选做题

1. main()

{ float s=0,m=2.0,n=1.0,p;

int i;

for(i=1;i<=20;i++)

{s=s+m/n; p=m; m=m+n; n=p;}

printf(s=%f\n”,s);

}

2.#include

main( )

{ int i,j,k,s=1;

for(i=1;i<=20;i++)

for(j=1;j<=50;j++)

{ k=100-i*5-j*2;

if(k>=0)

{ printf(“%2d %2d %2d”,i,j,k);

s=s+1;

if(s%5==0) printf(“\n”);

}

}

}

第7章数组习题

A卷

1. 单项选择题

(1) int a[4]={5,3,8,9};其中a[3]的值为( )。D

A. 5

B. 3

C. 8

D. 9

(2) 以下4 个字符串函数中,( )所在的头文件与其他3 个不同。A

A. gets

B. strcpy

C. strlen

D. strcmp

(3) 以下4 个数组定义中,( )是错误的。D

A. int a[7];

B. #define N 5 long b[N];

C. char c[5];

D. int n,d[n];

(4) 对字符数组进行初始化,( )形式是错误。B

A. char c1[ ]={'1', '2', '3'};

B. char c2[ ]=123;

C. char c3[ ]={ '1', '2', '3', '\0'};

D. char c4[ ]="123";

(5) 在数组中,数组名表示( )。A

A. 数组第1 个元素的首地址

B.数组第2 个元素的首地址

C. 数组所有元素的首地址

D.数组最后1 个元素的首地址

(6) 若有以下数组说明,则数值最小的和最大的元素下标分别是( )。B

int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12};

A. 1,12

B. 0,11

C. 1,11

D. 0,12

(7) 若有以下说明,则数值为4 的表达式是( )。D

int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; char c=?a?, d, g ;

A. a[g-c]

B. a[4]

C. a['d'-'c']

D. a['d'-c]

(8) 设有定义:char s[12] = "string" ; 则printf( "%d\n",strlen(s)); 的输出是( )。A

A. 6

B. 7

C. 11

D. 12

(9) 设有定义:char s[12] = "string"; 则printf("%d\n ", sizeof(s)); 的输出是( )。D

A. 6

B. 7

C. 11

D. 12

(10) 合法的数组定义是( )。A

A. char a[ ]= "string " ;

B. int a[5] ={0,1,2,3,4,5};

C. char a= "string " ;

D. char a[ ]={0,1,2,3,4,5}

(11) 合法的数组定义是( )。B

A. int a[3][ ]={0,1,2,3,4,5};

B. int a[ ][3] ={0,1,2,3,4};

C. int a[2][3]={0,1,2,3,4,5,6};

D. int a[2][3]={0,1,2,3,4,5,};

(12) 下列语句中,正确的是( )。D

A. char a[3][ ]={'abc', '1'};

B. char a[ ][3] ={'abc', '1'};

C. char a[3][ ]={'a', "1"};

D. char a[ ][3] ={ "a", "1"};

(13) 下列定义的字符数组中,输出printf("%s\n", str[2]) ;的输出是( )。C

static str[3][20] ={ "basic", "foxpro", "windows"};

A. basic

B. foxpro

C. windows

D. 输出语句出错

(14) 下列各语句定义了数组,其中哪一个是不正确的( )。C

A. char a[3][10]={"China","American","Asia"};

B. int x[2][2]={1,2,3,4};

C. float x[2][ ]={1,2,4,6,8,10};

D. int m[][3]={1,2,3,4,5,6};

(15) 数组定义为int a[3][2]={1,2,3,4,5,6},值为6的数组元素是( )。B

A. a[3][2]

B. a[2][1]

C. a[1][2]

D. a[2][3]

(16) 下面的程序中哪一行有错误( )。D

#include

main()

{

float array[5]={0.0}; //第A行

int i;

for(i=0;i<5;i++)

scanf("%f",&array[i]);

for(i=1;i<5;i++)

array[0]=array[0]+array[i];//第B行

printf("%f\n",array[0]); //第C行

}

A. 第A行

B. 第B行

C. 第C行

D. 没有

(17) 下面哪一项是不正确的字符串赋值或赋初值的方式( )。C

A. char *str; str="string";

B. char str[7]={'s','t','r','i','n','g'};

C. char str1[10];str1="string";

D. char str1[]="string",str2[]="12345678";

(18) 若有以下说明和语句,则输出结果是哪一项( )。C

(strlen(s)为求字符串s的长度的函数)

char s[12]="a book!";

printf("%d",strlen(s));

A. 12

B. 8

C. 7

D. 11

(19) 若有以下说明和语句,则输出结果是( )。B

(strlen(s)为求字符串s的长度的函数)

char sp[]="\t\v\\\0will\n";

printf("%d",strlen(sp));

A. 14

B. 3

C. 9

D. 字符串中有非法字符

(20) 若有以下说明和语句,则输出结果是( )。C

char str[]="\"c:\\abc.dat\"";

printf("%s",str);

A. 字符串中有非法字符

B. \"c:\\abc.dat\"

C. "c:\abc.dat"

D. "c:\\abc.dat"

2. 填空题

(1) C 语言中,数组的各元素必须具有相同的,元素的下标下限为,下标必须是正整数、0、或者。但在程序执行过程中,不检查元素下标是否。

数据类型,0,符号常量,越界

(2) C 语言中,数组在内存中占一片的存储区,由代表它的首地址。数组名是一个常量,不能对它进行赋值运算。连续,数组名,地址

(3) 执行static int b[5], a[ ][3] ={1,2,3,4,5,6}; 后,b[4] = ,a[1][2] = 。0,6

(4) 设有定义语句static int a[3][4] ={{1},{2},{3}}; 则a[1][0]值为,a[1][1] 值为,a[2][1]的值为。2,0,0

(5) 如定义语句为char a[ ]= "windows",b[ ]= "95";,语句printf("%s",strcat(a,b));的输出结果为。Windows95

(6) 根据以下说明,写出正确的说明语句:men是一个有10个整型元素的数组。

step是一个有4个实型元素的数组,元素值分别为1.9, -2.33, 0, 20.6。

grid是一个二维数组,共有4行,10列整型元素。

int mesh[10]; float step[4] = {1.9, -2.33, 0, 20.6}; int grid[4][10];

(7) array是一个一维整形数组,有10个元素,前6个元素的初值是9,4,7,49,32,-5,正确的说明语句为:

个元素表示为:。用赋值语句把39存入第一个元素表示为:。把第六个和第四个元素之和存入第一个元素表示为:。

int array[10] = {9,4,7,49,32,-5}; 0 9 scanf("%d",&array[1]); array[0] = 39; array[0]= array[5]+array[3];

(8) 写出以下初始化数组的长度:①int chn[3];数组chn的长度为___。②float isa[]={1.0,2.0,3.0,4.0,5.0};

数组isa的长度为___。③int doom[8];数组doom的长度为___。④float pci[4][2];数组pci的长度为___。

⑤int ast[3][3];数组ast的长度为___。⑥int att[3][4];数组att的长度为___。

⑦float dell[][3]={{1,4,7},{2,5},{3,6,9}};数组dell的长度为___。 6 20 16 32 18 24 36

(9) 若有以下整型的a数组,数组元素和它们得值如下所示:

数组元素: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

元素的值: 9 4 12 8 2 10 7 5 1 3

①请写出对该数组的说明,并赋以上初值。

②该数组的最小下标值为___,最大下标值为___。

③写出下面各式的值:a[a[9]]的值为___ ;a[a[4]+a[8]]的值为___。

int a[10]={9,4,12,8,2,10,7,5,1,3}; 0 9 8 8

(10) 字符串"ab\n\\012/\\\""的长度为___。10

3. 判断题

(×)(1) C允许对数组的大小作动态定义,即可用变量定义数组的大小。

(×)(2) 字符数组不要求它的最后一个字符为…\0?,甚至可以不包含…\0?。

(×)(3) 数组定义int a[10]; 也可以写成int a(10); 。

(√)(4) 在对全部数组元素赋初值时,可以不指定数组长度。

(×)(5) 定义s为5×6(5行6列)的数组可写成float a[5,6];

(√)(6) 数组定义int a[10]; 表示数组名为a,此数组有10个元素。

(×)(7) 数组定义int a[10]; 表示数组名为a,此数组有10个元素,第10个元素为a[10]。

(√)(8) static char c[]={“a book”}; 与static char c[]=“a book”; 等价。

(×)(9) static char c[]={'a' ,' ','b','o','o','k','\0'};与static char c[]={'a' ,' ' ,'b','o','o','k'}; 等价。

(×)(10) 设已有说明:static char c1[10],c2[10]; 下面程序片段是合法的。c1={“book”}; c2=c1;

4. 程序填空题

(1) 输入20 个数,输出它们的平均值,输出与平均值之差的绝对值为最小的数组元素。请填空。

#include

void main( )

{

float a[20],pjz=0,s,t; int i,k;

for(i=0;i<20;i++) pjz+=a[i];

s=fabs(a[0]-pjz);

for(i=1;i<20;i++)

if(fabs(a[i]-pjz)

{

s=fabs(a[i]-pjz); t=a[i];

}

}

for(i=0;i<20;i++) scanf(“%f”,&a[i]); pjz/=20; printf(“%f,%f\n”,piz,t);

(2) 以下程序以每行10个数据的形式输出a 数组,请填空。

void main( )

{

int a[50],i;

printf("输入50个整数:");

for(i=0; i<50; i++) scanf( "%d", );

for(i=1; i<=50; i++)

{ if( )

printf( "%3d\n" , ) ;

printf( "%3d",a[i-1]);

}

}

&a[i] i%10==0 a[i-1]

(3) 下面程序的功能是输出数组s 中最大元素的下标,请填空。

void main( )

{

int k, p;

int s[ ]={1,-9,7,2,-10,3};

for(p=0,k=p; p<6; p++)

if(s[p]>s[k]) ;

printf("%d\n" ,k);

}

k=p

(4) 这个程序输入了20个数存放在一个数组中,并且输出其中最大者与最小者、20个数的和及它们的平均值。请填空。

void main()

{

char array ;

int max,min,average,sum;

int i;

for(i=0;i< ;i++)

{

printf("请输入第%d个数:",i+1);

scanf("%d", );

}

max=array[0];

min=array[0];

for(i=0;i<= ;i++)

{

if(max

if(min>array[i])

sum= ;

}

average = ;

printf("20个数中最大值是%d,",max);

printf("最小值是%d,",min);

printf("和是%d,",sum);

printf("平均值是%d.\n",average);

}

[20]

20

&array[i]

19

max=array[i];

min=array[i];

sum+array[i]

sum/20

B卷5. 阅读程序,分析程序的功能。

(1)

#include

#include

void main( )

{

char s[80];

int i ;

for(i=0; i<80; i++)

{

s[i]=getchar( );

if(s[i]=='\n') break;

}

s[i]='\0'; i=0;

while(s[i]) putchar(s[i++]);

putchar(…\n?);

}

从键盘输入一个字符串,并逐一输出

(2)

#include

#include

void main( )

{

char str[10][80], c[80];

int i;

for(i=0; i<10; i++) gets(str[i]);

strcpy(c, str[0]) ;

for(i=1; i<10; i++) if(strlen(c)

printf( "%s\n", c);

printf( "%d\n", strlen (c));

}

从键盘输入若干字符串,找到其中最长的一个输出及它的长度

(3)

#include

#include

void main( )

{

char a[10][80], c[80];

int i, j, k;

for(i=0; i<10; i++) gets(a[i]);

for(i=0; i<9; i++)

{

k=i ;

for(j=i+1; j<10; j++)

if(strcmp (a [j], a[k])<0) k=j;

if(k!=i )

{strcpy(c,a[i]) ; strcpy(a[i], a[k]); strcpy(a[k],c);}

// 字符串交换

}

for(i=0; i<10; i++) puts (a[i]);

}

从键盘输入若干字符串,并将它们按大到小顺序排好再输出

(4) 阅读程序,写出运行结果

#include

void main( )

{

int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j;

for(i=0;i<6;i++)

{

for(j=0;j<6;j++) if(a[i]==b[j])break;

if(j<6) printf("%d ",a[i]);

}

printf("\n");

}

4 2

5 27 16

(5) 阅读程序,写出运行结果。

#include

void main( )

{

char a[8],temp; int j,k;

for(j=0;j<7;j++) a[j]='a'+j; a[7]='\0';

for(j=0;j<3;j++)

{

temp=a[6];

for(k=6;k>0;k--) a[k]=a[k-1];

a[0]=temp;

printf("%s\n",a);

}

}

gabcdef

fgabcde

efgabcd

(6) 阅读下列程序,写出程序运行的输出结果。

#include

#include

void main( )

{

char str1[ ]="*******";

for(int i=0;i<4;i++)

{

printf("%s\n",str1);

str1[i]=' ';

str1[strlen(str1)-1]='\0';

}

}

*******

*****

***

*

(7) 该程序的运行结果是: min= ,m= ,n= 。

void main()

{

float array[4][3]={

{3.4,-5.6,56.7},

{56.8,999.,-.0123},

{0.45,-5.77,123.5},

{43.4,0,111.2}

};

int i,j;

int min;

int m,n;

min = array[0][0];

m=0;n=0;

for(i=0;i<3;i++)

for(j=0;j<4;j++)

if(min > array[i][j])

{

min = array[i][j];

m=i;n=j;

}

printf("min=%d,m=%d,n=%d\n",min,m,n);

}

-5.77 2 1

(8) 写出下面这个程序的输出结果:

void main()

{

char str[]="ABCDEFGHIJKL";

printf("%s\n",str); 屏幕上显示

printf("%s\n",&str[4]); 屏幕上显示

str[2]=str[5];

printf("%s\n",str); 屏幕上显示

str[9]='\0';

printf("%s\n",str); 屏幕上显示

}

ABCDEFGHIJKL

EFGHIJKL

ABFDEFGHIJKL

ABFDEFGHI

(9) 读懂下面的程序并填空。

void main()

{

char str[80];

int i=0;

gets(str);

while(str[i]!=0)

{

if(str[i]>='a'&&str<='z')

str[i]-=32;

i++;

}

puts(str);

}

程序运行时如果输入upcase, 屏幕显示

程序运行时如果输入Aa1Bb2Cc3, 屏幕显示

UPCASE

AA1BB2CC

第8章函数习题

A卷

1. 单项选择题

(1)C 语言总是从函数开始执行。A

A. main

B. 处于最前的

C.处于最后的

D. 随机选一个

(2)函数在定义时,省略函数类型说明符,则该函数值的类型为。A

A. int

B. float

C. long

D. double

(2)以下函数,真正地没有返回值。B

A. int a(){int a=2;return (a);}

B. void b(){printf("c");}

C. int a(){int a=2;return a;}

D. 以上都是

(3)在C 语言中,有关函数的说法,以下正确的是。A

A. 函数可嵌套定义,也可嵌套调用

B. 函数可嵌套定义,但不可嵌套调用

C. 函数不可嵌套定义,但可嵌套调用

D. 函数不可嵌套定义,也不可嵌套调用

(4)以下函数调用语句中,含有实参的个数为。C

fun((2,3),(4,5+6,7));

A. 1

B. 2

C. 5

D. 6

(5)函数调用可以在。D

A. 函数表达式中

B. 函数语句中

C. 函数参数中

D. 以上都是

(6)被调函数返回给主调函数的值称为。C

A. 形参

B. 实参

C. 返回值

D. 参数

(7) ,可以不进行函数类型说明。D

A. 被调函数的返回值是整型或字符型时

B. 被调函数的定义在主调函数定义之前时

C. 在所有函数定义前,已在函数外预先说明了被调函数类型

D. 以上都是

(8)被调函数通过语句,将值返回给主调函数。D

A. if

B. for

C. while

D. return

(9)被调函数调用结束后,返回到。D

A.主调函数中该被调函数调用语句处

B.主函数中该被调函数调用语句处

C.主调函数中该被调函数调用语句的前一语句

D.主调函数中该被调函数调用语句的后一语句

(10)以下对C语言函数的有关描述中,正确的是。A

A. 在C 中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

B. C函数既可以嵌套定义又可递归调用

C. 函数必须有返回值,否则不能使用函数

D. C程序中有调用关系的所有函数必须放在同一个源程序文件中

(11)C 语言中函数的隐含存储类型是。C

A. auto

B. static

C. extern

D. 无存储类型

(12)能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是。A

A. return 这两个数

B. 形参用两个元素的数组

C. 形参用两个这种数据类型的指针

D. 用两个全局变量

(13)C语言可执行程序从什么地方开始执行( )。C

A. 程序中第一条可执行语句

B. 程序中第一个函数

C. 程序中的main函数

D. 包含文件中的第一个函数

(14)有一个函数原型如下所示,则该函数的返回类型为( ) 。C

abc(float x,float y);

A. void

B. double

C. int

D. float

2. 填空题

(1) 变量的作用域主要取决于变量,变量的生存期既取决于变量,又取决于变量。所处的位置,所处的位置,存储类型

(2) 说明变量时,若省略存储类型符,系统默认其为存储类别,该存储类别的类型符为:。动态,auto

(3) 静态型局部变量的作用域是,生存期是。它所在的局部,整个程序

(4) 函数中的形参和调用时的实参都是数组名时,传递方式为,都是变量时,传递方式为。址传递,值传递

(5) 函数的形式参数的作用域为,全局的外部变量和函数体内定义的局部变量重名时,_________变量优先。该函数中,局部

(6) 若自定义函数要求返回一个值,则应在该函数体中有一条语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符。return,void

(7) 若函数的形式参数是指针类型,则实参可以是或。指针,数组名

(8) 函数的参数为char *类型时,形参与实参结合的传递方式为。址传递

(9) 函数的实参为常量时,形参与实参结合的传递方式为。值传递

(10) 下面这个函数的功能是求两个整数的积,并通过形参传回结果,请填空。int int int* *result

void mul(___x,___y,___result)

{

___=x*y;

}

3. 判断题

(×)(1) 函数说明指的是在程序中设定一个函数模块。

(√)(2) 形参只有在被调用时才分配存储空间。

(×)(3) 在C的函数中,最好使用全局变量。

(×)(4) 在调用函数时,实参传值给形参,调用结束时,形参值传给实参。

(√)(5) 所有函数定义都是并行的,相互独立的。

(×)(6) 函数的隐含存储类型是extern。

(×)(7) 形参可以是常量、变量或表达式。

(×)(8) 函数调用可以作为一个函数的形参。

(√)(9) C语言规定,实参应与其对应的形参类型一致。

(×)(10) 定义函数时,形参的类型说明可以放在函数体内。

4. 程序填空题

(1) 对数组按值从大到小的顺序排序后输出,请填空。

#include

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

{

k=i;

for(j=i+1;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

void find(float *p, int max, int min, int n)

{

int k;

*max=*p;

for(k=1;k

{

t=*(p+k);

if( ) *max=t;

if(t<*min) *min=t;

}

}

float t; *min=*p; *max

B卷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;

else

f=-1;

return f;

}

-1

(2)键盘输入abcdef

#include

void fun( )

{

char c ;

if((c=getchar( ))!='\n')

fun( ) ;

putchar(c);

}

void main( )

{ fun( ); }

fedcba

(3)

#include

#define C 5

int 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 6

7 7

12 6

(4)

#include

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

int max(int a,int b);

main()

{

int x,y,z,t,m;

scanf("%d,%d,%d",&x,&y,&z);

相关文档