}
int a[N][3]; int i,j;
for (i=0;i 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 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 结构体指针变量成员的引用方式是使用 -> 运算符。