结构体位运算文件练习.docx
- 文档编号:5653056
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:24
- 大小:31.28KB
结构体位运算文件练习.docx
《结构体位运算文件练习.docx》由会员分享,可在线阅读,更多相关《结构体位运算文件练习.docx(24页珍藏版)》请在冰豆网上搜索。
结构体位运算文件练习
八、结构体与共用体
8.1选择题
1.以下程序运行的输出结果是()。
main()
{union{chari[2];
intk;
}r;
r.i[0]=2;r.i[1]=0;
printf("%d\n",r.k);
}
A.2 B.1 C.0 D.不确定
2.有以下程序输出结果是(B)。
#include
structstu
{intnum;
charname[10];
intage;
};
voidfun(structstu*p)
{printf("%s\n",(*p).name);}
main()
{structstustudents[3]=
{{9801,"zhang",20},{9802,"Wang",19},{9803,"zhao",18}};
fun(students+2);}
A.Zhang B.Zhao C.Wang D.18
3.有下列程序输出结果是()。
#include
main()
{union
{intk;
chari[2];
}*s,a;
s=&a;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%x\n",s->k);
}
A.3839 B.3938 C.380039 D.390038
4.设有如下定义:
structsk
{inta;
floatb;
}data,*p;
若有p=&data;则对data中的a域的正确引用是(B)。
A.(*p).data.a B.(*p).a C.p->data.a D.p.data.a
5.若有下面的说明和定义,则sizeof(structaa)的值是()。
structaa
{intr1;
doubler2;
floatr3;
unionuu
{charu1[5];
longu2[2];
}ua;
}mya;
A.30 B.29 C.24 D.22
6.设有以下定义
typedefunion
{longi;
intk[5];
charc;
}DATE;
structdate
{intcat;
DATEcow;
doubledog;
}too;
DATEmax;
则语句printf(〞%d〞,sizeof(structdate)+sizeof(max)))的执行结果是()。
A.25 B.30 C.18 D.8
1.A2.B3.A4.B5.D6.B
10.下列程序的执行结果为()。
structs1
{char*s;
inti;
structs1*sip;
}
main()
{staticstructs1a[]={{"abcd",1,a+1},{"efgh",2,a+2},{"ijkl",3,a}};
structs1*p=a;inti=0;
printf("%s%s%s",a[0].s,p->s,a[2].sip->s);
printf("%d%d",i+2,--a[i].i);
printf("%c\n",++a[i].s[3]);
}
A.abcdabcdabcd20eB.abcdefghijkl20e
C.abcdabcdijkl20eD.abcdabcdabcd21e
11.下面程序的输出结果为()。
structst
{intx;
int*y;
}*p;
intdt[4]={10,20,30,40};
structstaa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};
main()
{p=aa;
printf("%d\n",++p->x);
printf("%d\n",(++p)->x);
printf("%d\n",++(*p->y));
}
A.10B.50C.51D.60
20606070
20212131
12.设有以下语句:
structst{intn;structst*next;};
staticstructsta[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
则表达式()的值是6。
A.p++->nB.p->n++C.(*p).n++D.++p->n
13.下面程序的输出是(C)。
main()
{enumteam{my,your=4,his,her=his+10};
printf("%d%d%d%d\n",my,your,his,her);
}
A.0123B.04010C.04515D.14515
14.下面程序的输出是(D)。
main()
{structcmplx{intx;inty;}
cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);
}
A.0B.1C.3D.6
15.下面程序的输出是()。
typedefunion{ longx[2];
inty[4];
charz[8];
}MYTYPE;
MYTYPEthem;
main()
{printf("%d\n",sizeof(them));
}
A.32B.16C.8D.24
10.A11.C12.D
13.C14.D15.C
8.2填空题
1.有以下定义和语句,则sizeof(a)的值是【1】,而sizeof(a.share)的值是【2】。
structdate
{intday;
intmonth;
intyear;
union
{intshare1;
floatshare2;
}share;
}a;
2.若有以下说明和定义语句,则变量w在内存中所占字节数________。
unionaa
{floatx,y;
charc[6];
};
structst
{unionaav;
floatw[5];
doubleave;
}w;
3.有以下说明定义语句,可用a.day引用结构体成员day,请写出引用结构体成员a.day
的其它两种形式【1】【2】。
{intday;
charmouth;
intyear;
}a,*b;
b=&a;
4.为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向该结构的指针域,data用以存放整型数)请填空。
data next
structlink{chardata;(【1】)}node;
5.变量root有如图所示的存储结构,其中sp是指向字符串的指针的指针域,next是指向该结构的指针域,data用以存放整型数。
请填空,完成此结构的类型说明和变量root的定义。
root
structlist
{
char*sp;
( 【1】)
( 【2】 )
}root;
6.以下函数creatlist用来建立一带头节点的单链表,链表的结构如下图所示,新的
节点总是插入在链表的末尾。
链表的头指针作为函数值返回。
链表最后一个节点的next域放入NULL,作为链表结束的标志。
data为字符型数据域,next为指针域。
读入时字符以#表示输入结束(#不存入链表)。
请填空。
0
h
…
structnode
{chardata;
structnode*next;
};
……
( 【1】 )creatlist( )
{structnode*h,*s,*r;
charch;
h=(structnode*)malloc(sizeof(structnode));
r=h;
ch=getchar();
while(ch!
=’#’)
{s=(structnode*)malloc(sizeof(structnode));
s->data=( 【2】 );
r->next=s.r;
r=s;
ch=getchar();
}
r->next=( 【3】 );
returnh;
}
1.答案:
【1】10【2】4
2.答案:
34
3.答案:
【1】(*b).day【2】b->day
4.答案:
【1】structlink*next
5.答案:
【1】structlist*next【2】intdata
6.答案:
【1】struct【2】ch【3】NULL
10.下面程序的输出结果是________。
structks
{inta;int*b;}
main()
{structkss[4],*p;intn=1,i;
for(i=0;i<4;i++)
{s[i].a=n;
s[i].b=&s[i].a;
n=n+2;
}
p=&s[0];
printf("%d,%d\n",++(*p->b),*(s+2)->b);
}
10.答案:
25
12.若有以下的说明和语句,已知int类型占两个字节,则以下的输出结果为_______。
main()
{structst
{chara[10];
intb;
doublec;
};
printf("%d\n",sizeof(structst));
}
13.若有以下的说明和语句,已知int类型占两个字节,则以下的输出结果为________。
main()
{unionun
{inti;
doubley;
};
structst
{chara[10];
unionunb;
};
printf("%d\n",sizeof(structst));
}
12.答案:
20
13.答案:
18
15.下面程序的输出是_______。
main()
{enumem{em1=3,em2=1,em3};
char*aa[]={"AA","BB","CC","DD"};
printf("%s%s%s\n",aa[em1],aa[em2],aa[em3]);
}
15.答案:
DDBBCC
第九章位运算
9.1选择题
1.已知chara=15,则~a、-a、!
a的整型值分别是()。
A.240,-15,0B.-16,-15,0C.0,-15,240D.0,-15,0
2.以下程序的输出结果是()。
main()
{
intx=0.5;charz=’a’;
printf("%d\n",(x&1)&&(z<’z’));
}
A.0B.1C.2D.3
3.整型变量x和y的值相等且为非0值,则以下选项中,结果为零的表达式是()。
A.x||yB.x|yC.x&yD.x^y
4.以下程序的输出结果是()。
main()
{
charx=040;
printf("%o\n",x<<1);
}
A.100B.80C.64D.32
5.有以下程序
main()
{
unsignedchara,b,c;
a=0x3;b=a|0x8;c=b<<1;
printf("%d%d\n",b,c);
}
程序运行后的输出结果是()。
A.–1112B.–6–13C.1224D.1122
6.语句printf("%d\n",12&012);的输出结果是()。
A. 12B. 8C. 6D. 012
7.以下程序的输出结果是()。
main()
{
intx=3,y=2,z=1;
printf("%s=%d\n","x/y&z",x/y&z);
printf("%s=%d\n","x^y&~z",x^y&~z);
}
A.x/y&z=0B.x/y&z=1C.s=x/y&z=0D.x/y&z=1
x^y&~z=0x^y&~z=0s=x^y&~z=1x^y&~z=1
8.以下程序的输出结果是()。
chara=222;
a=a&052;
printf("%d,%o\n",a,a);
A.222,336B.10,12C.244,364D.254,376
9.若有以下程序段:
inta=3,b=4;
a=a^b;b=b^a;a=a^b;
则执行以上语句后,a和b的值分别是()。
A.a=3,b=4B.a=4,b=3C.a=4,b=4D.a=3,b=3
10.以下程序的输出结果是()。
main()
{
unsignedintx=3,y=10;
printf("%d\n",x<<2|y>>1);
}
A.1B.5C.12D.13
11.以下程序中c的二进制值是()。
chara=3,b=6,c;
c=a^b<<2;
A.00011011B.00010100C.00011100D.00011000
9.2填空题
1.设二进制数a是00101101,若想通过异或运算a^b使a的高4位取反,低4位不变,则二进制数b应是________。
2.程序执行时输入61,输出的结果是________。
main()
{
unsignedchara,b;
scanf("%x",&a);
b=a<<2;
printf("%x\n",b);
}
3.取一个整数a从右端开始的4-7位,程序如下:
main()
{
unsigneda,b,c,d;
scanf("%o",&a);
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%o,%o\n",a,d);
}
若输入a的值为331,则输出为________。
4.请用位运算实现下述目标(设16位二进制数的最低位为零位):
(1)输出无符号正整数m的第i个二进制位的数值。
(2)把m的第i个二进制位的数值置1,其余的位不变,然后输出m。
#include"stdio.h"
【1】
main()
{
unsignedk,i,m=0;
scanf("%d,%d",&m,&i);
k=【2】;
printf("%d\n",k);
k=pow(2,i);
m=【3】;
printf("%d\n",m);
}
9.3答案及部分解析
一.选择题答案
1.B2.A3.D4.A5.D6.B
7.D8.B9.B10.D11.A
2.解析:
变量z被赋予字符’a’,字符的比较是以ASCII码的大小进行比较的,所以表达式(z<’z’)的逻辑值为1,因此确定输出项的值就必定由表达式(x&1)来确定。
”&”是按位”与”运算符,其作用是参与运算的两个运算数中相对应的二进制位上,若都是1,则该位的结果为1;若两位上的数不同,则该位的结果为0。
x的值为0,0与1相”与”值为0。
所以选项A是正确的。
4.解析:
在定义语句中x被赋予八进制数040,我们知道,整数左移一位相当于乘2,因此040乘以2等于0100。
所以选项A是正确的。
11.解析:
在位运算中,左移运算符(<<)的优先级高于按位异或运算符(^),所以先进行b<<2运算。
B的值是6,左移两位就等于乘4,所以b<<2的值是24;然后进行异或运算,异或运算的规则是:
参与运算的两个数中相对应的二进制位上,若数相同,则该位的结果为0;数不同,则该位的结果为1。
经过异或后的值为11011。
所以选项A是正确的。
二.填空题答案
1.答案:
11110000
2.答案:
84
3.答案:
331,15
4.答案:
【1】#include"math.h"【2】m>>i&1【3】m|k
第十章文件
10.1选择题
1.对C语言的文件存取方式中,文件()。
A.只能顺序存取B.只能随机存取(也称直接存取)
C.可以是顺序存取,也可以是随机存取D.只能从文件的开头存取
2.C语言可以处理的文件类型是()。
A.文本文件和数据文件B.文本文件和二进制文件
C.数据文件和二进制文件D.以上都不完全
3.缺省状态下,系统的标准输入文件(设备)是指()。
A.键盘B.硬盘C.软盘D.显示器
4.缺省状态下,系统的标准输出文件(设备)是指()。
A.键盘B.显示器C.软盘D.硬盘
5.若要以只读打开一个新的二进制文件,则打开时使用的方式字符串是()。
A.“wb”B.“a+”C.“rb”D.“rb+”
6.若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是()。
A.fopen("A:
\user\abc.txt","r")
B.fopen("A:
\\user\\abc.txt","r+")
C.fopen("A:
\user\abc.txt","rb")
D.fopen("A:
\\user\\abc.txt","w")
7.已知函数fwrite的一般调用形式是fwrite(buffer,size,count,fp)其中buffer代表的是()。
A.一个指向要输出文件的文件指针
B.存放输出数据项的存储区
C.要输出数据项的总数
D.存放要输出的数据的地址或指向此地址的指针
8.若调用fputc()的函数输出字符成功,则其返回值是()。
A.EOFB.1C.0D.输出的字符
9.标准函数fgets(s,n,f)的功能是()。
A.从文件f中读取长度为n的字符串存入指针s所指的内存
B.从文件f中读取长度不超过n-1的字符串存入指针s所指的内存
C.从文件f中读取n个字符串存入指针s所指的内存
D.从文件f中读取长度为n-1的字符串存入指针s所指的内存
10.若fp是指向某文件的指针,且已读到该文件的末尾,则C语言库函数feof(fp)的返回值是()。
A.EOFB.-1C.非零值D.NULL
11.以下叙述中错误的是()。
A.二进制文件打开后可以先读文件的末尾,而顺序文件不可以
B.在程序结束时,应当用fclose函数关闭已打开的文件
C.在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据
D.不可以用FILE定义指向二进制文件的文件指针
12.在C程序中,可把整型数以二进制形式存放到文件中的函数是()。
A.fprintf函数B.fread函数C.fwrite函数D.fputc函数
13.下面的程序执行后,文件test.t中的内容是()。
#include
voidfun(char*fname.,char*st)
{
FILE*myf;inti;
myf=fopen(fname,"w");
for(i=0;i fclose(myf); } main() { fun("test.t","newworld");fun("test.t","hello"); } A.hello,B.newworldhello,C.newworldD.hello,rld 14.有以下程序 #include main() { FILE*fp;inti=20,j=30,k,n; fp=fopen("d1.dat","w"); fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j); fclose(fp); fp=fopen("d1.dat","r"); fp=fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n); fclose(fp); } 程序运行后的输出结果是()。 A.2030B.2050C.3050D.3020 15.以下程序的功能是()。 #include main() { FILE*fp; fp=fopen("abc","r+"); while(! feof(fp)) if(fgetc(fp)==’*’) {fseek(fp,-1L,SEEK_CUR); fputc(‘$’,fp); fseek(fp,ftell(fp),SEEK_SET); } fclose(fp); } A.将abc文件中所有’*’替换为’$’B.查找abc文件中所有’*’ C.查找abc文件中所有’$’D.将abc文件中所有字符替换为’$’ 16.如下程序执行后,abc文件的内容是()。 #include main() { FILE*fp; char*str1="first"; char*str2="second"; if((fp=fopen("abc","w+"))==NULL) { printf("Can’topenabcfile\n"); exit (1); } fwrite(str2,6,1,fp); fseek(fp,0L,SEEK_SET); fwrite(str1,5,1,fp); fclose(fp); } A.firstB.secondC.firstdD.为空 10.2填空题 1.在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数是________函数。 2.下面的程序用来统计文件中字符的个数,请填空。 #include main() { FILE*fp; longnum=0; if((fp=fopen("fname.dat","r"))==NULL) {printf("Can'topenfile! \n");exit(0);} while________ {fgetc(fp);num+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 体位 运算 文件 练习