c语言第8章-编译预处理及位运算习题答案doc资料
编译原理第8章作业及习题参考答案

第八章 语法制导翻译和中间代码生成1.给出下面表达式的逆波兰表示(后缀式): (1) a*(-b+c)(4) (A ∧B) ∨(⌝C ∨ D)(7) if(x+y)*z=0 then s ∶=(a+b)*c else s ∶=a*b*c解(1) ab-c+*(4) AB ∧C ⌝D ∨∨(7) xy+z*0=sab+c*:=sab*c*:=¥(注:¥表示if-then-else 运算)2. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。
答案:三元式(1) (+ a, b) (2) (+ c, d)(3) (* (1), (2)) (4) (- (3), /) (5) (+ a, b)(6) (+,(5),c) (7) (- (4), (6)) 间接三元式间接三元式序列 间接码表 (1) (+ a, b) (1) (2) (+ c, d) (2) (3) (* (1), (2)) (3) (4) (- (3), /) (4)¥= :=*:=+ xyzs +cxa bs* c*a b(5) (- (4), (1)) (1)(6) (- (4), (5)) (5)(6)四元式(1) (+, a, b, t1) (2) (+, c, d, t2) (3) (*, t1, t2, t3) (4) (-, t3, /, t4)(5) (+, a, b, t5) (6) (+, t5, c, t6) (6) (-, t4, t6, t7)3. 采用语法制导翻译思想,表达式E 的"值"的描述如下: 产生式 语义动作(0) S ′→E {print E.VAL}(1) E →E1+E2 {E.VAL ∶=E1.VAL+E2.VAL} (2) E →E1*E2 {E.VAL ∶=E1.VAL*E2.VAL} (3) E →(E1) {E.VAL ∶=E1.VAL} (4) E →n {E.VAL ∶=n.LEXVAL}如果采用LR 分析法,给出表达式(5 * 4 + 8) * 2的语法树并在各结点注明语义值VAL 。
c语言课后习题参考答案

第1章习题参考答案1、选择题(1)C (2)C (3)D (4)B (5)D(6)D (7)C (8)A (9)A (10)C2、填空题(1)函数、一个主函数、函数。
(2) /*、*/ 。
(3) 连接。
(4) # 。
(5) main 。
(6) /*……*/ 。
(7) .h 。
(8) F5 。
(9) .exe (10) .exe 、 .obj 、.exe 。
3、程序设计题(1) #include <stdio.h>void main(){printf(" *\n");printf(" * S *\n");printf(" *\n");}(2) #include <stdio.h>void main(){printf("*****************\n");printf("Your are welcome!\n");printf("-----------------\n");}(3) #include <stdio.h>void main(){char c1,c2;printf("请输入c1和c2的值:");c1=getchar();scanf(" %c",&c2);printf("c1=%c\n",c1);printf("c2=");putchar(c2);printf("\n");}第2章习题参考答案1、简述算法的概念。
答:算法就是为解决一个具体的问题而使用的确定的、有限的方法和步骤。
2、算法应具备哪些特性?答:算法应具备有穷性、确定性、可行性、输入、输出等五种特性。
3、分别说明什么是自然语言描述法?什么是框图语言描述法?什么是伪语言描述法?什么是N-S框图语言描述法?它们的优缺点各是什么?答:①用人们日常使用的语言来描述算法,称为算法的自然语言描述法。
C语言程序设计课后习题答案Word版

第1章(P18)一.单项选择题1.B2.B3.B4.C5.A6.C7.D8.C二. 填空题1. main2. 反斜杠3. 常量、变量、运算符、函数调用、表达式、保留字4. 一 , main , main5. 326. 由字母或下划线开头的字母、数字、下划线组成的一串符号第2章(P39)一.选择题1. D2.B3.B4.B5.D6.A7.B8.D9.A 10.B 11.C 12.C 13.B 14.B15.A 16.D二.填空题1. 控制代码、ASCII码字符集中的任意字符、特殊字符、换行符、Tab符号、左退一格符号、换页符号、响玲符号2. 其值可以发生变化的量 , 变量名 , 变量值 , 存储单元 , short int , -32768~32767 ,long int , -231~(231-1) , unsigned short , 0~65535 , unsigned long , 0~(232-1)3. 自增、自减 , 加和减 , +、-、×、/、% , 自增、自减4. 不同类型混合运算时,由编译系统自动完成5. (1)7 (2)6 (3)7 (4)1 (5)10 (6)0 (7)1 (8)0 (9)0 (10)0三. 运行程序题1. 27.0000002.13.700000第3章(P55)一.选择题1.A2.A3.C4.B5.C6.B二. 填空题1. 回车 , 输入的字符 , 从标准设备(键盘)读入一个字符2. 按用户指定的格式从键盘上把数据输入到指定的变量中 , 格式字符串开头标志 , 控制输入数据的格式 , 输入八进制整数 , 输入单个字符 , 输入字符串3. 一个字符 , #include<stdio.h>4. 按用户指定的格式 , 把指定的数据输出到屏幕上显示 , 格式字符串开头的标志 , 指定输出格式 , 以八进制形式输出无符号整数 , 以小数形式输出单、双精度数 , 输出单个字符 , 输出字符串 , 以%f、%e中较短的宽度输出单、双精度实数.5. (1) -200 , 2500 (2)i=-200 , j=2500 (3)i=-200j=25006. 12 , 0 , 07. 分号8. 100(回车) 100(空格)25.8(空格)1.89234 100(TAB)25.8(TAB)1.8923425.81(回车)1.892349. x=127 , x= 127 , x= 177 , x= 12710. a=513.789215 , a= 513.79 , a= 153.78921500 , a= 513.78921500三. 运行程序题1. a=27; b=15; c=32. p=73. 5 105,34.73125134.73, 34.7312A,65computer, computer4. 575, 767.856400,-789.12402367.86, -789.12,67.856400,-789.124023,67.856400,-789.1240236.78564e+01, -7.9e+02A,65,101,411234567,1234567,d68765529,177771,fff9,-7COMPUTER, COM第四章(P76)一.选择题1.D2.C3.D4.C5.B6.D7.B8.A9.B 10.A 11.C 12.D 13.A 14.A 15.D 16.A 17.A 18.B 二.填空题1.结构化控制、结构、程序的性能、运行2.执行循环体一次、再判断表达式的值、判断、执行3.switch语句、循环语句、循环体三.运行程序题1.(1)0 (2)1 (3)1 (4)0 (5)12.#$#$#$&3.3667784. *************************四.完善程序题1.fabs(t)、t、-s2.=’*’、’\n’、YES第五章(P100)一.选择题1.B2.A3.B4.C5.C6.A7.B8.A9.C二.填空题1.20、0、192.数组名3.越界三.运行程序题1.3572.*************************3.18104.输出一个3×3矩阵的转置矩阵四.完善程序题1.k、-12.&a[i][j]、a[i][i]+a[i][2-i]3.ndigit[10]、ndigit[ch-‘0’]++第六章(P130)一.选择题1.D2.D3.B4.A5.D6.A7.A8.B9.B 10.A 11.B 12.D 13.A 14.A 二.填空题1.函数内部2.函数内部、局部3.return、void4.fun()、extern三.运行程序题1.122.93.10214.215.a=5,b=3a*b=15a+b=86.11101121011310114101151017.238.2226四.修改程序题1.在主函数前加上:float mul(float a,float b);把float mul(float a,b)改为float mul(float a,float b) 2.把z=fabs(x-y);改为z=abs(x-y);3.把输入的整数转换为字符串逆序输出第七章(P160)一、选择题A D D C DB D B A C二、填空题1、取内容、取地址2、3、+33、xyz、x4、1002、1004、1008、1001、10065、286、4、a[2][0]7、6、a[3]三、运行程序题1、porm2、ga3、88884、307四、完善程序题1、++i、i2、0、z第八章(P194)一、选择题D BCBCBDBC二、运行程序题1、36、40、412、133、zhao4、1,1二、填空题1、成员、用指针访问成员2、343、12、6.0000004、34、125、2、36、struct node *next7、num!=p1->info && p1->link=NULL、head=p1->link、p2->link=p1->link第九章(P209)一、选择题1-8 CC A DCDC ( 3错. 32->64)二、填空题1、72、PR(x); PR(y);三、运行程序题1、932、2 123、a=14,b=15,c=04、Hid Ted5、R=2.5 circ=15.707963 area=19.634954第10章(P219)一、B A A A DB AC A C二、1. ~ << >> & ^ |2. 0x22 0xbbbb 0x bb99 001101100 最高补0 最高补101011011 11011011三、1. 12342.15765375765四、 1. 12 <<2. 15 -1第11章一、 B C D B BC C B D二、 1. “w”“rb”“ab+”“rt”“wt+”2. 缓冲文件系统非缓冲文件系统三、完善程序题1、rewind(fp);fp2、"a+";"r";fp1四、编写程序题1、从键盘输入一个字符串(以“#”作为结束符),把文本输出到磁盘文件e.dat中。
新概念C语言能力教程练习08答案

练习88.1 预处理的作用是把源文件中不是纯粹的C语言语句转换成C语言语句,转换通常是通过简单的查找替换实现的。
预处理器和C语言编译器是程序编译的两个阶段。
预处理器先于C语言编译器对C语言源文件进行处理,经过处理后的源文件通常就只有单纯的C语言语句了,被C语言编译器处理后就能变成“可执行程序了”。
8.2 程序中宏和整型变量的标识符都为A在语法上没有问题,因为程序编译分阶段进行。
预处理时,程序中以标识符形式出现的宏会被展开,当编译时,源文件实际为:#include<stdio.h>void main(){int n = 5;printf("A = %d\n", n);}8.3(1)宏名为:LSTR 宏体为:"This is a long string!"(2)宏名为:AREA 宏体为:(r) 3.1415926 * r * r //注意AREA和(r)之间有空格。
(3)宏名为:N 宏体为:100;8.4宏引用N第一次展开为3 * 2 + M 第二次展开为3 * 2 + 5宏引用N * 2第一次展开为3 * 2 + M * 2 第二次展开为3 * 2 + 5 * 2宏引用(N) * 3第一次展开为(3 * 2 + M) * 3 第二次展开为(3 * 2 + 5) * 38.5 测试程序如下:#include<stdio.h>const double PI = 3.1415926;void main(){double r;printf("请输入圆的半径:");scanf("%lf", &r);printf("它的周长为:%f\n", 2 * PI * r);printf("它的面积为:%f\n", PI * r * r);}const常量是属于C语言的核心部分,而符号常量为预处理部分。
谭浩强c语言程序设计习题集

目录重要次重要重复或欲删除基础第一章 C语言概述1.1 选择题1.2 填空题第二章数据类型、运算符与表达式2.1 选择题2.2 填空题第三章最简单的C程序设计3.1 选择题3.2 填空题第四章逻辑运算和判断选取控制4.1 选择题4.2 填空题4.3 编程题第五章循环控制5.1 选择题5.2 填空题5.3 编程题第六章数组6.1 选择题6.2 填空题6.3 编程题第七章函数7.1 选择题7.2 填空题7.3 编程题第八章编译预处理8.1 选择题8.2 填空题8.3 编程题第九章指针9.1 选择题9.2 填空题9.3 编程题第十章结构体和共用体10.1 选择题10.2 填空题10.3 编程题第十一章位运算11.1 选择题11.2 填空题11.3 编程题第十二章文件12.1 选择题12.2 填空题12.3 编程题第一章 C语言概述1.1 选择题*1.1一个C程序的执行是从。
A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束参考答案:A参考分析:C语言总是从main函数开始,main函数结束。
但是C语言中存在一个exit(0)函数,它可以使得程序在任何时候、任何位置结束程序的运行。
如果不考虑exit(0)等函数的特殊作用,C则总是在main函数结束。
*1.2以下叙述正确的是。
A)在C程序中,main函数必须位于程序的最前面B)在C程序的每一行只能写一条语句C)C语言本身没有输入输出语句D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误参考答案:C参考分析:C程序对main函数的位置没有任何要求;其书写格式自由,一行可以写多条语句,一条语句(多关键字语句)可以写在多行;C语言忽略注释,把注释看作是一个空格,不会对注释中的内容进行语法检查。
编译预处理和动态存储分配及答案

编译预处理和动态存储分配及答案编译预处理和动态存储分配一、选择题(1)有以下程序 main(){ char p[]={'a', 'b', 'c'}, q[]=\ printf(\ %d\\n\ };程序运行后的输出结果是 A)4 4 B)3 3 C)3 4 D)4 3(2)有以下程序# define f(x) (x*x) 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 D)64, 64(3)有以下程序 main(){ char a[7]=\ i,j; i=sizeof(a); j=strlen(a); printf(\ %d\\n\}程序运行后的输出结果是 A)2 2 B)7 6 C)7 2 D)6 2(4)以下叙述中正确的是 A)预处理命令行必须位于源文件的开头B)在源文件的一行上可以有多条预处理命令 C)宏名必须用大写字母表示 D)宏替换不占用程序的运行时间(5) 有以下程序 main( ){ char a[]=”abcdefg”,b[10]=”abcdefg”;printf(“%d %d\\n”,sizeof(A) ,sizeof(B) ); }执行后输出结果是 A) 7 7 B) 8 8 C) 8 10 D) 10 10(6) 有以下程序#define f(x) x*x main( ) { int i;i=f(4+4)/f(2+2); printf(“%d\\n”,i); }执行后输出结果是 A) 28 B) 22 C) 16 D) 4(7) 有以下程序 #include #define F(X,Y) (X)*(Y) main (){ int a=3, b=4;printf(\}程序运行后的输出结果是 A) 12 B) 15 C) 16 D) 20(8) 有以下程序main(){ char s[]=\printf(\}执行后输出结果是A) 赋初值的字符串有错 B) 6,7 C) 5,6 D) 6,6(9) 有以下程序main(int arge,char *argv[]) { int n,i=0; while(arv[1][i]!='\\0'{ n=fun(); i++;} printf(%d\\n\}int fun(){ static int s=0; s+=1; return s; }假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行 exam 123 则运行结果为(10) 有以下程序 main(){ char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\\0’};inti=sizeof(a); j=strlen(a); printf(“%d,%d\\b”i,j); }程序运行后的输出结果是 A)9,9 B)8,9 C)1,8 D)9,8(11) 程序中头文件typel.h 的内容是: #define N 5 #define M1 N*3 程序如下:i,j; #define “type1.h” #define M2 N*2 main() { int i;i=M1+M2; printf(“%d\\n”,i); }程序编译后运行的输出结果是: A) 10 B) 20 C) 25 D) 30(12) 有以下程序 #include main() { char *p,*q;p=(char*)malloc(sizeof(char)*20); q=p; scanf(“%s%s”,p,q);printf(“%s%s\\n”,p,q); }若从键盘输入:abc def,则输出结果是: A) def def B) abc def C) abc d D) d d(13) 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是 A) p=2*(int*)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int)); C) p=(int*)malloc(2*2);D) p=(int*)calloc(2,sizeof(int));(14) 以下程序的输出结果是 main(){ char st[20]= “hello\\0\\t\\\\\\”; printf(%d %d\\n”,strlen(st),sizeof(st)); }A) 9 9 B) 5 20C) 13 20 D) 20 20(15) 以下程序的输出结果是amovep(int p, int (a)[3],int n) { int i, j; for( i=0;i 感谢您的阅读,祝您生活愉快。
c语言位试题及答案

c语言位试题及答案1. 位运算符“&”的作用是什么?答案:位运算符“&”的作用是对两个整数的对应位进行逻辑与操作。
2. 请解释“左移”和“右移”操作。
答案:左移操作符“<<”将操作数的所有位向左移动指定的位数,右侧空出的位用0填充。
右移操作符“>>”将操作数的所有位向右移动指定的位数,左侧空出的位用符号位的值填充。
3. 如何使用位运算符实现整数的奇偶判断?答案:可以通过判断整数与1进行“与”操作的结果来判断奇偶。
如果结果为1,则整数为奇数;如果结果为0,则整数为偶数。
4. 请写出一个C语言程序,实现将一个整数的二进制表示中的所有1变为0,所有0变为1。
答案:```c#include <stdio.h>int main() {int num;printf("Enter an integer: ");scanf("%d", &num);num = ~num; // 取反操作printf("Result: %d\n", num);return 0;}```5. 位运算符“^”的作用是什么?答案:位运算符“^”的作用是对两个整数的对应位进行逻辑异或操作。
6. 在C语言中,如何使用位运算符实现一个整数的二进制表示中的特定位的设置、清除和翻转?答案:使用位运算符“|”设置特定位,使用“&”清除特定位,使用“^”翻转特定位。
7. 请写出一个C语言程序,实现将一个整数的二进制表示中的第n位设置为1。
答案:```c#include <stdio.h>int main() {int num, n;printf("Enter an integer and the position to set: "); scanf("%d %d", &num, &n);num |= (1 << (n - 1)); // 设置第n位为1printf("Result: %d\n", num);return 0;}```8. 位运算符“|”的作用是什么?答案:位运算符“|”的作用是对两个整数的对应位进行逻辑或操作。
C语言程序的设计习题集沈国荣-参考答案

《C语言程序设计》习题解答国荣隋雪莉闵芳目录第1章 C语言程序设计概述 (2)第2章数据类型及其运算 (3)第3章语句与输入输出 (4)第4章选择结构程序设计 (6)第5章循环结构程序设计 (9)第6章数组 (12)第7章函数 (15)第8章编译预处理 (18)第9章指针 (19)第10章结构体与共用体 (21)第11章位运算 (25)第12章文件操作 (26)第1章 C语言程序设计概述1. 函数、main()函数2. /*、*/3. .C、.OBJ、.EXE4. 顺序结构、选择结构、循环结构三、编程题1.【参考代码】#include<stdio.h>int main( ){printf( "(学校名称)\n" ) ;printf( "()\n" ) ;return 0 ;}2.【参考代码】#include<stdio.h>int main( ){printf( "(学校名称)\n()\n" ) ;return 0 ;}第2章数据类型及其运算注:第5题B选项为:'\'' '\017' '\t'二、填空题1. 字母、数字、下划线2. 1、4、4、83. -164. 3.55. 06. 97. 68. -609. y%2==110. 1、0、1三、程序阅读题1. b2. 03. 04. 10,25. 9,10,9,106. 3,1,0,07. 3,20,30,1第3章语句与输入输出1. 123.472. D3. 回车4. 10,2三、程序阅读题1. 2612. 203. 201,104. y=4630y=46305. *3.140000,3.142*6. c:dec=120,oct=170,hex=78,ASCII=x7. x=1 y=2 *sum*=310 squared is : 1008. 2 48 20.2 20.29. x+y+z=4810. 55, ,A四、编程题1.【参考代码】#include<stdio.h>int main( ){char ch;printf("请输入一个字符:\n");scanf("%c",&ch);printf("%c的ASCII码为:%d\n", ch,ch);return 0 ;}2.【参考代码】#include<stdio.h>#define PI 3.1416int main( ){double r, h;double cl,cs,cv;printf("请输入圆的半径:");scanf("%lf", &r);printf("请输入圆柱高:");scanf("%lf", &h);cl=2*PI*r;cs=PI*r*r;cv=PI*r*r*h;printf("圆的周长为:%.4lf\n", cl);printf("圆的面积为:%.4lf\n", cs);printf("圆柱的体积为:%.4lf\n", cv);return 0 ;}3.【参考代码】#include<stdio.h>int main( ){int splitInt,one,ten,hundred;printf("输入要处理的整数:");scanf("%d",&splitInt);hundred = splitInt/100;ten = splitInt%100/10;one = splitInt%10;printf("个位:%d,十位:%d,百位:%d\n",one,ten,hundred);return 0 ;}第4章选择结构程序设计1. 102. 2,2,23. 64. 97,b5. c=-16. 88887. 20,08. 2,19. 1,12,22,1-2,210. a=1,b=3三、程序完善题1. a>b、c>x四、编程题1.【参考代码】#include<stdio.h>int main( ){int a, b, c,d,min;printf("输入4个整数:");scanf("%d%d%d%d",&a,&b,&c,&d);if(a < b) min = a;else min = b;if(c < min) min=c;if(d<min) min=d;printf("%d\n",min);return 0 ;}2.【参考代码】#include<stdio.h>int main( ){int num,a,b,c,d;printf("请输入一个四位整数:");scanf("%d",&num);a=num/1000;b=num%1000/100;c=num%100/10;d=num%10;printf("各位数字之和为:%d\n",a+b+c+d);return 0 ;}3.【参考代码】#include<stdio.h>int main( ){int x;printf("请输入x:");scanf("%d",&x);printf("y的值为:");if(x<0)printf("%d\n",x);else if(x<50)printf("%d\n",3*x-2);else if(x<100)printf("%d\n",4*x+1);elseprintf("%d\n",5*x);return 0 ;}4.【参考代码】#include<stdio.h>int main( ){int dj;float zl,je,yfk;printf("请输入等级(1~4): ");scanf("%d",&dj);if (dj>4||dj<1){printf("无此等级的苹果!\n");return 0;}printf("请输入重量(公斤): ");scanf("%f",&zl);printf("\n");switch (dj){case 1 : je=5.5*zl; break;case 2 : je=4.3*zl; break;case 3 : je=3.0*zl; break;case 4 : je=2.5*zl; break;}printf("您选择苹果级别: %d 级\n",dj);printf("您购买苹果重量: %.2f公斤\n",zl);printf("您应付金额为: %.2f元\n",je);printf("\n");printf("顾客所付金额: ");scanf("%f",&yfk);if (yfk<je){printf("Data Error!\n");return 0;}printf("应找您: %.2f元\n",yfk-je);return 0 ;}第5章循环结构程序设计1. 1,2,02 . m=4,n=23. A2C4E64. 1325. 46. k=0,m=57. x=88. 1.69. 998988三、程序完善题1. ( ch > 'Z' && ch <= 'Z' + 4 ) ||(ch > 'z' ) ch - 262. k k/10 continue3. i + t * 10 s = s + t4. fabs( t ) >= 1e-6 f = -f5. i<10 j%3 !=0四、编程题1.【参考代码】#include<stdio.h>int main( ){int n , i , j , k ;printf( "Output:\n" ) ;for(n = 100 ; n < 1000 ; n++ ){i = n % 10 ; /* 个位 */j = ( n / 10 ) % 10 ; /* 十位 */k = n / 100 ; /* 百位 */if ( n == i * i * i + j * j * j + k * k * k )printf( "%d\n" , n ) ;}return 0 ;}2. 【参考代码】#include<stdio.h>int main ( ){int i , m , n , t , p , k ;printf( "Please input: " ) ;scanf ( "%d,%d" , &m , &n ) ;if( m < n ){t = n ;n = m ;m = t ;}p = m * n ;while ( n != 0 ) /* 余数不为0,继续相除,直到余数为0 */ {i = m % n ;m = n ;n = i ;}k = p / m ;printf( "%d,%d\n" , m , k );return 0 ;}3. 【参考代码】#include<stdio.h>int main( ){int i , n , t , sum ;t = 1 ;sum = 0 ;printf( "Please input: n = " ) ;scanf( "%d" , &n ) ;for( i = 1 ; i <= n ; i++ ){t = t * i ;sum = sum + t ;}printf( "1!+2!+…+%d!= %d\n" , n , sum ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){int i , m ;double sum = 0 , k = 1 ;printf( "Please input : m=" ) ;scanf( "%d" , &m ) ;for( i = 1 ; i <= m ; i++ ){sum = sum + k / i ;k = -k ;}printf( "sum=%4.2f\n" , sum ) ;return 0 ;}第6章数组1 82 43 0,24 125 t*M6 mo7 fwo三、程序完善题1 k = i j = ia[k] = max a[j] = min2 sum += score[i] score[i]<avg3 s[i] = s[i] + a[i][j] printf( "\n" ) ;4 j = strlen( str ) – 1 str[j] = k5 ( c = getchar( ) ) != '#' num[c-'A'] += 1四、编程题1. 【参考代码】#include<stdio.h>#define N 5int main( ){int a[N] , i , j , r , temp ;printf( "Please input %d numbers\n" , N ) ;for( i = 0 ; i < N ; i++ )scanf( "%d" , &a[i] ) ;for( i = 0 ; i < N - 1 ; i++ ){r = i ;for( j = i + 1 ; j < N ; j++ )if( a[j] < a[r] )r = j ;if( r != i ){temp = a[r] ;a[r] = a[i] ;a[i] = temp ;}}printf( "The array after sort:\n" ) ;for( i = 0 ; i < N ; i++ )printf( "%5d" , a[i] ) ;printf( "\n" ) ;return 0 ;}2. 【参考代码】#include<stdio.h>int main( ){int a[10] = { 1 , 2 , 3 , 6 , 7 , 8 , 9 , 10 } ;int x , j , k = 0 ;printf( "Please input :x= " ) ;scanf( "%d" , &x) ;if( x > a[7] )a[8] = x ;else{for( j = 0 ; j < 8 ; j++ )if( x < a[j] )break ;for(k = 8 ; k > j ; k-- )a[k] = a[k - 1] ;a[j] = x ;}for( j = 0 ; j < 9 ; j++ )printf( "%5d" , a[j] ) ;printf( "\n" ) ;return 0 ;}3. 【参考代码】#include<stdio.h>int main( ){int a[5][5] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, 22,23,24} ;int i , j ,sum = 0 ;for ( i = 0 ; i < 5 ; i++ ){for ( j = 0 ; j < 5 ; j++)printf( "%4d" , a[i][j] ) ;printf( "\n" ) ;}for( i =0 ;i < 5 ; i++ )sum += a[i][i] ;printf( " sum=%4d\n" , sum ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){char s1[100] , s2[30] ;int i , j ;printf( "Please input s1:" ) ;gets( s1 ) ;printf( "Please input s2:" ) ;gets( s2 ) ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;for( j = 0 ; s2[j] != '\0' ; j++ , i++ ) s1[i] = s2[j] ;s1[i] = '\0' ;printf( "Output\ns1:" ) ;puts( s1 ) ;return 0 ;}5. 【参考代码】#include<stdio.h>int main( ){char s1[100] ;int i ;printf( "Please input s1:" ) ;gets( s1 ) ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;printf( "The length of s1 is %d\n" ,i ) ;return 0 ;}第7章函数1 max is 22 a=1,b=23 1 114 a=11,b=12,c=25 66 7 8 97 8 178 0 1 2 0 1 2三、程序完善题1 float area ( float r ) return s2 z = fun( x , y ) z = z * x3 count =fun( score ) count++四、编程题1. 【参考代码】#include<stdio.h>int main( ){void f(int n) ;int n ;printf( "Please input: n= " ) ;scanf( "%d" , &n ) ;if( n <= 0)printf( "Wrong number!\n" ) ;elsef( n ) ;return 0 ;}void f(int n){if( n % 2 == 1 )printf( "%d is a odd number.\n" , n ) ;elseprintf( "%d is a even number.\n" , n ) ; }2. 【参考代码】#include < stdio.h >#include < math.h >int main( ){void f( int m ) ;int m ;printf( "Please input: m= " ) ;scanf( "%d" , &m ) ;f( m ) ;return 0 ;}void f( int m ){int i , k ;k = sqrt( m );for(i = 2 ; i <= k ; i++ )if( m % i == 0 )break;if (i >= k + 1 )printf( "%d is a Prime Number.\n" , m ) ;elseprintf( "%d is not a Prime Number.\n" , m ) ; }3. 【参考代码】#include<stdio.h>int gys( int m , int n ){int r ;r = m % n ;while( r != 0 ){m = n ;n = r ;r = m % n ;}return n ;}int gbs( int m , int n , int r ){return m * n / r ;}int main( ){int m , n , t ;printf( "Please input(m,n):" ) ;scanf( "%d%d" , &m , &n ) ;if( m < n ){t = m ;m = n ;n = t ;}t = gys( m , n ) ;printf( "gys=%d\n" , t ) ;t = gbs( m , n , t ) ;printf( "gbs=%d\n" , t ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){void mystrcat( char s1[100] , char s2[30] ) ;char s1[100] , s2[30] ;printf( "Please input s1:" ) ;gets( s1 ) ;printf( "Please input s2:" ) ;gets( s2 ) ;mystrcat( s1 , s2 ) ;printf( "Output\ns1:" ) ;puts( s1 ) ;return 0 ;}void mystrcat( char s1[100] , char s2[30] ){int i , j ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;for( j = 0 ; s2[j] != '\0' ; j++ , i++ )s1[i] = s2[j] ;s1[i] = '\0' ;}第8章编译预处理1 6,182 153 5第9章指针二、填空题1. 地址, NULL(或0)2 . char a, *p; , scanf("%c", &a); , p=&a;3. *m4. for( k=0; k<10; k++ )5. *(p+i) , p[i] , *(x+i)6. str[i]或*( str + i ) , i三、程序阅读题1. gae2. bcdABCD3. 7, 8, 84. 8 45. 3 14 26. efgh7. w,one8. 7四、程序完善题1. a[i] 或 *( a + i )2. *p!='\0' *p-'0'3. p1 p2-x4. max(int a , int b ); p = max四、编程题1.【参考代码】#include<stdio.h>void sort( int *a , int *b , int *c );int main(){int m , n , t ;printf( "Please input(m n t):" ) ;scanf( "%d%d%d" , &m , &n , &t ) ;sort( &m , &n , &t ) ;printf( "The result is :%d\t%d\t%d\n" , m , n , t ) ;return 0 ;}void sort( int *a , int *b , int *c ){int temp ;if( *a > *b ) { temp = *a ; *a = *b ; *b = temp ; }if( *a > *c ) { temp = *a ; *a = *c ; *c = temp ; }if( *b > *c ) { temp = *b ; *b = *c ; *c = temp ; }}2.【参考代码】程序1:#include <stdio.h>int strcompare( char *str1 , char *str2 );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;m = strcompare ( s1 , s2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) ) i++ ;return( *( str1 + i ) - *( str2 + i ) ) ;}程序2:#include <stdio.h>int strcompare( char *str1 , char *str2 );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;p1 = s1 ;p2 = s2 ;m = strcompare ( p1 , p2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) ) i++ ;return( *( str1 + i ) - *( str2 + i ) ) ;}程序3:#include <stdio.h>int strcompare( char str1[] , char str2[] );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;p1 = s1 ;p2 = s2 ;m = strcompare ( p1 , p2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( str1[i] == str2[i] ) &&( str1[i] != '\0' ) )i++ ;return( str1[i]- str2[i] ) ;}第10章结构体与共用体1. 112 . p->next=head->next head->next=p3. p->next三、程序阅读题1. 51,60,212. 163. 1001,ChangRong,1098.0四、程序完善题1. sizeof( struct ps ) 或 sizeof( bt )2. p=p->next3. person[i].sex五、编程题1.【参考代码】#define N 3#include <stdio.h>struct student{char num[6] ;char name[8] ;int score[2] ;float ave ;} ;void input( struct student stu[N] ) ;void average( struct student stu[N] ) ;int max( struct student stu[N] ) ;int main( ){int i , j ;struct student stu[N] ;input( stu ) ;average( stu ) ;printf( "No\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){printf( "%s\t%s\t" , stu[i].num , stu[i].name ) ;for( j = 0 ; j < 2 ; j++ )printf( "%d\t" , stu[i].score[j] ) ;printf( "%8.2f\n" , stu[i].ave ) ;}i = max( stu ) ;printf( "\nThe max is:\n" ) ;printf( "No\tName\tScore1\tScore2\tAverage\n" ) ;printf( "%s\t%s\t" , stu[i].num , stu[i].name ) ;for( j = 0 ; j < 2 ; j++ )printf( "%d\t" , stu[i].score[j] ) ;printf( "%5.2f\n" , stu[i].ave ) ;return 0;}void input( struct student stu[N]){int i , j ;for(i=0;i<N;i++){printf("\nPlease input No%d student:\n",i+1);printf("No:");scanf("%s",stu[i].num);printf("Name:");scanf("%s",stu[i].name);for(j=0;j<2;j++){printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);}}}void average( struct student stu[N]){int i , j , sum ;for(i=0;i<N;i++){for(j=0 , stu[i].ave = 0 ;j<2;j++)stu[i].ave += stu[i].score[j];stu[i].ave = stu[i].ave / 2 ;}}int max( struct student stu[N]){int i , max , index;max = stu[0].ave ;index = 0 ;for( i = 1 ; i < N ; i++ ){if( max < stu[i].ave ){max = stu[i].ave ;index = i ;}}return index;}2.【参考代码】#include<stdio.h>#include<stdlib.h>struct node{short int data ;struct node *next ;} ;typedef struct node NODE ;struct node *CreatLink( ) ;void PrintLink( NODE *head ) ;int max( NODE *head );int main( ){NODE *head ;int max_value ;head = CreatLink( ) ;PrintLink( head ) ;max_value = max( head ) ;printf( "The max is:%d\n" , max_value ) ;return 0 ;}struct node *CreatLink( ){NODE *head , *p , *q ;short int num ;head = ( NODE * )malloc( sizeof( NODE ) ) ;head->next = NULL ;p = head ;printf( "Please input( end of -1)!:\n" ) ;scanf( "%d" , &num ) ;while( num != -1 ){q = ( NODE *)malloc( sizeof( NODE ) ) ;q->data = num ;p->next = q ;p = q ;scanf( "%d" , &num ) ;}p->next = NULL ;return head ;}void PrintLink( NODE *head ){NODE *p;p = head->next ;printf( "The data is:\n" ) ;while( p != NULL ){printf( "%4d" , p->data ) ;p = p->next ;}printf( "\n" ) ;}int max( NODE *head ){NODE *p;short int max = -32768;p = head->next ;while( p != NULL ){if( max < p->data )max = p->data ;p = p->next ;}return max ;}第11章位运算1. 0000 11112 . x | ff003. 4 3三、程序阅读题1. 02. 11 223. 0四、编程题1.【参考代码】#include<stdio.h>int main(){short int data , low ,high ;printf( "Please input( short int):" ) ;scanf( "%d" , &data ) ;low = data & 0x00ff ; /* 0x00ff表示低字节全1 */high = data & 0xff00 ; /* 0xff00表示高字节全1 */printf( "data:0x%x,the value of low byte is:0x%x\n" , data , high ) ;printf( "data:0x%x,the value of high byte is:0x%x\n" , data , low ) ;return 0 ;}2.【参考代码】#include <stdio.h>int main( ){short int data , result ;printf( "Please intput(short int):" ) ;scanf( "%d" , &data ) ;result = data ^ 0x000f ; /* 0x000f表示低4位全1,高12位全0 */printf( "The data is 0x%x \nThe result is :0x%x\n" , data,result ) ;return 0 ;}第12章文件操作二、填空题1. 二进制 ASCII(文本)2 . FILE *fp # include <stdio.h>3. n – 1 buf的首地址4. 15. 用以获得文件读写位置标记指针的位置,函数返回值为当前文件读写位置标记指针相对于文件开头的字节数6. 使文件读写位置标记指针重新返回文件的开头三、程序阅读题1. 1 22. end3. 34. hello,四、程序完善题1. ! feof (fp) fgetc (fp)2. fopen (“num.dat”,”r”) fp,”%d”,&temp z++3. ( ch=getchar() ) ch , fp五、编程题1.【参考代码】#include<stdio.h>#include<stdlib.h>#include<string.h>int main( ){FILE *fp ;char str[100] , filename[10] ;int i = 0 ;if( ( fp = fopen( "upper.txt" , "w+" ) ) == NULL ){printf( "Cannot open file!\n" ) ;exit( 0 ) ;}printf( "Please input(string):\n" ) ;gets( str ) ;while( str[i] != '!' ){if( str[i] >= 'a' && str[i] <= 'z' )str[i] = str[i] - 32 ;fputc( str[i] , fp ) ;i++ ;}rewind( fp ) ;fgets( str , strlen( str ) + 1 , fp ) ;printf( "\nThe result is :\n" ) ;printf( "%s\n" , str ) ;fclose( fp ) ;return 0 ;}2.【参考代码】#include<stdio.h>#include<stdlib.h>#define N 5struct student{char num[10] ;char name[8] ;int score[3] ;float ave ;} stu[N] ;int main( ){int i , j , sum ;FILE *fp ;for( i = 0 ; i < N ; i++ ){printf( "\nPlease input student information: \n" , i + 1 ) ;printf( "No:" ) ;scanf( "%s" , stu[i].num ) ;printf( "Name:" ) ;scanf( "%s" , stu[i].name ) ;sum = 0 ;for( j = 0 ; j < 3 ; j++ ){printf( "Score%d:" , j + 1 ) ;scanf( "%d" , &stu[i].score[j] ) ;sum += stu[i].score[j] ;}stu[i].ave = sum / 3.0 ;}if( ( fp = fopen( "stud.dat" , "w" ) ) == NULL ){printf( "cannot open stud for write!\n" ) ;exit( 0 ) ;}for( i = 0 ; i < N ; i++ ){fwrite( &stu[i] , sizeof( struct student ) , 1 , fp ) ;}fclose( fp ) ;if( ( fp = fopen( "stud.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof( struct student ) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;}fclose( fp ) ;return 0 ;}3.【参考代码】#include<stdio.h>#include<stdlib.h>#define N 5struct student{char num[10] ;char name[8] ;int score[3] ;float ave ;} stu[N] ;int main( ){int i , j , min , index ;FILE *fp ;struct student temp ;/*从stud.dat文件中读入数据,存放在stu数组中*/if( ( fp = fopen( "stud.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nThe data is :" ) ;printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof(struct student ) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;}fclose( fp ) ;/*对stu数组中数组元素按其平均值数据域排序*/for( i = 0 ; i < N -1 ; i++ ){min = stu[i].ave ;index = i ;for( j = i + 1 ; j < N ; j++ ){if( min > stu[j].ave )index = j ;}if( index != i ){temp = stu[i] ;stu[i] = stu[index] ;stu[index] = temp ;}}/*将排序之后的stu数组存放在stu_sort文件中*/if( ( fp = fopen( "stu_sort.dat" , "w" ) ) == NULL ){printf( "cannot open stud for write!\n" ) ;exit( 0 ) ;}for( i = 0 ; i < N ; i++ ){fwrite( &stu[i] , sizeof(struct student) , 1 , fp ) ;}fclose( fp ) ;/*将stu_sort文件中的数据,读出存放在stu数组中*/. .页脚if( ( fp = fopen( "stu_sort.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nThe result is:" ) ;/*将stu数组中的数据输出*/printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof(struct student) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name ,stu[i].score[0] , stu[i].score[1] ,stu[i].score[2] , stu[i].ave ) ;}fclose( fp ) ;return 0 ;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c语言第8章-编译预处理及位运算习题答案编译预处理习题一.单项选择题1.在宏定义#define A 3.897678中,宏名A代替一个()。
A)单精度数 B)双精度数 C)常量 D)字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理()。
A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是()。
A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是A)#define和printf都是C语句 B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C 语句6.#define A 3.897678#include <stdio.h>main( ){ printf(“A=%f ”,A);}程序运行结果为()。
A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b#define LJ(a,b) (a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是()。
A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=218.有以下程序# define f(x) (x*x)main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %d\n",i1,i2);}程序运行后的输出结果是A)64, 28 B)4, 4 C)4, 3D)64, 649.以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf(“%d\n”, M(a+b,b+c, c+a));}A) 19 B) 17 C) 15 D) 1210.有以下程序#define N 5#define M1 N*3#define M2 N*2main(){ int i;i=M1+M2; printf(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A) 5 B) 6C) 7 D) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。
A) 整型原码B) 整型补码 C)数值原码 D) 数值补码13.在位运算中,若左移时丢弃的高位不包含1,则每左移一位,相当于-_____。
A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以414.设 int b=8;表达式(b>>2)/(b>>1)的值是________。
A) 0 B) 2 C) 4 D) 815.若定义unsigned int a=3,b=10;printf("%d\n",a<<2|b==1);则运行结果为________。
A)13 B)12 C)8 D)14二.填空题1.C提供的预处理功能主要有__宏定义____、__文件包含____、___条件编译__等三种。
2.C规定预处理命令必须以____#______开头。
3.在预编译时将宏名替换成____宏定义中的“字符串”___的过程称为宏展开。
4.预处理命令不是C语句,不必在行末加______;_____。
5.以头文件stdio.h为例,文件包含的两种格式为:_ # include〈stdio.h〉_,_# include”stdio.h”_。
6.定义宏的关键字是___define______。
7.设有如下运算符:&、|、~、<<、>>、^,则按优先级由低到高的排列顺序为_~、<<、>>、&、^、|______。
8.设二进制数i为00101101,若通过运算“i^j”,使i的高4位取反低4位不变,则二进制数j的值应为__11110000____。
9.设无符号整型变量a为6,b为3,则表达式b&=a的值为____2____。
10.整型变量x和y的值相等且为非0值,则表达式x^y的结果为____零____。
二、阅读程序题1.以下程序输出结果是150。
# include〈stdio.h〉# define MAX(x,y) (x)>(y)?(x):(y)main(){int i,z,k;z=15;i=z-5;k=10*(MAX(i,z));printf(“%d\n”,k);}2.以下程序输出结果是23 。
# include〈stdio.h〉# define ADD(y) 3.54+y# define PR(a) printf(“%d”,(int)(a))# define PR1(a) PR(a);putchar(‘\n’)main(){int i=4;PR1(ADD(5)*i);}3.设有如下宏定义:#define MYSWAP(z,x,y) {z=x;x=y;y=z;}以下程序段通过宏调用实现变量a、b内容交换,请填空。
float a=5,b=16,c;MYSWAP( c ,a,b);4.下列程序的输出结果是1000 10。
#define N 10#define s(x) x*x#define f(x) (x*x)main(){ inti1,i2;i1=1000/s(N);i2=1000/f(N);printf(“%d %d\n”,i1,i2);} 5.以下程序输出结果是8 20 12 。
main( ){int b=5;#define b 2#define f(x) b*(x)int y=3;printf(“%d”,f(y+1));#undef bprintf(“%d”,f(y+1));#define b 3printf(“%d\n”,f(y+1));}6.下列程序的输出结果是11。
#define NX 2+3#define NY NX*NXmain(){ int i=0,m=0; for(;i<NY;i++)m++; printf(“%d\n”,m);} 7.下列程序的输出结果是MIN。
#define MAX(a,b) a>b#define EQU(a,b) a==b#define MIN(a,b) a<bmain(){ int a=5,b=6;if(MAX(a,b)) printf(“MAX\n”);if(EQU(a,b)) printf(“EQU\n”);if(MIN(a,b)) printf(“MIN\n”);}8.下列程序的输出结果是0 1 1。
#define TESTmain( ){ int x=0,y=1,z; z=2*x+y;#ifdef TESTprintf(“%d %d ”,x,y);#endifprintf(“%d\n”,z);}三.编程题1. 定义一个带参的宏,求两个整数的余数。
通过宏调用,输出求得的结果。
#define R(m,n) (m)%(n)#include <stdio.h>void main(){ int m,n;printf("enter two integers:\n");scanf("%d%d",&m,&n);printf("remainder=%d\n",R(m,n));}2. 分别用函数和带参的宏,从3个数中找出最大者。
#include <stdio.h>#define MAX(a,b) ((a)>(b)?(a):(b)) // implementationby MACROint max3(int a,int b,int c) //implementationby function{int m;m=a>b?a:b;m=m>c?m:c;return m;}void main(){ int m,n,k;printf("enter 3 integer:\n");scanf("%d%d%d",&m,&n,&k);printf("1. MACRO max=%d\n",MAX(MAX(m,n),k));printf("2. function max=%d\n",max3(m,n,k));}3. 输入一个整数m,判断它能否被3整除。
要求利用带参的宏实现。
#include <stdio.h>#define DIVIDEDBY3(m) (m)%3==0void main(){ int m;printf("enter a integer:\n");scanf("%d",&m);if(DIVIDEDBY3(m))printf("%d is divided by 3\n",m);elseprintf("%d is not divided by 3\n",m);}。