《C语言程序设计》习题集 下载本文

《C语言程序设计》习题集

{ static int m=0, i=2; i+=m+1; m=i+a+b; return m; }

5、函数fun的功能是计算x。

double fun(double x,int n) { int i; double y=1;

for(i=1;i<=n;i++) y=y*x; return y; }

主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:m=a4 + b4 -(a+b)3。实现这一计算的函数调用语句为 。 6、以下程序运行后的输出结果是 int a=5; fun(int b)

{ static int a=10; a+=b++;

printf(\}

void main() { int c=20; fun(c); a+=c++;

printf(\}

n三、编程题

1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用两个函数,并输出结果,两个整数由键盘输入。

2、写一个判断素数的函数在主函数输入一个整数,输出是否是素数的信息。 3、写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

4、写一函数,输入一个4位数字,要求输出4个数字字符,但每两个数字间有一个空格。如输入2008,应输出“2 0 0 8”。

- 32 -

《C语言程序设计》习题集

第九章 预处理命令

一、选择题

1、以下叙述中正确的是( )。

A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令

C)宏名必须用大写字母表示 D)宏替换不占用程序的运行时间 2、有如下程序

#define N 2

#define M N+1 #define NUM 2*M+1 #void main() { int i;

for(i=1;i<=NUM;i++)printf(“%d\\n”,i); }

该程序中的for循环执行的次数是( )。

A) 5 B) 6 C) 7 3、有以下程序

# define f(x) (x*x) void main() { int i1, i2;

i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ; printf(\ }

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

A)64, 28 B)4, 4

C)4, 3 二、填空题

1、以下程序运行后的输出结果是 。

#define S(x) 4*x*x+1 void main() { int i=6,j=8;

printf(\}

2、以下程序中, for循环体执行的次数是 。#define N 2 #define M N+1

#define K M+1*M/2 void main() { int i;

for(i=1;i

- 33 -

D) 8 D)64, 64

《C语言程序设计》习题集

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

#define MCRA(m) 2*m #define MCRB(n,m) 2*MCRA(n)+m void main() { int i=2,j=3;

printf(\} 4、下面程序的运行结果是 #define N 10 #define s(x) x*x #define f(x) (x*x) void main() { int i1,i2;

i1=1000/s(N); i2=1000/f(N); printf(“%d %d\\n”,i1,i2); }

5、设有如下宏定义

#define MYSWAP(z,x,y) {z=x; x=y; y=z;} 以下程序段通过宏调用实现变量a、b内容交换,请填空。

float a=5,b=16,c; MYSWAP( , a, b); 6、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每

一行上的最大值。请填空。

#define N 3 #define M 4

void LineMax(int x[N][M]) { int i,j,p;

for(i=0; i

for(j=1; j

if(x[i][p]

void main()

{ int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1}; } 三、编程题

1、定义一个带参数的宏,使两个参数的值互换,并写程序,输入两个数作为使用宏 时的实参。输出已交换后的两个值。

2、分别用函数和带参的宏,从3个数中找出最大数。

3、给年份year,定义一个宏,以判断该年份是否闰年,用带参的宏实现。

- 34 -

《C语言程序设计》习题集

第十章 指针

一、选择题

1、若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是( ) A)p+1 B)a+1 C)a++ D)++p 2、设有定义:int n1=0,n2,*p=&n2,*q=&n1;以下赋值语句中与n2=n1;语句等价的是 A)*p=*q; B)p=q; C)*p=&n1; D)p=*q; ( )。 3、有以下程序 float f1(float n) { return n*n; } float f2(float n) { return 2*n; } void main()

{ float (*p1)(float),(*p2)(float),(*t)(float), y1, y2; p1=f1; p2=f2; y1=p2( p1(2.0) );

t = p1; p1=p2; p2 = t; y2=p2( p1(2.0) );

printf(\ }

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

A)8, 16 B)8, 8 C)16, 16 D)4, 8

4、有以下程序

void main() {

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

for(i=0;i<3;i++)

printf(\}

程序运行后的输出结果是( )。 A)0 1 2 B)1 2 3 C)2 3 4

D)3 4 5

5、以下语句或语句组中,能正确进行字符串赋值的是( )。 A)char *sp; *sp=\B)char s[10]; s=\C)char s[10]; *s=\D)char *sp=\6、有以下程序

void main() {

char s[]=\ p=s;

- 35 -