C语言练习题(谭浩强第四版)..附有答案 下载本文

高级语言程序设计综合练习一 学号: 姓名:

{ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p; p=a;

printf(\}

A) 0 B) 1 C) 10 D) 9

8、 若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是:( )

A) i = *p; B) *p = *&j; C) i = &j; D) i = **p; 9、 以下定义语句中,错误的是:( )

A) int a[]={1,2}; B) char *a[3]; C) char s[10]=\ D) int n=5,a[n];

10、 以下不能正确进行字符串赋初值的语句是:( ) A) char str[5]=\; B) char str[]=\

C) char *str=\11、 有以下程序 main()

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

int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; printf(\}

程序运行后的输出结果是:( )

A) 11 B) 19 C) 13 D) 20 12、 有以下程序 #include main()

{ char *p=\

printf(\}

程序运行后的输出结果是:( ) A) 12 B) 15 C) 6 D) 5

13、 变量的指针,其含义是指该变量的______. a)值 b)地址 c)名 d)一个标志

14、 若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_______. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 15、 若有说明;int *p,m=5,n;以下正确的程序段的是____. a)p=&n; b)p=&n; scanf(\ scanf(\ c)scanf(\ d)p=&n;

*p=n; *p=m; 16、 以下正确的程序段是______.

a)char str[20]; b)char *p; scanf(\ scanf(\

25

高级语言程序设计综合练习一 学号: 姓名:

c)char str[20]; d)char str[20],*p=str;

scanf(\ scanf(\17、 下面程序的运行结果是____. #include #include main() {

char *s1=\ char *s2=\ s1+=2;s2+=2;

printf(\ }

a)正数 b)负数 c)零 d)不确定的值

18、 若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为_____ a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j 19、 若有以下定义,则p+5表示___. int a[10],*p=a;

a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值 20、 以下程序的输出结果是________. #include

void fun(int *p); int main() {

int x = 3; fun(&x);

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

void fun(int *p) {

*p = 5; }

A) 3 B) 5 C) 8 D) 2 21、 下面判断正确的是

A)char *a=\等价于 char *a;*a=\

B)char str[5]={\等价于char str[]={\C)char *s=\等价于 char *s;s=\

D)char c[4]=\[4]=\等价于char c[4]=d[4]=\

22、 下列程序的运行结果是

void fun(int *a, int *b) { int *k;

k=a; a=b; b=k;

26

高级语言程序设计综合练习一 学号: 姓名:

}

main()

{ int a=3, b=6, *x=&a, *y=&b; fun(x,y);

printf(\%d\a, b); }

A)6 3 B)3 6 C)编译出错 D)0 0

二、判断题

1. ( F )指针变量里存放的是地址值,因此指针变量只能是int型的。 2. ( T )有一个一维数组a[10],那么a与&a[0]等价。

3. ( F )有如下程序段:int i, j = 2, k, *p = &i;k = *p + j;这里出现的两个“*”号,

含义是一样的。

4. ( F )在C语言中,每一个变量在内存里占用的单元数都是相同的。 5. ( T )通过指针变量,就能间接地得到它所指向的变量的值。

6. ( F )有说明:int *p;且p指向地址为1500的内存单元,那么经过操作“p++;”后,p

将指向1501的内存单元。

7. ( T )一个变量的指针就是该变量的地址。 8. ( F )在C语言中允许将一个整数赋给指针变量。

9. ( F )数组名实际上是此数组的首地址,所以数组名相当于一个指针变量。 10. ( F )char *p[10];定义了一个指向字符数组的指针变量。

答案:

DBABB BCBDA BDBDD ABDAB CB FTFFT FTFFF

C语言程序设计练习题

结构体与联合体

一、单选题

1. 下列关于结构体的说法错误的是:( D )

A:结构体是由用户自定义的一种数据类型

B:结构体中可设定若干个不同数据类型的成员

C:结构体中成员的数据类型可以是另一个已定义的结构 D:在定义结构体时,可以对成员进行初始化

2. 以下结构体类型说明及结构体变量a,b的定义中,正确的是:( B )

A:struct ss B:struct ss { char flag; { char flag;

27

高级语言程序设计综合练习一 学号: 姓名:

float x; float x; } ; };

ss a,b; struct ss a,b; C:struct D:struct

{ char flag; { char flag;

float x; float x; }ss; }ss;

ss a,b; struct ss a,b;

3. 设有以下说明语句:

struct stu { int a; float b;

}stutype;

则下面的叙述不正确的是:( C ) A:struct是结构体类型的关键字

B:struct stu是用户定义的结构体类型名 C:stutype是用户定义的结构体类型名 D:a和b都是结构体成员名

4. 在VC++6.0中使用C语言时,若有如下定义:

struct data { long i; char ch; double f;

}b;

则结构变量b占用内存的字节数是:( D )

A:4 B:8 C:12 D: 13 5. 下面程序的运行结果是:( ) main( )

{ struct cmplx { int x; int y; }c[2]={1,3,2,7};

printf(\}

A:0 B:1 C:3 D:6

6. 若有以下说明和语句,则对pup中sex域的正确引用方式是:( ) struct pupil

{ char name[20]; int sex; }pup,*p; p=&pup;

A:p.pup.sex B:p->pup.sex C:(*p).pup.sex D:(*p).sex

28