A. 0 B.1 C.TRUE D. FALSE 7. 若有以下程序段
int x=20; printf(“%d\\n”,~x) ;
则执行以上语句后的输出结果是( )。
A. 02 B. -20 C. -21 D. -11 8. 若有以下程序段
char x=3,y=6,z ; z = x^y<<2 ;
则执行以上语句后,z的值是( ) 。
A.00010100 B.00011011 C.0001100 D.00011000 9. 设位段的空间分配由右到左,则以下程序的运行结果是( )。
struct packed
{ unsigned a : 2 ; unsigned b : 3 ; unsigned c : 4 ; int i ;} data ; main ( )
{ data.a=8 ; data.b=2 ;
printf(“%d\\n”,data.a+data.b) ; }
A.语法错 B.2 C.5 D.10 10. 设有以下说明
struct packed
{ unsigned one:1 ; unsigned two:2 ; unsigned three:3 ; unsigned four:4 ; } data ;
则以下位段数据的引用中不能得到正确数值的是( )。
A.data.one=4 B.data.two=4 C.data.three=2 D.data.four=1
二. 填空题
1. 若有运算符<<,sizeof,^,&=,则按优先级由高到低排列为 。
2. 设有char a,b;若要通过a&b运算屏蔽掉a中的其它位,只保留第1和第7位(右起为第0位),则
b的二进制数是 。
3. 测试char型变量a第五位是否为1的表达式是 。
4. 把int型变量low中的低字节及变量high中的高字节放入变量s中的表达式
是 。 5. 以下函数:
unsigned getbits(unsigned x ,unsigned p, unsigned n) { x = ((x<<(p+1-n) & ~((unsigned)~0>>n) ; return (x) ; }
若调用此函数时x=0115032, p=7, n=4, 则函数返回值是 。 6. 若x=0123,则表达式(5+(int)(x))&(~2)的值是 。
三. 程序分析题
1. # define F(y) 15>>y
# define PRINT(a) printf(″﹪d″,a) main() { PRINT(F(2)); } 2. #include
main()
{ int i,j; i=j=20; i++; j--; printf(\3. int fun(unsigned x) { int b;
for (b=0; x!=0; x&=x-1) b++;
return b;
}
main() { printf(\4. #include
{ int a=40,b=60; a=a^b; b=a^b; a=a^b; printf(\5. #include
{ unsigned m=0x8000; int i,j; for (i=0; i<16; i++) {
printf(\ if (i==7) printf(\ m>>=1; } }
main()
{ fun(97); } 6. #include
{ struct bit {unsigned b0:1,b1:1,b2:1,b3:1,b4:1,b5:1,b6:1,b7:1;} *p; char s[]=\ while (s[i]!=NULL) { p=(struct bit*)s[i];
sum=p->b0+p->b1+p->b2+p->b3+p->b4+p->b5+p->b6; printf(\ i++; } }
四. 编程题
1. 编写一个函数,对一个unsigned int 变量取出它的奇数位(即从右边起第1,,3,5,7,??,15
位)。
2. 编一函数用来实现左右循环移位。函数名为move,调用方法为move(value,n);其中value为要循环移
位的数,n为移位的位数。如果n<0表示左移,n>0表示右移,n=0表示不移位。 3. 编写一个函数,给出一个数的原码,得到该数的补码。
第 13 章
一. 选择题
文件
1. 将一个整数10002存到磁盘上,以ASCII码形式存储和以二进制形式存储,占用的字节数分别是
( )。 A. 2和2 B. 2和5 C. 5和2 D. 5和5 2. 若执行fopen函数时发生错误,则函数的返回值是( )。
A.地址值 B.0 C.1 D.EOF
3. 若要用fopen函数打开一个新的二进制文件,该文件既要能读也能写,则文件打开方式字符串应是
( )。
A.”ab+” B.”wb+” C.”rb+” D.”ab” 4. 利用fseek函数可实现的操作是( )。
A. 改变文件的位置指针 B.文件的顺序读写 C. 文件的随机读写 D.以上答案均正确
5. 函数ftell(fp)的作用是( )。
A.得到流式文件中的当前位置 B.移动流式文件的位置指针 C.初始化流式文件的位置 D.以上答案均正确
二. 填空题
1. C语言流式文件的两种形式是 和 。
2. C语言打开文件的函数是 ,关闭文件的函数是 。
3. 按指定格式输出数据到文件中的函数是 ,按指定格式从文件输入数据的函数
是 ,判断文件指针到文件末尾的函数是 。
4. 输出一个数据块到文件中的函数是 ,从文件中输入一个数据块的函数
是 ;输出一个字符串到文件中的函数是 ,从文件中输入一个字符串的函数是 。
5. feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为 ,否则为 。 6. 在C语言中,文件的存取是以 为单位的,这种文件被称作 文件。
三. 程序填空题
1. 以下程序的功能是将文件file1.c的内容输出到屏幕上并复制到文件file2.c中。 #include
{ FILE ;
fp1=fopen(“file1.c”,”r”); fp2=fopen(“file2.c”,”w”); while (!feof(fp1)) putchar(getc(fp1));
while (!feof(fp1)) putc( ); fclose(fp1); fclose(fp2) ; }
2. 下面程序的功能是将由命令行给出的某源程序文件加行号显示出来(行号从1开始)。 #include
main(int argc,char *argv[]) { FILE *in;
char line[81]; int row;
if ( ) { printf(\exit(1); }
if ((in=fopen(argv[1],\
printf(\
row=0;
while ( fgets(line,81,in)!= ) { printf(\ }
; }
四. 程序编写
1. 统计一个文本文件中数字、空格、字母出现的次数,以及文件的字节数,并将结果输出,文本文件
名由命令行给出。
2. 有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩),
计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“Stud”中。 3. 编写一个程序并取名test.c,统计该文件中出现”if”,”while”,”for”的次数。