重庆理工大学-C语言程序设计基础教程 - 习题答案(纪纲 - 金艳) 下载本文

}

for (j=0;j<3;j++) scanf(\

average(a,N); max(a,N); count(a,N);

8.4.7 编写函数fun(char *str, int num[10]),它的功能是:分别找出字符串中每个数字字符

(0,1,2,3,4,5,6,7,8,9)的个数,用num[0]来统计字符0的个数,用num[1]来统计字符1的个数,用num[9]来统计字符9的个数。字符串由主函数从键盘读入。 #include

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

char *s=str;

for (i=0;i<10;i++) num[i]=0; for (;*s!='\\0';s++) num[s[i]-'0']++; }

void main() { char a[80]; int b[10]; int i; gets(a); fun(a,b); for (i=0;i<10;i++) { printf(\ } }

习题9

9.1 选择题

9.1.1 在宏定义#define PI 3.14159 中,宏名PI代替的是一个( D )。 A) 常量 B) 单精度数 C) 双精度数 D) 字符串

9.1.2 定义一个名为NEW(X)的宏,产生它的参数的负值,正确的语句是( C )。 A) #define NEW(X) -x B)#define NEW(X) x

C) #define NEW(X) (-x) D)#define NEW(X) (-x);

9.1.3 定义一个名为ABSVAL(X)的宏,产生它的参数的绝对值,正确的语句是( D )。 A) #define ABSVAL(X) (-x)

B) #define ABSVAL(X) (x<0 ? –x:x) C) #define ABSVAL(X) (x>0 ? x:-x) D) #define ABSVAL(X) ((x)<0 ?(-x):(x)) 9.1.4 下列格式中哪个是合法的( D)。

A) #define PI=3.14159 B) include "string.h" C) #include math.h; D) #define s(r) r*r 9.1.5 以下程序的输出结果是( B )。

#define MIN(x,y) (x)<(y)?(x):(y) main( )

{ int i=10,j=15,k; k=10*MIN(i,j);

printf("%d\\n",k); }

A) 10 B) 15 C) 100 D) 150 9.1.6 以下有关宏替换的叙述不正确的是( C )。

A) 宏替换只是字符替换 B) 宏名无类型

C) 宏名必须用大写字母表示 D) 宏替换不占用运行时间 9.1.7 设有以下宏定义,则执行语句“z=2*(N+Y(5+1));”后,z值为( C )。 #define N 3

#define Y(n) ((N+1)*n)

A) 42 B) 15 C) 48 D) 出错

9.1.8 设有以下定义:#define F(n) 2*n ,则表达式F(4+2)的值是( B )。 A) 12 B) 10 C) 22 D)20 9.1.9 关于预处理,以下叙述正确的是( B )。

A. 可以把define和if定义为用户标识符(即宏名或常量符号名)

B. 可以把define定义为用户标识符,但不能把if定义为用户标识符 C. 可以把if定义为用户标识符,但不能把define定义为用户标识符 D. define和if都不能定义为用户标识符 9.1.10 关于预处理,以下叙述正确的是( B )。

A. 预处理命令行必须位于C源程序的起始位置 B. 在C语言中,预处理命令行都以“#”开头

C. 每个C程序必须在开头包含预处理命令行:#include D. C语言的预处理不能实现宏定义和条件编译的功能

9.2 编程题

9.2.1 写出下列程序的运行结果,并上机予以验证。 #define LETTER 0 void main( )

{ char str[20]= "C Language",c; int i=0;

while( (c=str[i])!= '\\0' ) { i=i+1; #if LETTER

if( c>='a' &&c<='z' ) c=c-32; #else

if( c>='A' &&c<='Z') c=c+32; #endif

printf("%c",c); } }

运行结果: c language

9.2.2 写出下列程序的运行结果,并上机予以验证。

#define EXCH(a,b) { int t;t=a;a=b;b=t;} void main( ) { int x=5,y=9; EXCH(x,y);

printf("x=%d,y=%d\\n",x,y);

运行结果: x=9,y=5

9.2.3 写出下列程序的运行结果,并上机予以验证。 #define PR(x) printf("%d,",x) void main( )

{ int i,a[ ]={1,3,5,7,9,11,13,15},*p=a+5; for(i=3;i;i--) switch( i ) { case 1:

case 2: PR(*p++);break; case 3: PR(*(--p)); } }

运行结果: 9,9,11

9.2.4 编程,定义一个带参数的宏MAXD,计算从键盘输入两个数值中的最大值。 #include

#define maxd(x,y) x>y? x:y void main() {

int x,y;

printf(\ scanf(\

printf(\}

9.2.5 编程,定义一个带参数的宏,用来判断整数n是否能被5和7同时整除,其中n是由键盘任意输入的整型数据。 #include

#define cube(n) (n%5==0)&&(n%7==0)? 1:0 void main() {int n,t;

printf (\ scanf(\ t=cube(n); if (t==1) printf(\ else printf (\ }

9.2.6 编程,用条件编译方法实现以下功能:

输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如?a?变成?b?,……,?z?变成?a?),其他非字母字符不变。用#include命令来控制是否要译成密码。例如: #define CHANGE 1 则输出密码。若 #define CHANGE 0

则不译成密码,按原码输出。 #include \ #include \void main() {

char str[80],c; int i=0; gets(str);

while(str[i]!='\\0') { #if CHANGE if(str[i]==90||str[i]==122) str[i]=str[i]-25; else if(str[i]>=65&&str[i]<90||str[i]>=97&&str[i]<122) str[i]=str[i]+1; #endif i++; }

puts(str); }

习题10

10.1 填空题

10.1.1 C语言允许定义由不同数据项组合的数据类型,称为 结构 。 10.1.2 结构体 、 共用体 和 数组 都是C语言的构造类型。 10.1.3 结构体变量成员的引用方式是使用 · 运算符。

10.1.4 结构体指针变量成员的引用方式是使用 -> 运算符。 10.1.5 若有定义:

struct num {

int a ; int b ; float f ;