《高级语言程序设计试题三》 单项选择题(每题1分,共20分) 1、在一个被调用函数中,关于 return语句使用的描述,错误的是() A、被调用函数中可以不用 return语句 B、被调用函数中可以使用多个 return语句 C、被调用函数中,如果有返回值,就一定要有 return语句 D、被调用函数中,一个 return语句可返回多个值给调用函数 2、运算符>代表() A、大于 B、小于 C、右移D、左移 3、已知:inty;执行语句y=52;则变量y的结果是() A、2 C、2.5 D、2.0 4.能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是 A、a>=10ora<=0 B =0|a<=10 C、a>=l0&&a<=0D、a>=10‖a<=0 5.若有以下程序段: ntcl=1,c2=2,c3; c3=1.0/c2*c1 则执行后,c3中的值是 A、0 0.5 6.下列不属于字符型常量的是 B B 7.在C程序中,可以把整型数以二进制形式存放到文件中的函数是 A、 fprintf函数B、 fread函数C、 fwrite函数D、 fputc函数 8.下列二维数组的说明中,不正确的是 A、 float a[3*8]7-3] B、 float a[3}={0,1,8}; C、# define l3 D、nta[6][7 float a[L3 9、若对函数类型未加显示说明,则函数的隐含类型是() A、void B、 double C、int D、char 0、在传值调用中,要求( 、形参和实参类型任意,个数相等 B、实参和形参类型都完全一致,个数相等 C、实参和形参对应的类型一致,个数相等 D、实参和形参对应的类型一致,个数任意 11、在C语言的函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA, 则() A、称为函数的直接递归 B、称为函数的间接递归 C、称为函数的递归定义 D、C语言中不允许这样的递归形式 12、已知inta=3,*p=&a;则*p的值是() A、变量a的地址值B、无意义C、变量p的地址值 13、下列存储类标识符中,()的可见性与存在性不一致 A、外部类 B、自动类 C、静态类 D、寄存器类 14.以下程序运行后,输出结果是 func(int a, int b) i static int m=0, F2 H+=m+1 m=ita+b; return(m);)
《高级语言程序设计试题三》 一、单项选择题(每题 1 分,共 20 分) 1、在一个被调用函数中,关于 return 语句使用的描述,错误的是( ) A、被调用函数中可以不用 return 语句 B、被调用函数中可以使用多个 return 语句 C、被调用函数中,如果有返回值,就一定要有 return 语句 D、被调用函数中,一个 return 语句可返回多个值给调用函数 2、运算符>>代表( ) A、大于 B、小于 C、右移 D、左移 3、已知:int y;执行语句y=5/2;则变量y的结果是( ) A、2 B、-2 C、2.5 D、2.0 4.能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是 A、a>=10 or a<=0 B、 a>=0 | a<=10 C、 a>=10&&a<=0 D、 a>=10 || a<=0 5.若有以下程序段: int c1=1,c2=2,c3; c3=1.0/c2*c1; 则执行后,c3中的值是 A、0 B、0.5 C、1 D、2 6.下列不属于字符型常量的是 A、’A’ B、 “B” C、 ‘\117’ D、’\x93’ 7.在C程序中,可以把整型数以二进制形式存放到文件中的函数是 A、fprintf函数 B、fread函数 C、fwrite函数 D、fputc函数 8.下列二维数组的说明中,不正确的是 A、float a[3*8][7-3] B、float a[][3]={0,1,8}; C、#define L 3 D、int a[6],[7] float a[L][3] 9、若对函数类型未加显示说明,则函数的隐含类型是( ) A、void B、double C、int D、char 10、在传值调用中,要求( ) A、形参和实参类型任意,个数相等 B、实参和形参类型都完全一致,个数相等 C、实参和形参对应的类型一致,个数相等 D、实参和形参对应的类型一致,个数任意 11、在C语言的函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA, 则( ) A、称为函数的直接递归 B、称为函数的间接递归 C、称为函数的递归定义 D、C语言中不允许这样的递归形式 12、已知int a=3,*p=&a; 则*p的值是( ) A、变量a的地址值 B、无意义 C、变量p的地址值 D、3 13、下列存储类标识符中,( )的可见性与存在性不一致 A、外部类 B、自动类 C、静态类 D、寄存器类 14.以下程序运行后,输出结果是 func (int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return (m); }
maino i int k=4, m=l, p p=func(km); printf(“%d,”p); p=func(km) printf(“%dn”p) D、8,8 15.不能把字符串: Hello!赋给数组b的语句是 A、 char b[10J{‘H }; B、 char b[l0];b=”Helo! C、 char b[l0 strcpy(b,”hell!”) D、 char b[lOJ” hello!” 16.若有以下定义和语句,0≤i<10,则对数组元素地址的正确表示是 nta={1,2,3,4.5,6,78,90 B &p[ 17、已知:intx;则下面的说明指针变量pb的语句()是正确的 A、 int pb=&x,B、int*pb=x;C、int*pb=&x,D、*pb=*x; 18、说明语句“int*(*p)O;”的含义是() A、p是一个指向int型数组的指针 B、p是指针变量,它构成了指针数组 C、p是一个函数指针,该函数的返回值是一个整型 D、p是一个函数指针,该函数的返回值是一个指向整型的指针 19、已知学生记录描述为 struct student t int no char name 20 char sex struct f int year; int month int day: 设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是() A, year=1984; month=ll; day=ll B birth year=1984, birth month=ll; birth day=ll C. syear=1984; s month=ll; sday=ll D,s birth year=1984; s birth month=ll; s birth day=ll 20、已知: char s[4}=“12“;char*ptr;则执行以下语句后的输出为() ptr-sl; printf(“%cn”,*(ptr+1) A、字符‘2’B、字符‘1’C、字符“2’的地址D、不确定 、多项选择题(下列各题中,有一个或多个正确答案,多选或少选均不得分。每题2分,共10分) 以下变量名合法的是() D、123 E 2、已知: int a b:用语句 scanf(%d%d”,&a&b);输入ab的值时,能作为输入数据分隔符的是() A B、空格 C、回车 D、[TAB] 3、设有说明int(*pt)M,其中的标识符pt是() A、M个指向整型变量的指针 B、数组指针 C、具有M个指针元素的一维指针数组,每个元素都只能指向整型变量
main() { int k=4,m=1,p; p=func(k,m); printf(“%d,”,p); p=func(k,m);printf(“%d\n”,p); } A、 8,15 B、8,16 C、8,17 D、8,8 15.不能把字符串:Hello!赋给数组b的语句是 A、 char b[10]={‘H’,’e’,’l’,’l’,’o’,’!’,’\0’}; B、 char b[10]; b=”Hello!”; C、 char b[10]; strcpy(b,”hello!”); D、 char b[10]=”hello!”; 16.若有以下定义和语句,0≤i<10,则对数组元素地址的正确表示是 int a[]={1,2,3,4,5,6,7,8,9,0}; int *p,i; p=a; A、&(a+1) B、 a++ C、 &p D、 &p[i] 17、已知:int x; 则下面的说明指针变量 pb 的语句( )是正确的 A、int pb=&x; B、int *pb=x; C、int *pb=&x; D、*pb=*x; 18、说明语句“int *(*p)();”的含义是( ) A、p 是一个指向 int 型数组的指针 B、p 是指针变量,它构成了指针数组 C、p 是一个函数指针,该函数的返回值是一个整型 D、p 是一个函数指针,该函数的返回值是一个指向整型的指针 19、已知学生记录描述为: struct student { int no; char name[20]; char sex; struct { int year; int month; int day; }birth; }s; 设变量 s 中的“生日”应是“1984 年 11 月 11 日”,下列对“生日”的正确赋值方式是( ) A、year=1984; month=11; day=11; B、birth .year=1984; birth .month=11; birth .day=11; C、s.year=1984; s.month=11; s.day=11; D、s.birth .year=1984; s.birth .month=11; s.birth .day=11; 20、已知:char s1[4]=“12“;char *ptr;则执行以下语句后的输出为( ) ptr=s1; printf(“%c\n”, *(ptr+1)); A、字符‘2’ B、字符‘1’ C、字符‘2’的地址 D、不确定 二、多项选择题(下列各题中,有一个或多个正确答案,多选或少选均不得分。每题 2 分,共 10 分) 1、 以下变量名合法的是( ) A、static B、_auto C、 2_and D、_123 E、int 2、已知: int a,b;用语句 scanf(“%d%d”,&a,&b);输入 a,b 的值时,能作为输入数据分隔符的是( ) A、 , B、空格 C、回车 D、[TAB] E、 ; 3、设有说明 int (*ptr)[M]; 其中的标识符 ptr 是( ) A、 M 个指向整型变量的指针 B、数组指针 C、具有 M 个指针元素的一维指针数组,每个元素都只能指向整型变量
D、一个指向具有M个整型元素的一维数组的指针 E、ptr是指向函数的指针 4、已知:inta,*p=&a;则为了得到变量a的值,下列正确的表达式是() A、* B D、*&a 5、设有以下说明,则正确的叙述是() union char c foat f. A、a所占的内存长度等于成员f的长度 B、a所占的内存长度等于所有成员的长度和 C、a的地址和它的各成员地址都是同一地址 D、可以在定义a时对它初始化 E、a是共用体类型的别名 、判断对错题(每题1分,共5分) 1、能直接让计算机识别的语言是c语言 2、为避免嵌套的证语句的二义性,C语言规定else与其之前最近的ⅱ配对。 3、一般情况下,当两个指针指向同一个数组时,可在关系表达式中对两个指 针进行比较。 4、 malloc函数用来在内存中分配一个指定长度的存储空间。 5、在函数外部定义的变量是全局变量。 四、阅读下面的程序,写出程序的运行结果(每题3分,共15分) l、man i int x=l,y=2, 43 printf("%d", (x<y?x++ y++)) 、 maino {inta[10={1,2,3,-4,56,7,-8,9,10},s=0, for(int F0; K <10; i++) if(a[]<0) break s+=a[ printf("%d"s); 3、intf(intb[jntn) for(i=0;i<=n;计+=2) s+=b[; return s maino { int x a[}={2,3,4,5,6,7,8,9} x=f(a,5) print(“%d”,ⅹ) 4、 void prtv(nt*x) { printf(“%dn”,++*x);} mainO ii
D、 一个指向具有 M 个整型元素的一维数组的指针 E、ptr 是指向函数的指针 4、 已知:int a, *p=&a;则为了得到变量 a 的值,下列正确的表达式是( ) A、*&p B、*p C、p D、*&a E、&p 5、设有以下说明,则正确的叙述是( ) union data { int i; char c; float f; } a; A、a 所占的内存长度等于成员 f 的长度 B、a 所占的内存长度等于所有成员的长度和 C、a 的地址和它的各成员地址都是同一地址 D、可以在定义 a 时对它初始化 E、a 是共用体类型的别名 三、判断对错题(每题 1 分,共 5 分) 1、能直接让计算机识别的语言是c语言。 2、为避免嵌套的if语句的二义性,C语言规定else与其之前最近的if配对。 3、一般情况下,当两个指针指向同一个数组时,可在关系表达式中对两个指 针进行比较。 4、malloc函数用来在内存中分配一个指定长度的存储空间。 5、在函数外部定义的变量是全局变量。 四、阅读下面的程序,写出程序的运行结果(每题 3 分,共 15 分) 1、main() { int x=1,y=2,z=3; x+=y+=z; printf("%d",(x<y?x++:y++)); } 2、main() { int a[10]={1,2,3,-4,5,6,7,-8,9,10},s=0; for(int i=0;i<10;i++) { if (a[i]<0) break; s+=a[i]; } printf("%d",s); } 3、int f(int b[ ],int n) { int i, s=0; for(i=0; i<=n; i+=2) s+=b[i]; return s; } main() { int x,a[ ]={2, 3, 4, 5, 6, 7, 8, 9}; x=f (a, 5); printf(“%d”,x ); } 4、void prtv (int *x) { printf(“%d\n”, ++*x);} main() { int a=25;
prtv(&a); 5.inta33}={{2},{4},{6}; int i, "p=&aa[OJ[OT for(i=0;<2;H++) al[li+1]}=*p+1 else printf( %od”,*p) 五、填空题(每空2分,共20分) 1.下列程序的输出结果是( maI i char b[30]*p strcpy(&b[0,"GH”) strcpy(&b[l”DEF”) strcpy(&b[2,”ABC”) printf((“%sn”b) 2.下面的程序通过函数 averagel计算数组中各元素的平均值。请填空。 float average(int*pa, int n) i int 1; float avg=0.0 for(i-0 i<n; i++) avg( return avg maino {inti,a[5}={2,4,68,10} float mean mean=average(a, 5) printf(“%ofn”,mean) 3.若已定义inta=25,b=14c=19;以下三目运算符(?:)所构成的语句的 执行结果是( a++<=25&&b-<=2&&c++? printf(“**a=%d,b=%d,c=%dn”ab,c) printf(## a=%d, b=%d, c=%d\n,, a,b, c); 4.以下程序统计从终端输入的字符中大写字母的个数,用#号作为输入结束标志, 请填空 #include<stdio h #include<ctype. h> int num[ 26], 1; char c: for(=0;1<26计++)num[=0; while( )l=#)/*统计从终端输入的大写字母个数*/ if(isupper(c) num[c-65+=1 for(i=0i<26,++)/输出大写字母和该字母的个数*/ if(numi)printf( %c: %d,i( ).nu m[])
prtv(&a); } 5.int aa[3][3]={{2},{4},{6}}; main() { int i,*p=&aa[0][0]; for(i=0;i<2;i++) { if(i==0) aa[i][i+1]=*p+1; else ++p; printf(“%d”,*p); } 五、填空题(每空 2 分,共 20 分) 1.下列程序的输出结果是( ) main() { char b[30],*p; strcpy(&b[0],”GH”); strcpy(&b[1],”DEF”); strcpy(&b[2],”ABC”); printf(“%s\n”,b); } 2.下面的程序通过函数average计算数组中各元素的平均值。请填空。 float average(int *pa,int n) { int i; float avg=0.0; for(i=0;i<n;i++) avg=avg+( ); avg=( ); return avg; } main() { int i,a[5]={2,4,6,8,10}; float mean; mean=average(a,5); printf(“%f\n”,mean); } 3.若已定义int a=25,b=14,c=19;以下三目运算符(?:)所构成的语句的 执行结果是( ) a++<=25&&b--<=2&&c++?printf(“***a=%d,b=%d,c=%d\n”,a,b,c): printf (“### a=%d,b=%d,c=%d\n”,a,b,c); 4.以下程序统计从终端输入的字符中大写字母的个数,用#号作为输入结束标志, 请填空。 #include<stdio.h> #include<ctype.h> main() { int num[26],i; char c; for(i=0;i<26;i++) num[i]=0; while( ( ) !=’#’) /*统计从终端输入的大写字母个数 */ if(isupper(c)) num[c-65]+=1; for(i=0;i<26;i++) /*输出大写字母和该字母的个数 */ if(num[i]) printf(“%c:%d”, i( ),num[i]);
5.funl函数的调用语句为:funl(&a&b,&c)它将三个整数按由大到小的顺序调整后依次 放入a、b、c三个变量中,a中放最大数。请填空 void fun2 (int *x, int *y) i int t void funl(int*pa, int *pb, int *pc) f if("pc >*pb)fun2 if(pa<*pc)fun2( 6.设有如下程序段 int i0 sum=l sum+=i++, while(i<2) printf("%d in, sum); 上述程序的输出结果是( 六、编写程序题(共30分) 1、编程打印如下形式的九九表(4分 9 2、编写一个函数,计算x的n次方(5分) 3、有一个3*4的矩阵,编程求其中最大元素的值(6分) 4、有一个数列,有20个整数,要求编一个函数,它能够对从指定位置开始的n个数按相反顺序重新排列 例如数列原为:1,2,3,4, 14,15,16,17,18,19,20 若要求对从第5个数开始的10个数进行逆序处理,则得到新数列为: l,2,3,4,14,13,12,,10,9,8,7,6,5,15,16,17,18,19,20 数列中的数在main中输入,在调用函数时应给出从第几个位置开始(m表示)和要处理的是多少 个数(n表示)。在main中输出新的数列。(7分) 5、请编写函数fun,它的功能是:求出1到m内(含m)能被7或11整除的所有整数放在 数组a中,通过n返回这些数的个数。部分源程序已给出。(8分) 例如:若传送给m的值为50,则程序输出为: 711142122283335424449 部分程序如下: #includeconio. h #include<stdio h> #define m 100 void fun(int m, int* a, int *n) i int aa M), n, k; fun (50, aa, &n)
} 5.fun1函数的调用语句为:fun1(&a,&b,&c);它将三个整数按由大到小的顺序调整后依次 放入a、b、c三个变量中,a中放最大数。请填空。 void fun2(int *x,int *y) { int t; t= *x; *x= *y; *y= t; } void fun1(int *pa, int *pb, int *pc) { if(*pc > *pb) fun2( ); if(*pa< *pc) fun2( ); if(*pa< *pb) fun2( ); } 6.设有如下程序段: int i=0,sum=1; do { sum+=i++;} while(i<2); printf(“%d\n”,sum); 上述程序的输出结果是( )。 六、编写程序题(共 30 分) 1、编程打印如下形式的九九表 (4 分) 1 2 3 4 ………… 9 2 4 6 8 ………… 18 . . . . 9 18 27 36 ………… 81 2、编写一个函数,计算 x 的 n 次方 (5 分) 3、有一个 3*4 的矩阵,编程求其中最大元素的值 (6 分) 4、有一个数列,有 20 个整数,要求编一个函数,它能够对从指定位置开始的 n 个数按相反顺序重新排列。 例如数列原为: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 若要求对从第 5 个数开始的 10 个数进行逆序处理,则得到新数列为: 1,2,3,4,14,13,12,11,10,9,8,7,6,5,15,16,17,18,19,20 数列中的数在 main 中输入,在调用函数时应给出从第几个位置开始(m 表示)和要处理的是多少 个数(n 表示)。在 main 中输出新的数列。(7 分) 5、请编写函数 fun,它的功能是:求出 1 到 m 内(含 m)能被 7 或 11 整除的所有整数放在 数组 a 中,通过 n 返回这些数的个数。部分源程序已给出。(8 分) 例如:若传送给 m 的值为 50,则程序输出为: 7 11 14 21 22 28 33 35 42 44 49 部分程序如下: #include<conio.h> #include<stdio.h> #define M 100 void fun(int m,int *a,int *n) { } main() { int aa[M],n,k; fun(50,aa,&n);