c语言编译预处理及位运算习题答案
- 格式:docx
- 大小:17.25 KB
- 文档页数:6
位运算练习题2007-06-12 10:311.以下运算符中优先级最低的是(C)优先级最高的是( B )A.&&B.&C.||D.|B )2. 如有运算符 sizeof,<<,^&=, 则它们按优先级由高到低的正确摆列次序是( ,&=,<<,^ ,<<,^,&= C.^,<<,sizeof,&= D,<<,^,&=sizeofB )3. 在 C 语言中,要求运算数一定是整型或字符型的运算符是( A.&& B.& C.! D.||(float) 是( C)A.一种函数调用 B. 一个不合法的表示形式 C. 一个整型表达式 D. 一个浮点表达式5. 表达式 0x13&0x17 的值是( B)6.以下程序的运转结果是( C ),70 ,0 ,50 ,76Char x=56; x=x&056; printf(“%d,%n”,x,x);7. 若 x=2,y=3 则 x&y 的结果是( B )D,58. 在履行完以下 C 语句后, B 的值是( B 或 C )注:最好选B,C语言中无bool 型charZ=`A`);intB;B=((241&15)&&(Z|`a`);9. 表达式 0X13|0x17 的值是 ( B)10. 若 a=1,b=2;则a|b的值是(D)11. 如有以下程序段,则履行以下语句后x,y 的值是分别是(C)int x=1,y=2; x=x^y; y=y^x; x=x^y;=1,b=2 =2,y=2 =2,y=1 ==112. 表达式 0x13^0x17 的值是(A)13. 请读程序片段,输出结果是:(C)int x=20; printf((“%d n”,~x);14. 表达式 ~0x13 的值是( 0xffffffec)选项中无答案15. 在们运算中,操作数每右移一位,其结果相当于(B)A. 操作数乘以 2B. 操作数除以 2C. 操作数除以 4D. 操作数乘以416.在位运算中,操作数每左移一位,其结果相当于( A )A. 操作数乘以 2B. 操作数除以 2C. 操作数除以 4D. 操作数乘以417.设有以下语句。
C语言课后习题标准答案第1章C语言概述一、简答题1.(1)语言简洁、紧凑,使用方便、灵活;(2)运算符丰富;(3)具有丰富的数据类型;(4)具有结构化的控制语句;(5)语法限制不太严格,程序设计自由度大;(6)C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接访问硬件;(7)生成目标代码质量高,程序执行效率高;(8)用C语言写的程序可移植性好,基本上不作修改就能用于各种型号的计算机和各种操作系统。
2.顺序结构,分支结构,循环结构3.所谓算法就是为解决一个问题而采取的方法和步骤。
算法的特性:有穷性、确定性、输入、输出、可行性。
表示算法的方式:(1)用自然语言表示;(2)用流程图表示;(3)用N—S流程图表示;(4)用伪代码表示;(5)用计算机语言表示。
二、算法1.瓶子A里盛有醋瓶子B里盛有酱油那一个空瓶C将A中的醋倒入C将B中的酱油倒入A将C中的醋倒入B2.输入一个数放在a中max=a以下步骤重复9次:输入一个数放在a中如果a>max,max=b打印max的值3.如果ﻩﻩa<btemp=aﻩa=bﻩﻩb=temp如果c>aﻩtemp1=aﻩﻩtemp2=ba=cﻩb=temp1ﻩc=temp2否则ﻩ如果ﻩc>bﻩtemp=bﻩb=cﻩc=temp打印a,b,c的值4.i=1sum=0以下程序循环100遍:sum=sum+iﻩi=i+1打印sum的值5.如果(n除以3的余数为0并且n除以5的余数为0)n能够同时被3和5整除否则ﻩn不能够同时被3和5整除6.i=101以下语句循环50遍:ﻩj=2ﻩflag=1ﻩ当j<(i除以2的整数部分)时循环以下语句:ﻩﻩ如果i除以j的余数为零ﻩﻩﻩflag=0ﻩﻩﻩ退出该循环如果flag=1ﻩﻩﻩ打印i的值ﻩi=i+17.如果m<nﻩﻩtemp=mﻩﻩm=nn=tempi=nj=1做以下循环,直到m能够被i/j整除:如果i能够被j整除并且m能够被i/j整除i/j即是m和n的最大公约数ﻩ跳出循环否则ﻩj=j+1打印i/j的值8.data=b*b—4*a*c如果data>0否则如果data=0ﻩx1=x2=—b/2否则无实数解三、编程题1.main(){ﻩprintf(“##############################\n”);ﻩprintf(“How do youdo?\n”);ﻩprintf(“##############################\n”);}2.main(){adata b x2)(1+-=a data b x2)(2--=。
《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
第3章习题解答第1章1.C 言语程序主要由预处理命令、函数、注释等组成。
.2.填空(1)分号(2)main(3)stdio.h3.源程序:include<stdio.h>main( ){printf(“XXXXXXXXXXXXXXXXXXXXXXXXX\n〞); printf(“Hello World!\n〞);printf(“XXXXXXXXXXXXXXXXXXXXXXXXX〞);}4.源程序:include <stdio.h>main( ){int a, b, c; /X 定义变量X/scanf(“%d〞, &a); /X 输入第—个整数X/scanf(“%d〞, &b); /X 输入第二个整数X/c=a-b; /X 计算差X/printf(“%d-%d=%d〞,a,b,c); /X 输出结果X/}5.(1)<stdio.h>(2)x=10;(3)printf(“s=%d\n〞,s);第2章1.(1) c(2) a(3) b g(4) a d e(5) d2. a. 5 b. 295 c. 4 d. 29 e. 93. a.x=4,y=6b. x=4,y=3f.x=3,y=64. 165.include<stdio.h>main(){int a,b,c;scanf("%d%d",&a,&b);c=aXb;printf("%dX%d=%d",a,b,c);}第3章1.(1) b(2) b(3) d(4) a(5) b2.(1)&a,&b(2)l,s3. printf(“x=%.2f,y=%.2f\n〞,x,y);4.include<stdio.h>main(){int num1,num2,num3,sum;float average;scanf("%d%d%d",&num1,&num2,&num3);sum=num1+num2+num3;average=sum/3.0;printf("sum=%d,average=%.2f\n",sum,average);}5.include<stdio.h>main(){int hour,minute,second,total; /X 定义变量代表时、分、秒和总秒数X/ scanf("%d",&total);hour=total/3600;minute=total%3600/60;second=total%3600%60;printf("%dhours:%dminutes:%dseconds\n",hour,minute,second);}第4章1.(1) a(2) b(3) b(4) b(5) b2. 03.(1) 6(2) 4(3) 1(4) 14.include <stdio.h>main( ){int x,y;scanf("%d",&x);if (x>-5 &x<0)y=5Xx;if (x == 0)y=-1;if (x>0 &x<10)y=2Xx+1;printf("x=%d,y=%d\n",x,y);}5.include <stdio.h>main( ){int score,rank; /X score 表示成绩,rank 表示级别X/ printf("Please input score:");scanf("%d",&score);rank=score/10;switch(rank){case 10:case 9: printf("成绩等级为:A\n"); break;case 8: printf("成绩等级为:B\n"); break;case 7: printf("成绩等级为:C\n"); break;case 6: printf("成绩等级为:D\n"); break;default:printf("成绩等级为:E\n"); break; }}6.include<stdio.h>void main(){int n;printf("Please input the digit:");scanf("%d",&n);switch(n){case 1:printf("Jan \n");break;case 2:printf("Feb \n");break;case 3:printf("Mar \n");break;case 4:printf("Apr \n");break;case 5:printf("May \n");break;case 6:printf("Jun \n");break;case 7:printf("Jul \n");break;case 8:printf("Agu \n");break;case 9:printf("Sep \n");break;case 10:printf("Oct \n");break;case 11:printf("Nov \n");break;case 12:printf("Dec \n");break;}}第5章1.(1) b(2) a(3) b(4) d(5) d2. 7,13. y=-14. m=65. 10,146. 37. 58. ABABCDCD9.include <stdio.h>main ( )int i;long int sum=0;for (i=2;i<=200;i+=2)sum+=i;printf("2+4+6+...+200=%ld",sum); }10.include <stdio.h>main(){long int n;int sum = 0;printf("Please input the nber:"); scanf("%ld",&n);while(n != 0){sum += n % 10;n /= 10;}printf("%d\n", sum);}第6章1.(1) d(2) b(3) d(4) c(5) a2. 113. 34. 56895. 12,66. (1) i--(2) n7. (1) char k; (2) i<j8.include <stdio.h>main( ){float a10];int i;float sum=0,average;for (i=0;i<10;i++)printf("a%d]=",i);scanf("%f",&ai]);sum+=ai];}average=sum/10;printf("average is %.2f\n",average);}9.include <stdio.h>define N 10main( ){int aN],i,target,found;for (i=0;i<N;i++)scanf("%d",&ai]);printf("Please input a number:");scanf("%d",&target);i=0;while(i<N &target != ai])i++;found = i<Ni:-1;printf("%d\n",found);}10.include <stdio.h>define N 80main( ){char strN];int len=0,i=0;printf("Please input a string:");gets(str);while (stri++!= 0) len++;printf("the length of string is %d.\n",len); }第7章1. 212. 1363. 164. (1) func (2) m++5. 96. 1,6,3,2,37. 2,5,1,2,3,-28.include <stdio.h>int fun(int a,int b,int c);main( ){int a,b,c,max;printf("Please input three numbers:"); scanf("%d%d%d",&a,&b,&c);max=fun(a,b,c);printf("Max is %d.\n",max);}int fun(int a,int b,int c){int max;max= a>b(a>ca:c):(b>cb:c);return max;}9.include <stdio.h>long int sum(int n);main( ){int n;printf("n=");scanf("%d",&n);printf("Sum=%ld.\n",sum(n));}long int sum(int n){if (n = = 1 ) return 1;else return sum(n-1)+n;}10.include <stdio.h>void fun(n);main( ){int n;printf("n=");scanf("%d",&n);fun(n);}void fun(n)if (n = = 0) return;else{fun(n/2);printf("%-2d",n%2);}}第8章1.(1) b(2) d(3) b(4) c(5) c2. 83. 1234567894. 2 3 4 5 65. 3456. 1 2 3 4 5 67. bi8. bcdefgha9. p=sum10.include <stdio.h>include <string.h>main(){char str80];char Xp1, Xp2;gets(str);p1=str;p2=str+strlen(str)-1;while (p1<p2 &Xp1++ == Xp2-- ) ; puts( p1<p2 "不是回文" : "是回文" ); }第9章1.a. define F(x) (x)X(x)X(x)b. define F(x) (x)%4c. define F(x,y) (x)X(y)<1001:02.b. 4c. define DOUBLE(x) 2X(x)3. d4. -205. N is undefined6. 7.57. y=68.include <stdio.h>define SW AP(a,b) {int temp;temp=a;a=b;b=temp;}main(){int x,y;printf("x=");scanf("%d",&x);printf("y=");scanf("%d",&y);SWAP(x,y)printf("x=%d,y=%d.\n",x,y);}第10章1.struct student{int sno;char sname10];char sex;}stu1,stu2;2. 123. 合法的有a,b,dc.改成s.u.rectangle.length=25;e.改成s.u.circle.radius=5;f.改成s.u.circle.radius=5;4. a,b,c,d (说明:变量b 有确定的值之后,b++是合法的。
精选全文完整版(可编辑修改)c语言面试题目及最佳答案1、描述⼀下gcc的编译过程?gcc编译过程分为4个阶段:预处理、编译、汇编、链接。
预处理:头⼀件包含、宏替换、条件编译、删除注释编译:主要进⼀词法、语法、语义分析等,检查⼀误后将预处理好的⼀件编译成汇编⼀件。
汇编:将汇编⼀件转换成⼀进制⼀标⼀件链接:将项⼀中的各个⼀进制⼀件+所需的库+启动代码链接成可执⼀⼀件2、内存的最⼀存储单位以及内存的最⼀计量单位分别是?内存的最⼀存储单位为⼀进制位,内存的最⼀计量单位字节3、#include<> 与#include ""的区别?include<>到系统指定⼀录寻找头⼀件,#include ""先到项⼀所在⼀录寻找头⼀件,如果没有找再到系统指定的⼀录下寻找4、描述⼀下变量的命名规则变量名有字⼀、数值、下划线组成,但不能以数值开头5、变量的声明与定义有啥区别?声明变量不需要建⼀存储空间,变量的定义需要建⼀存储空间6、谈谈c语⼀中有符号和⼀符号的区别?有符号:数据的最⼀位为符号位,0表示正数,1表示负数⼀符号:数据的最⼀位不是符号位,⼀是数据的⼀部分7、谈谈计算机中补码的意义统⼀了零的编码将符号位与其他位统⼀处理将减法运算转换成加法运算8、谈谈数组的特点同⼀个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的9、数组的分类数组的分类主要是:静态数组、动态数组两类。
静态数组:类似int arr[5];在程序运⼀就确定了数组的⼀⼀,运⼀过程不能更改数组的⼀⼀。
动态数组:主要是在堆区申请的空间,数组的⼀⼀是在程序运⼀过程中确定,可以更改数组的⼀⼀。
10、描述⼀下⼀维数组的不初始化、部分初始化、完全初始化的不同点不初始化:如果是局部数组数组元素的内容随机如果是全局数组,数组的元素内容为0 部分初始化:未被初始化的部分⼀动补0完全初始化:如果⼀个数组全部初始化可以省略元素的个数数组的⼀⼀由初始化的个数确定11、谈谈数组名作为类型、作为地址、对数组名取地址的区别?数组名作为类型:代表的是整个数组的⼀⼀数组名作为地址:代表的是数组⼀元素的地址对数组名取地址:代表的是数组的⼀地址12、谈谈你对⼀维数组在物理上以及逻辑上的数组维度理解⼀维数组在逻辑上是⼀维的,在物理上是⼀维的13、描述⼀下函数的定义与函数的声明的区别函数定义:是指对函数功能的确⼀,包括指定函数名、函数类型、形参及其类型、函数体等,它是⼀个完整的、独⼀的函数单位。
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.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。
第10章位运算10.1典型考试题剖析10.1.1选择题【例1】整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是。
A) x || y B) x | y C) x & y D) x ^ y✧考点:位运算的性质。
✧分析:答案A是两个非0数进行或运算,得到一定为非0值。
答案B是两个非0数进行按位或运算,得到的也一定是非0值。
答案C是两个非0数进行按位与运算,结果可能为0,也可能不为0。
答案D根据位运算的性质可知,一个数和本身进行异或运算的值一定是0。
✧答案:D【例2】以下程序的输出结果是。
main(){ char x=040;printf("%o\n",x<<1);}A) 100 B) 80 C) 64 D) 32✧考点:左移运算。
✧分析:040是八进制数,用二进制表示为00100000,左移1位后得到001000000即64,用八进制输出结果为100。
✧答案:A【例3】在位运算中,操作数每左移1位,相当于。
A) 操作数乘以2 B) 操作数除以2 C) 操作数乘以16 D) 操作数除以16✧考点:左移运算的性质。
✧分析:因为位运算的操作对象是整型数据,所以乘、除2的整数倍可以用移位来实现,左移1位相当乘以2,右移1位相当于除以2,用移位方法作乘除运算速度快。
✧答案:A【例4】下面语句输出结果是。
char a=7;printf("%d,%d",~a,!a);A) 0,8 B) 8,0 C) -8,0 D) 0,-8✧考点:按位取反运算和非运算。
✧分析:此题考察逻辑反和按位取反的区别,求逻辑反时,只要a≠0就按真算,即!a=0;按位取反时,00000111变为11111000此值正好是-8的补码。
✧答案:C【例5】设有以下语句,则z的二进制值是。
char x=3,y=12,z;z=x^y<<2;A ) 00110011 B) 00001111 C) 11110000 D) 00000000✧考点:位运算的优先级。
第10章位运算10.1典型考试题剖析10.1.1选择题【例1】整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是。
A) x || y B) x | y C) x & y D) x ^ y✧考点:位运算的性质。
✧分析:答案A是两个非0数进行或运算,得到一定为非0值。
答案B是两个非0数进行按位或运算,得到的也一定是非0值。
答案C是两个非0数进行按位与运算,结果可能为0,也可能不为0。
答案D根据位运算的性质可知,一个数和本身进行异或运算的值一定是0。
✧答案:D【例2】以下程序的输出结果是。
main(){ char x=040;printf("%o\n",x<<1);}A) 100 B) 80 C) 64 D) 32✧考点:左移运算。
✧分析:040是八进制数,用二进制表示为00100000,左移1位后得到001000000即64,用八进制输出结果为100。
✧答案:A【例3】在位运算中,操作数每左移1位,相当于。
A) 操作数乘以2 B) 操作数除以2 C) 操作数乘以16 D) 操作数除以16✧考点:左移运算的性质。
✧分析:因为位运算的操作对象是整型数据,所以乘、除2的整数倍可以用移位来实现,左移1位相当乘以2,右移1位相当于除以2,用移位方法作乘除运算速度快。
✧答案:A【例4】下面语句输出结果是。
char a=7;printf("%d,%d",~a,!a);A) 0,8 B) 8,0 C) -8,0 D) 0,-8✧考点:按位取反运算和非运算。
✧分析:此题考察逻辑反和按位取反的区别,求逻辑反时,只要a≠0就按真算,即!a=0;按位取反时,00000111变为11111000此值正好是-8的补码。
✧答案:C【例5】设有以下语句,则z的二进制值是。
char x=3,y=12,z;z=x^y<<2;A ) 00110011 B) 00001111 C) 11110000 D) 00000000✧考点:位运算的优先级。
位运算练习题2007-06-12 10:31更1. 以下运算符中优先级最低的是(C)优先级最高的是(B )A.&&B.&C.||D.|2. 若有运算符sizeof,<<]&=, 贝陀们按优先级由高到低的正确排列次序是( B ),& =,<<,A ,<<,A,&= C.A,<<,sizeof,&= D,<<,A,&=sizeof3. 在C语言中,要求运算数必须是整型或字符型的运算符是(B )A.&&B.&C.!D.||(float)是(C)A. —种函数调用B. 一个不合法的表示形式C. 一个整型表达式D. 一个浮点表达式5. 表达式0x13&0x17的值是(B)6. 以下程序的运行结果是(C ),70 ,0 ,50 ,76Char x=56; x=x&056; printf( “ %d,% n” ,x,x);7. 若x=2,y=3 则x&y 的结果是( B )D,58. 在执行完以下C语句后,B的值是(B或C)注:最好选B,C语言中无bool型charZ='A');intB;B=((241&15)&&(Z|'a');9. 表达式0X13|0x17 的值是(B)10. 若a=1,b=2; 则a|b 的值是( D)11. 若有以下程序段,则执行以下语句后x,y 的值是分别是(C)int x=1,y=2; x=x A y; y=y A x; x=x A y;=1,b=2 =2,y=2 =2,y=1 ==112. 表达式0x13A0x17 的值是(A)13. 请读程序片段,输出结果是:(int x=20; printf(( “%d n”,~x);14. 表达式~0x13 的值是 ( 0xffffffec)选项中无答案15. 在们运算中,操作数每右移一位,其结果相当于A.操作数乘以2B.操作数除以2C.操作数除以4D.操作数乘以416.在位运算中,操作数每左移一位,其结果相当于( A )A. 操作数乘以2B. 操作数除以2C. 操作数除以4D. 操作数乘以417.设有以下语句。
目录重要次重要重复或欲删除基础第一章 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.在宏定义#define A 中,宏名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#include <>main( ){ printf(“A=%f ”,A);}程序运行结果为()。
A) = B) =A C) A= 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.以头文件为例,文件包含的两种格式为:_ # include〈〉_,_#include””_。
6.定义宏的关键字是___define______。
7.设有如下运算符:&、|、~、<<、>>、^,则按优先级由低到高的排列顺序为_~、<<、>>、&、^、|______。
8.设二进制数i为00101101,若通过运算“i^j”,使i的高4位取反低4位不变,则二进制数j的值应为______。
9.设无符号整型变量a为6,b为3,则表达式b&=a的值为____2____。
10.整型变量x和y的值相等且为非0值,则表达式x^y的结果为____零____。
二、阅读程序题1.以下程序输出结果是150。
# include〈〉# 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〈〉# define ADD(y) +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 <>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 <>#define MAX(a,b) ((a)>(b)(a):(b)) MACROmax=%d\n",MAX(MAX(m,n),k));printf("2. function max=%d\n",max3(m,n,k));}3. 输入一个整数m,判断它能否被3整除。
要求利用带参的宏实现。
#include <>#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); }。