C语言考试必备习题集&答案 联系客服

发布时间 : 星期一 文章C语言考试必备习题集&答案更新完毕开始阅读4331160a52ea551810a68731

8 下面是一个初始化指针的语句:int *px=&a;,其中指针变量的名字应该_C__。 A *px B a C px D &a 9 若指针px为空指针,则_B__。。

A px指向不定 B px的值为零 C px的目标为零 D px的地址为零 10 对下语句int *px[10];,下面正确的说法是_B__。

A px是一个指针,指向一个数组,数组的元素是整数型。 B px是一个数组,其数组的每一个元素是指向整数的指针。 C A和B均错,但它是C语言的正确语句。 D C语言不允许这样的语句。

11 具有相同基类型的指针变量p和数组y,下列写法中不合法的是_D__。

A p=y B *p=y[i] C p=&y[i] D p=&y 12 已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p; , 则表达式 *(p[0]+1)+**(q+2) 的值是_A__。

A 5 B 4 C 6 D 7 13 说明语句int *(*p)();的含义为_D__。

A p是一个指向int型数组的指针 B p是指针变量,它构成了指针数组

C p是一个指向函数的指针,该函数的返回值是一个整型

D p是一个指向函数的指针,该函数的返回值是一个指向整型的指针 14 设有如下程序段

char s[20]=\Beijing\,*p; p=s;

则执行p=s;语句后,以下叙述正确的是_A__。 A 可以用*p表示s[0]

B s数组中元素个数和p所指字符串长度相等 C s和p都是指针变量

D 数组s中的内容和指针变量p中的内容相同 15 设int型变量i、n均已定义,指针变量s1、s2各指向一个字符串。在for(i=0;i

A *s1++=*s2++; B s1[n-1]=s2[n-1]; C *(s1+n-1)=*(s2+n-1); D *(++s1)=*(++s2); 16 给出下列程序的运行结果_B__。

#include void main()

{ static char a[]=\language\,b[]=\program\; char *ptr1=a,*ptr2=b; int k;

for(k=0;k<7;k++)

if(*(ptr1+k)==*(ptr2+k)) printf(\%c\,*(ptr1+k)); }

A gae B ga C language D 有语法错误 17 以下程序执行后的输出结果是_A__。

void fun1(char *p) { char *q; q=p;

28

while(*q!='\\0'){ (*q)++; q++; }

}

main()

{ char a[]={\Program\},*p;

p=&a[3]; fun1(p); printf(\%s\\n\,a); }

A Prohsbn B Prphsbn C Progsbn D Program 18 以下程序执行后的输出结果是_C__。

void swap(char *x,char *y) { char t;

t=*x; *x=*y; *y=t; }

main()

{ char *s1=\abc\,*s2=\123\;

swap(s1,s2); printf(\%s,%s\\n\,s1,s2); }

A 123,abc B abc,123 C 1bc,a23 D 321,cba 19 以下程序执行后的输出结果是_C__。

main()

{ char *p[]={\3697\,\2584\}; int i,j; long num=0; for(i=0;i<2;i++) { j=0;

while(p[i][j]!='\\0')

{ if((p[i][j]-'0')%2) num=10*num+p[i][j]-'0'; j+=2; } }

printf(\%d\\n\,num); }

A 35 B 37 C 39 D 3975 20 下列程序运行后的输出结果是_A__。

void main()

{ char str[]=\The_Microsoft\; int n=4; sub(str,0,n-1);

sub(str,0,strlen(str)-1); printf(\%s\\n\,str); }

sub(str,n1,n2) char *str; int n1,n2; { char c,*p; p=str+n2; str=str+n1; while(str

{ c=*str; *str=*p; *p=c; str++; p--; } }

29

A tfosorciMThe_ B. ehT_Microsoft C tfosorciM_ehT D. Microsoft_The

二 填空题(每空3分,共30分)

1 以下程序的定义语句中,x[1]的初值是 ① 2 ,程序运行后输出的内容是 ②2468 。

main()

{ int x[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i; for(i=0; i<4; i++)

{ p[i]=&x[2*i+1]; printf(\%d\, p[i][0]); } printf(\\\n\); }

2 以下程序的输出结果是 ③2 5 。

void swap(int *a, int *b) { int *t;

t=a; a=b; b=t; }

main()

{ int i=2,j=5,*p=&i,*q=&j;

swap(p,q); printf(\%d %d\\n\,*p,*q) }

3 以下程序的输出结果是 ④4 。

main()

{ int a[5]={2,4,6,8,10}, *p; p=a; p++;

printf(\%d\, *p); }

4 以下程序的输出结果是__⑤_55_。

#define M 5 #define N M+M main() { int k;

k=N*N*5; printf(\%d\\n\,k); }

5 若有定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是 ⑥2 。 6 若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是 ⑦12 ,*(a[1]+2)的值是 ⑧12 。 7 若有程序段:

int *p[3],a[6],i;

for(i=0;i<3;i++) p[i]=&a[2*i] ;

则*p[0]引用的是a数组元素 ⑨a0] ,*(p[1]+1)引用的是a数组元素 ⑩a[3] 。

三 程序填空题(每空3分,共30分)

1 下面函数的功能是从输入的十个字符串中找出最长的那个串,请填空使程序完整。

void fun(char str[10][81],char **sp) { int i;

*sp = 【1】str[0] ; for(i=1;i<10; i++)

if(strlen(*sp)

30

}

2 下面函数的功能是将一个整数字符串转换为一个整数,例如:\1234\转换为1234,请填空使程序完整。

int chnum(char *p) { int num=0,k,len,j; len=strlen(p);

for( ; 【3】*p ; p++)

{ k= 【4】*p-'0' ; j=(--len); while( 【5】j-- ) k=k*10; num=num+k; }

return (num); }

3 下面函数的功能使统计子串substr在母串str中出现的次数,请填空使程序完整。

int count(char *str, char *substr) { int i,j,k,num=0;

for(i=0; 【6】str[i] ;i++)

for( 【7】j=i ,k=0;substr[k]==str[j];k++,j++) if(substr [ 【8】k+1 ]==’\\0’) { num++ ; break ; } return (num); }

4 下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如483存放成“384”,请填空使程序完整。

void convert(char *a, int n) { int i;

if((i=n/10)!=0) convert( 【9】a+1 ,i); else *(a+1)=0;

*a= 【10】n+'0' ; }

结构体 文件

单项选择题(1~8题每题5分,9~18题每题6分,共100分) 1 有以下说明语句,对结构变量中成员age的正确引用是_A__。

struct student

{ int age; int sex; }stud1,*p;

A p->age B student.age C *p.age D stud1.student.age 2 说明语句如下,则正确的叙述是_D__。

union data { int x; char y; float z; }a; A data和a均是共用体类型变量

B a所占内存长度等于其成员x、y、z各在内存所占长度之和 C 任何情况下,均不能对a作整体赋值 D a的地址和它的各成员地址都是同一地址 3 共用体成员的数据类型_B__。

31