返回首页
当前位置: 主页 > 网络编程 > 其他实例教程 >

C程序设计练习题含答案大全

时间:2010-11-18 22:06来源:betway必威官网www.etsupport.net 编辑:麦田守望者

定义一个名为“defs.h”的头文件:

#include

#define PR(fmt, val) printf(#val “ = %” #fmt “ \t”, (val))

#define NL putchar(’\n’)

#define PRINT1 (f, x1) PR (f, x1), NL

#define PRINT2 (f, x1, x2) PR (f, x1), PRINT1 (f, x2)

#define PRINT3 (f, x1, x2, x3) PR (f, x1), PRINT2 (f, x2, x3)

#define PRINT4 (f, x1, x2, x3, x4) PR (f, x1), PRINT3 (f, x2, x3, x4)

有PRINT1(d, 5)宏命令,应该扩展成什么?那么PRINT4(d, 5, 6, 7, 8)呢?

 

考点:带参数的宏的展开。
val和fmt应由对应的实参来替代。
则PRINT1(d, 5)先扩展为PR (d, 5), NL

继而扩展为printf (#5 “=%” #d “\t”, (5)), putchar(’\n’)

最后成为printf (“5 =%d\t”, (5)), putchar(’\n’)

 

又有PRINT4(d, 5, 6, 7) 先扩展为PR (d, 5), PRINT3 (d, 6, 7, 8)

继而扩展为PR (d, 5), PR (d, 6), PRINT2 (d, 7, 8)

再扩展为PR (d, 5), PR (d, 6), PR (d, 7), PRINT1 (d, 8)

再次开展为PR (d, 5), PR (d, 6), PR (d, 7), PR (d, 8), NL

最后扩展为printf (“5 =%d\t 6=%d\t 7=%d\t 8=%d\t ”, (5), (6), (7), (8)), putchar(’\n’)

 

需要注意的是,这里只是宏定义,并不是语句!
 

下面这个程序的输出是什么?

#include“defs.h”

main( )

{ int x, y, z;

x=y=0;

while(y<10) ++y;x+=y;

PRINT2(d, x, y); x= 10 y= 10

 

x=y=0;

while(y<10) x+=++y;

PRINT2(d, x, y); x= 55 y= 10

 

y=1;

while(y<10) {x=y++;z=++y ;}

PRINT3(d, x, y, z); x= 9 y= 11 z= 11

 

for( y=1;y<10;y++) x=y;

PRINT2(d, x, y); x= 9 y= 10

 

for(y=1;(x=y)<10;y++);

PRINT2(d, x, y); x= 10 y= 10

 

for (x=0;y=1000;y>1; x++, y/=10)

PRINT2(d, x, y);

x=0 y=1000

x=1 y=100

x=2 y=10

 

}

考点:while和for循环,要注意循环执行的是那条语句!
 

请问下面程序输出的是什么?

#include“defs.h”

char input[]=”SSSWILTECH1\1\11W\1WALLMP1”;

main( )

{ int i, c;

for( i=2; (c=input[i])!=’\o’; i++)

{switch(c)

{case ‘a’ : putchar (‘i’ );continue;

case ‘1’ : break;

case 1 : while( (c=input[++i]) !=’\1’ && c!=’\0’ );

case 9 : putchar( ‘s’ );

case ‘E’

case ‘L’ : continue;

default : putchar(c);

continue;

}

putchar( ‘ ’);

}

putchar(‘\n’);

}

考点:switch、break和continue语句,continue语句强行开始下一次循环,而break语句强行推出本次循环或switch语句。“\1”与整数1相匹配,这是因为C语言会把char型自动转换为int型。
输出:SWITCH SWAMP
 

请问下面程序输出的是什么?

#include “defs.h”

int i=0;

main( )

{

auto int i=1;

PRINT1(d, i); i= 1

{

int i=2;

PRINT1(d, i); i= 2
{ i+=1;

PRINT1(d, i ); i= 3
}

PRINT1(d ,i ); i= 3
}

PRINT1(d ,i ); i= 1
}

考点:变量的作用域和生命期。
 

请问下面程序输出的是什么?
#include “defs.h”

#define LOW 0

#define HIGH 5

#define CHANGE 2

Void workover( );

int i=LOW;

main( )

{

auto int i=HIGH;

reset (i/2);PRINT1(d ,i); i= 5

reset (i=i/2);PRINT1(d ,i); i= 2

i=reset(i/2);PRINT1(d ,i); i= 5

 

workover(i);PRINT1(d ,i); i= 0

}

void workover(int i)

{

i=(i&i) * ((i*i)/(2*i) +4);

PRINT1(d ,i); i= 5

}
int reset (int i)

{i=i<=CHANGE? HIGH :LOW;

return(i);

}

考点:函数及其返回值。
 

请问小面这个程序输出的是什么?
#include “defs.h”

int i=1;

main ( )

{auto int i ,j;

i= reset():
for( j=1;j<=3; j++)

{PRINT2(d, i, j);
PRINT1(d,next (i) );

PRINT1(d, last (i) );

PRINT1(d, new(i+j) );

第一次输出:
i= 1 j= 1

next (i) = 1

last (i) =10

new(i+j) =12

 

第二次输出:
i= 1 j= 2

next (i) = 2

last (i) =9

new(i+j) =13

 

第三次输出:
i= 1 j= 3

next (i) = 3

last (i) =8

new(i+j) =14

}

}

int reset(void)

{

return(i);}

int next(int j)

{ return (j=i++);

}

int last (int j)

{static int i=10;

return (j=i--);

}

int new (int i)

{auto int j=10;

return (i=j+=i);

}

考点:函数及其返回值。

 

请问下面这个程序输出的是什么?

#include “defs.h”

int i=1;

main ( )

{auto int i, j;

i=reset();

for( j=1; j<=3;j++)

{ PRINT2(d, i, j);

PRINT1(d,next ( ) );

PRINT1(d, last ( ) );

PRINT1(d, new(i+j));

第一次输出:
i= 1 j= 1

next ( ) = 11

last ( ) = 10

new(i+j) = 7

 

第二次输出:
i= 1 j= 2

next ( ) = 11

last ( ) = 10

new(i+j) = 10

 

第三次输出:
i= 1 j= 3

next ( ) = 11

last ( ) = 10

new(i+j) = 14

 

}

}

在另外一个文件中 在另外一个文件中

static int i=10; extern int i;

next(void) int reset(void)

{return(i+=i); {

} return(i);

Last(void) }

{return(i-=i);

}

new(int i)

{static int j=5;

return(i=j+=i);

}

考点:存于文件中的关联函数。
 

请问下面这个程序输出的是什么?

#include “defs.h”

int a[] ={0, 1, 2, 3, 4};

main( )

{int i, *p;

for (i=0;i<=4; i++) PR(d, a[i] );

NL;

a[i] = 0 a[i] = 1 a[i] = 2 a[i] = 3 a[i] = 4

 

for (p=&a[0]; p<=&a[4]; p++) PR(d, *p);

NL; NL;

*p = 0 *p = 1 *p = 2 *p = 3 *p = 4

 

for (p=&a[0]; i=1; i<=5;i++); PR(d, p[i]);

NL;

p[i] = 1 p[i] = 2 p[i] = 3 p[i] = 4 p[i] =?
 

for (p=a; i=0; p+a<=a+4;p++;i++) PR(d, *(p+i) );

NL; NL;

*(p+i) = 0 *(p+i) = 2 *(p+i) = 4

for (p=a+4;p>=a; p--) PR(d, *p);

NL;

*p = 4 *p = 3 *p = 2 *p = 1 *p = 0

 

for (p=a+4; i=0;i<=4; i++) PR(d, p[-1] );

NL;

p[-i] = 4 p[-i] = 3 p[-i] = 2 p[-i] = 1 p[i] =0

 

for (p=a+4; p>=a; p--) PR(d, a[p-a] );

NL;

a[p-a] = 4 a[p-a] = 3 a[p-a] = 2 a[p-a] = 1 a[p-a] = 0

}

考点:简单的指针和数组
 

请问下面这个程序输出的是什么?

#include “defs.h”

int a[ ] = {0, 1, 2, 3, 4 };

int *p[ ]={a, a+1, a+2, a+3, a+4};

int **pp=p;

main( )

{

PRINT2(d, a, *a);

a = a的地址 *a = 0

 

PRINT3(d, p, *p, **p);

p = p的地址 *p = 0 **p =0

 

PRINT3(d, pp, *pp, **pp);

pp = p的地址 *pp = 0 **pp =0

 

NL;

pp++; PRINT3 (d, pp-p,*pp-a,**pp);

pp-p = 1 *pp-a = 1 **pp = 1

 

*pp++; PRINT3 (d, pp-p,*pp-a, **pp);

pp-p = 2 *pp-a = 2 **pp = 2

 

*++pp; PRINT3 (d, pp-p,*pp-a, **pp);

pp-p = 3 *pp-a = 3 **pp = 3

 

++*pp; PRINT3 (d, pp-p,*pp-a, **pp);

pp-p = 3 *pp-a = 4 **pp = 4

 

NL;

 

pp=p;

**pp++; PRINT3 (d, pp-p,*pp-a,**pp);

pp-p = 1 *pp-a = 1 **pp = 1

 

*++*pp; PRINT3 (d, pp-p,*pp-a,**pp);

顶一下
(2)
100%
踩一下
(0)
0%
标签(Tag):程序设计
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片