C语言期末考试题目2.docx
一、单项选择题lo已知:inta, *y=&a;则下列函数调用中错误的是。A) scanf("%d", &a);B) scanf(>, %d",y);C) printf (w %d”, a); D) prinlf(" %d",y);2.说明语句" int (*p)();”的含义是.A) p是一个指向一维数组的指针变量B) p是指针变量,指向一个整型数据C)p是一个指向函数的指针,该函数的返回值是一个整型D)以上都不对3.设有说明int ("p) 4;其中的标识符p是 oA) 4个指向整型变量的指针变量B)指向4个整型变量的函数指针C) 一个指向具有4个整型元素的一维数组的指针D)具有4个指向整型变量的指针元素的一维指针数组.已知:chars L 10, *p=s,则在下列语句中,错误的语句是.A) p=s+5; B) s=p+s; C) s2=p 4 ; D) *p=s();.已知:chars100; inti;则引用数组元素的错误的形式是。A)s i+10B)*(s+i) C) *(i+s)D) *( (s+)+i) 6o己知:char sf6, *ps=s;则正确的赋值语句是。A) s=”12345”; B) *s=u 12345°; C) ps二” 12345”;D) *ps=" 12345H;7.已知:char a E3 10=,BeiJing'V'ShangHaiM,w TianJin" , *pa=a;不能正确显示字符串” ShangHai”的语句是。A) printf("%s, a+1) ;B) printf("%s", * (a+1);C) printf(u%s" ,*a+l);D) printf (n%s&al 0);8.已知:inta4 3 =1, 2, 3,4, 5,6, 7, 8,9, 10,11, 12);int (* ptr) 3=a,*p=a0;则以下能够正确表示数组元素a的表达式是。A) *(*(a+l) +2)B)* (*(p+5)C)(*ptr+1) +2 D) *( (ptr+1)2)9o 已知:int a =1,2, 3,4,5, 6,7,8, 9,10,11, 12), *p=a;则值为 3 的表达式是。A) p+=2, *(p+) B) p+=2, *+pC) p+=2, *p+D)p+=2, +*p10o已知:ini a 口 = 1, 2,3,4, y, *p=a;则执行语句y = (*+p)一;之后,数组a各 元素的值变为 oA) 0J, 3, 4 B) 1,1,3,4C) 1,2, 2, 4D) 1,2,3, 3 int i, p=0; while(x>wp) ,for(i=* n;i>=p; i-)w pl=x; +*n; 3.以下程序的功能是:读入一行字符(如:a、。.y、z),按输入时的逆序建立一个链接式的 结点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结 点。z» y »a a#include (stdioo h>void main () struct node char info;struct node * link; *top, *p;char c;top=NULL;while(c= getchar ( ) )Q) p=(struct node * )malloc (sizeof(struct node);p->info=c;p->link=top;top=p;)while( top )( ;top=toplink;putchar (p-)info);free (p);)三、编程题.编写函数,通过指针将一个字符串反向。1 .编写一个函数insert (sl,s2,ch),实现在字符串si中的指定字符ch位置处插入字符串s2。3o 利用结构:struct complx int real ;int im:);编写求两个复数之积的函数cmult,并利用该函数求下列复数之积:(3+4i) X (5+6i) (2) (10+20i)X (30+40i)4o编写成绩排序程序。按学生的序号输入学生的成绩,按照分数由高到低的顺序输出学生 的名次、该名次的分数、相同名次的人数和学号;同名次的学号输出在同一行中,一行最多输 出个学号.变量y的值是 oA) 1B)2C) 3D)4.己知:int a口二1,3,5,7, y *p= a;为使变量y的值为3,下列语句正确的是。 A) y=+*p+;B) y=+(*p+); C) y= (+*p)+; D) y=(*+p) +;11 .已知:ini x = 1,3, 5, 7,9, 11 ),*ptr=x;则能够正确引用数组元素的语句 是 oA) xB) * (ptr)C) x6D) * (ptr),且通过正确调用返回交换的结果.能正确执行此,且通过正确调用返回交换的结果.能正确执行此13。函数的功能是交换变量x和y中的值 功能的函数是 cB) funb (int x, int y)t=x: x=y;y=t;D) func (int * x, int * y) *x=*x+*y; *y=* x-*y;*x=*x-*y;A) funa (int *x, int *y) int *p; p=x; *x=*y; *y=%p; )C) func (int *x, int *y) *x=*y; *y= * x; 14.有定义如下: struct sk int a;float b; data ,*p;如果p二&data;则对于结构变量data的成员a的正确引用是.A) (*) .data.a B) (*p)« a C) p->data.a D) po data。a15o已知: struct st int n; struct st * next; );static struct st a3= 1,&a 11,3, &a 2, 5,&a0, *p; 如果下述语句的显示是2,则对p的赋值是.printf(w %d”,+ (p->nextn);A) p=&a0; B) p=&a 1 ; C) p=&a 2; D) p=&a 3;16o已知: struct person char name 10;int age; class 10= "LiMing”,29,“ ZhangHong", 21,'WangFangw, 22; 下述表达式中,值为72的一个是 oA) class0 ->age + classl-) age+ class 2-)age B) class 1 o name5C) person1 o name 5D) clase-> name517o已知: struct int i;char c;float a; test;则 sizeof (test)的值是.A) 4 B) 5C)6 D) 718.已知: union int i;char c;float a; test;则 sizeof(test)的值是。A) 4B)5C)6 D) 719o已知:union u_type int i;char ch;float a; temp;现在执行"temp。i=266;printf (w %d”, temp。ch)” 的结果是。A) 266B)256 C) 10 D) 12().若有以下程序段: struct dent int n;int *m;):int a=l,b=2, c=3;struct dent s 3 = 101, &a,( 102, &b, 103,&c ;struct dent * p=s;则以下表达式中值为2的是.A) (p+)>mB) *(p+) -> m C) (*p) .m D) * (+p)m21.若有以下说明语句,则对结构变量pup中sex域的正确引用是 ostruct pupil char name 20;int sex; pup,*p;p=&pup;A) p.pupo sexB) ppupo sexC) (*p)。pup。sex D) (大p)o sex22 .以下对结构变量stul中成员age的非法引用是. struct student ini age; int num; stul,*p;p=&stu 1 ;A) stul o ageB) student.age C) p>ageD) (*p)。ageo若有以下定义和语句: union data int i;char c; float f; a;int n;则以下语句正确的是 OA) a=5;B) a= 2/ a;1.2; C) printf ("%dnv ,a); D) n=a;.已知: struct sk int a; int age; Jdate, *p; 如果要使指针p指向data中的成员a,正确的赋值语句是。A) p = (struct sk * )&data.a; B) p = (struct sk * )data.a;C) p = &data0 a;D) *p = dala。a;25o 已知 enum week sun,mon,tue,wed,thu,fri, satday;则正确的赋值语句是。A) sun=0; B) san=day;C) sun=mon;D) day=sun;o 己知 enum color red,yellow=2,blue, white,black ren;执行下述语句的输出结果是 0printf ( M %d”, ren=white);A) 0B) 1C)3D) 4.己知enum namezhao=1, qian, sunjijman;执行下述程序段后的输出是。 man=0;switch(man) case 0: printf (" Peoplen v);printf (" Man'n");case 1: printfC'WomanXn");default: printf ("Error'n");)A) People B) Man C) Woman D) Error28o下述关于枚举类型名的定义中,正确的是 oA) enem a= one, two,three ; B) enem a one=9,two=-l, three );C) enem a="one" ,"two", "three"; D) enem a " one" ,"two","three” );. C语言中标准输入文件stdin是指。A)键盘 B)显示器 C)鼠标 D)硬盘.要打开一个已存在的非空文件" file”用于修改,选择正确的语句A) fp=fopen(" file“, “ r");B) fp=fopen (nfile", "a+”);C) fp=fopen(n file", " w");D) fp=fopen('file, r+H);31。当顺利执行了文件关闭操作时,fclose函数的返回值是。A)-l B) TRUE C)0 D) 1 32o fscanf函数的正确调用形式是。A) fscanf (文件指针,格式字符串,输出列表);B) fscanf (格式字符串,输出列表,文件指针);C) fscanf (格式字符串,文件指针,输出列表);D) fscanf (文件指针,格式字符串,输入列表);.使用fgetc函数,则打开文件的方式必须是.A)只写 B)追加 C)读或读/写D)参考答案B和C都正确o已知宏定义# define N 3#define Y(n) ( (N+l) *n)执行语句z=2*(N+Y(5+l);后,变量z的值是 0A) 42B)48C) 52D)出错 35。己知宏定义#define SQ (x)x*x,执行语句printf ("%d”,10/SQ (3);后的输出结果 是.A) 1B)3C)9D) 10.下面程序的输出结果是void main() int a = 1,2, 3,4,5,6 ); int *p;p=a;printf ( "% d ”产p); prinlf("%d ”,* (+p); printf ( ”d ”, *+p); printf,% d ”,* (p);p+=3;printf ( ”d %d =*p,* ( a+3);A) 123354C) 122345B) 12 3 4 5 6D) 12344536 .下面程序的输出结果是.void main () int a 3 4 = 1, 2,3, 4, 5,6, 7, 8, 9,10, 11 , 12);int * p=a;p+=6;printf (”%d ”,* p);/* */printf ( "%d ”,*(* (a+6);/* */prinlf("%d", *(al+=2);/火 */printf("%d",*(&a() () +6); /* */)A) 7 7 7 7 B)句语法错误 C)句语法错误 D)句语法错误.下面程序的输出结果是#include <stdioo main () static int a printf( FMT, printf( FMT, 1 A) 9 A) 6h>4 = 123,4,5,6, a 2J12J);/* */* ( * (a+1)+1);B) 11 C)B) 7 C) 8#define FMT "Xn”7,8,9, 10,11, 12 );/* * /A D) BD)前面三个参考答案均是错误的39。下面程序的输出结果是 o# include stdioo h)void main () int a = 1,2,3,4,5);int x, y,*p;p=&a 0J;x = *(p+2); y=*(p+4);printf ( n%d,% d, %dn, *p, x, y);)D) 1, 4,5A) 1,3, 5 B) 1,2, 3 C) 1,2, 440.下面程序的输出结果是 void ive ( x, n) int x L , n; int t, *p;p=x+n-1;while(x (p) t=*x;*x+=*p;*p=t;)return;void main() int i, a = 1,2,3, 4, 5, 6, 7,8,9,0;ive(a, 10);for(i=0; i < 10; i + +)printf ("%d ", a i);printf ( "n”);A) 123456789 0B) 0 987654321C) 1 357924680D)0864297531.下面程序的输出结果是 o# include "string.h"fun ( char *w, int n ) char t, *s 1, * s2;s 1 =w; s2=w + n-1 ;while(s 1(s2) t= * sl+;* s 1 =* s2-;*s2=t;)void main () static char * p=" 1234567”;fun ( p,strlen ( p); printf ( " % s", p);D) 1711717)A) 7654321 B) 1717171 C) 7171717.下面程序的输出结果是 o#include <stdioo h>char *p = "abcdefghijklmnopq”;void main() int i=0;while ( * p+! ='e');printf (,%cn, * p);A) c B) d C) e D) f.下面程序的输出结果是.# include <stdio<> h)f ( int x, int y ) return ( y一x );)void main () int a=5, b=6, c;int f(), ( * g) ()=f;printf("%dn",(* g) (a, b);A) 1 B) 2 C) 3 D)前面三个参考答案均是错误的44o下面程序的输出结果是 o# include <stdio.h>void main () int a= 1 ,*p, * *pp;pp=& p:p=& a;a+;printf ("d, % d, % dn", a, * p, *pp);A) 2, 1, 1 B) 2, 1, 2 C) 2, 2,2 D)程序有错误.下面程序的输出结果是。void main()(char *alpha7= “ABCD”,“EFGH",HIJKLn, “MNOP“,“QRST",“UVWX”, “YZ”;char *p;int i;p=alpha;for(i=0; i<4; i+)printf("c”,*(p i);printf ()A) AEIM B) BFJN C) ABCD D) DHLP.以下程序的输出结果是A> 15 B) 100 C) 10 D) 150# define MIN(x, y)( x ) <(y) ? ( x ): (y)void main ()int i,j,k;i=10:j=15;k=10*MIN(i,j);printf(%dnn,k); .以下程序的输出结果是A) llo 10B) 12o 00 C) 21 o 10D) 1.10void fun(float * pl,float * p2,float * s) s= ( float * ) calloc( 1 ,sizeof ( float);* s=* pl+*p2 + + ;) void main( ) float a 2 =1.1, 2.2,b2= 10.0, 20o 0),*s=a;fun(a, b,s);printf("%5.2fn", * s);)48o以下程序的输出结果是A) 5,2, 3 B) -5,12,-7 C) -5,-12,7 D) 5, -2,-7 void sub ( int x,int y, int *z) *z=y-x;)void main ()int a,b,c;sub (10, 5,&a); sub(7, a, & b); sub ( a, b, & c); printf(M %d,%d,%dn”,a, b, c);二、程序完善题1 .下面程序的功能是实现数组元素中值的逆转。# include stringo h> void main() int i, n=10,a 10J= 1,2» 3,4, 5,6,7, 8,9,10 );invert ( a,n- 1 );for(i=0; i 10; i+)printf("4d",a i);prinlf(" n");void invert(int *s, int num ) int *t, k; t=s+num ; while () k=*s;* s=*t; " t=k; ;)2.下面函数的功能是将字符变量的值插入已经按ASCH码值从小到大排好序的字符串中。 void fun (char *w, char x, int * n)