C语言全部章节习题集(本) 下载本文

内容发布更新时间 : 2024/11/2 23:20:53星期一 下面是文章的全部内容请认真阅读。

#define NUM (M+1)*M/2 void main() { int i; for(i=1;i<=NUM;i++); printf(“%d\\n”,i); }

2、以下程序的输出结果是 。 #define A 3

#define B(a) ((A+1)*a) void main() {

int x;

x=3*(A+B(7));

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

}

三、判断题

( )1、宏替换时先求出实参表达式的值,然后代入形参运算求值。 ( )2、宏名无类型,其参数也无类型。

( )3、使用宏次数多时,宏展开后源程序不会变长。

( )4、调用函数只能得到一个返回值,而用宏可以得到几个结果。

( )5、在一被包含文件中又可以包含另一被包含文件,文件包含是可以嵌套的。

( )6、用一个指定的标识符来代表一个字符串,它的一般形式为 #define 标识符 字符串;

( )7、在宏定义#define PI 3.l4l59中,如果将1误输成小写的L,则编译时不出错,运行时出错。

( )8、取消PI的宏定义为 #undef PI 0 ( )9、#include和 #define不是C语句。

10 指针

一、单项选择题

1、若有定义:int x,*pb;则以下正确的表达式是( ) A.pb=&x B.pb=x C.*pb=&x D.*pb=*x 2、以下程序的输出结果是( )

A.因变量无定义输出不定值 B.0 C.-1 D.1

- 31 -

#include void main()

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

3、以下程序的输出结果是( )

A.5,2,3 B.-5,-12,-7 C.-5,-12,-17 D.5,-2,-7 #include

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(“%d,%d,%d\\n”,a,b,c); }

4、以下程序的输出结果是( ) A.4 B.6 C.8 D.10 #include void main() {

int k=2,m=4,n=6;

int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(“%d\\n”,n); }

5、已知指针p的指向(图一)的a[1],则执行语句*p++;后,*p的值是(A.20 B.30 C.21 D.31 a[0] a[1] a[2] a[3] a[4]

10 20 30 40 50 (图一)

6、已知指针p的指向(图一)的a[1],则表达式*++p的值是( )。 A.20 B.30 C.21 D.31

7、已知指针p的指向(图一)的a[1],则表达式++*p的值是( )。 A.20 B.30 C.21 D.31 8、以下程序的输出结果是( )。

A.23 B.24 C.25 D.26

#include void prtv(int *x)

{printf(“%d\\n”,++*x);} void main() {

)。 - 32 -

int a=25;prtv(&a); }

9、以下程序的输出结果是( )。

A.运行出错 B.100 C.a的地址

#include void main() {

int **k,*a,b=100;

a=&b;k=&a;

printf(“%d\\n”,**k);

}

D.b的地址

10、以下程序运行后,输出结果是( )。

A. 8 B. 7 C. 6

#include ss(char *s)

{ char *p=s; while(*p) p++; return(p-s); }

main()

{ char *a=\ int i; i=ss(a);

printf(\ }

D.5

二、填空题

1、若有定义:char ch;

(1)使指针p指向变量ch的定义语句是 。

(2)若已定义char *p;,使指针p指向变量ch的赋值语句是 。

(3)在(1)的基础上,通过指针p给变量ch读入字符的scanf调用语句是 。 (4)在(1)的基础上,通过指针p给变量ch赋字符’a’的语句是 。

(5)在(1)的基础上,通过指针p用格式输出函数输出ch中字符的语句是 。 2、以下程序输出的是 。

void main( ) { int i=3, j=2;

char *a=\DCBA\

- 33 -

printf(\ }

3、以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。

void exchange(int *x, int *y) { int t;

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

三、判断题

( )1、若定义 int a[5],*p=a; 则 *&a[5] 是对a数组元素的正确引用。 ( )2、若定义 int a[2][3]; 则 *(*(a+i)+j) 是对a数组第i行第j列元素的正确引用。

( )3、指针变量用于存放指针所指对象的地址。 ( )4、指针就是变量的地址。

( )5、通过指针可以间接引用指针所指的变量。 ( )6、“指针”与“指针变量”是同一个概念。 ( )7、一个指针变量只能指向同一类型的变量。 ( )8、可以给指针变量赋一个整型值。

( )9、所谓数组的指针就是指数组元素的地址。

五、选做题

程序填空:

1、下面程序的输出结果是 。 char b[]=\ABCD\ void main() { char *chp;

for(chp=b; *chp: chp+=2) printf(\ printf(\}

2、下面是一个字符串连接函数,请补充完整。

void mystrcat(char *s1,char *s2) { char *p,*q; for(p=s1; ; ); for( ;*q;q++) ; ;

}

- 34 -

- 35 -