《C语言程序设计(龙昭华主编)习题集1557.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计(龙昭华主编)习题集1557.pdf(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C 语言程序设计(龙昭华主编)习题集 第 1 章 计算机语言程序设计与软件开发基础概述 习 题 1 1.简述计算机的组成及计算机中数值的表示方法。2什么是程序?它由什么组成?3程序设计过程的一般步骤是什么?4算法有些什么特性,它在程序设计中的作用?5描述软件的概念,简述它的分类。6结构化程序设计有哪些基本结构,以及它们采用什么设计方法?7什么是软件工程,它的出现有何意义?8软件生命周期及各阶段的主要任务 9什么软件开发模型,有哪几种常见模型?10C 语言常用哪些开发工具,你平常用是哪个?11语言中有哪些关键字、标识符,应用它们时应该注意些什么?12什么是函数,它在程序中的作用?13C 语言的特
2、点有些什么?它和其他你所知道的语言有什么不同?补充题:1.14 分别使用自然语言、流程图、N S 图、伪代码写出求 的根的算法。分别考虑有两个不等的实根;有两个相等的实根;无实根。1.15 分别使用 N S 图、伪代码写出求 n!的算法。要求:如果 n200,则打印“n 值太大,请重新输入 n 值”;否则打印出 n 的值和 n!的值。1.16 请参照本章例题,编写一个 C 程序,输出以下信息:*Very Good!*1.17 编写一个 C 程序,输入 a,b,c三个值,输出其中最小者。(该题请事先使用 N S 图、伪代码将其算法表示出来。)第 2 章 C 语言的数据类型、运算符及其表达式 习题
3、 2 一、选择题 1 下列表达式的值,哪一个等于 0?A 2%5 B 7/5|x+C 1/2.0 D sizeof(float)sizeof(int)sizeof(char)2int a,*p=&a,下列选项中表达式为变量 a 的地址?A *P B *&a C p D&p 2 列选项中,在一个二进制补码数字系统中,清除了 x 中最右边为 1 的那一位,其余位不变的位运算为?A x&(x1)B x|(1)C x&(x1)D x|(x1)3 C 语言中字符(char)型数据在内存中是以何种形式存放的()。A 原码 B 补码 C 反码 D ASCII 4 在位运算中,操作数若右移两位,其结果相当于(
4、)。A 操作数乘以 2 B 操作数除以 2 C 操作数乘以 4 D 操作数除以 4 5 下列不正确的转义字符是()。A B 18 C O D n 6 设在程序中的 a,b,c 均被定义为整型并且已赋予大于 1 的值,能正确表示代数式 (1/abc)的表达式是()。A 1/a*b*c B 1/(a*b*c)C 1/a/b/(float)c D1.0/a/b/c 7 下面标识符中,不合法的用户标识符为()。A F3 B SUM C a#c D auto E double 8 下列表达式中的值,哪一个等于 1()。(int b=2)A -b&b B b|b C bb D b1 E 3&4 9.设 a
5、,b 和 c 都是 int 型变量,且 a=3,b=4,c=5,则值为 0 的表达式是()A)a+bc&b=c B)a|b+c&b-c C)!(ab)&!c|1 D)!(x=a)&(y=b)&0 E)!(a+b)+c-1&b+c/2 二、填空题 1 下列_常量、变量名是合法的。ofd,0 xfdj,e8,032_auto,_register,_258,_int_。2 int x=5,则执行语句 0|+x 后,变量 x 的值为多少?3(032)&xx 的结果为_。4 int a=12,则执行完语句 aaa*a 后,表达式的值为_。5 j,k 为 int 整型变量,请写出运算表达式:k=j=3,j
6、+3,j+,+j*(k-)*1/6,表达式的值是_;变量 k 的值是_;变量 j 的值_。/*逗号表达式,自增运算符*/6 x 为整型变量,则表达式x x 的值用十六进制表示为_。7 设 x 为整型变量,则表达式(x&1)=(x%2)的值为_。8 字符串“ab034x79”的长度为_。9 x 为 double 型变量,请写出运算表达式 x=3.0,x+,x+*x+后,表达式的值是_,变量 x 的值是_。10 表达式(12 的值是 4。2.运算符,-,+=的优先级相同且运算次序从左至右。3.表达式 6.0*(1/2)的值为 0。4.C 语言中一个字符可以用十进制整数表示,如:printf(“%c
7、”,258);是合法的。5.若变量 j 已被赋值为 8,则执行完语句 1|j+后,j 值为 9。6.printf(%d,sizeof(1234);其结果是 4。7.int a=4,b=0;则表达式a&!b 的值是 1。8.C 语言在判断一个量是否为真时,以非 0 值代表“真”,以 0 值代表“假”。四、写出以下程序的运行结果 1 main()int x=8,y,z;y=z=x;x=y=z;printf(“%d”,x);2 main()char a;int b,e;float c;double d;e=sizeof(a*b+c-d);printf(“%d”,e);3 main()double x
8、;x=(int)8.4;printf(“f”,x);4 main()unsigned x=65535;printf(“%d”,x);5 main()int k;double j=6.4;k=k+2;k=j+=1;printf(“%d”,k);6 main()int a,b,c;a=(b=(c=3)*5)*2-3;printf(“a=%d,b=%d,c=%d”,a,b,c);补充题:2.5 将以下 3 个整数分别赋给不同类型的变量,请画出数据在内存中的存储形式。2.6 要将“China”译成密码,密码规律是:用原来的字母后面第 4 个字母代替原来的字母。如:字母A用E代替。因此“China”应译
9、为“Glmre”。请编一程序,用赋初值的方法 使 c1、c2、c3、c4、c5 五个变量的值分别为C、h、I、n、a,经过运算,使 c1、c2、c3、c4、c5 分别变成G、l、m、r、e,并输出。变量的类型 25 -2 32769 int型(16位)long型(32位)short型(16位)signed char型(8位)unsigned int型 unsigned long型 unsigned short型 unsigned char型 第 3 章 结构化程序设计 习 题 3 一、选择题 3-1.若 int x,y,z;则为它们输入数据的正确语句是_。A).scanf(%D%D%D,&a,
10、&b,&c);B).scanf(%d%d%d,&a,&b,&c);C).scanf(%d%d%d,a,b,c);D).scanf(%d%d%dn,&a,&b,&c);3-2.若 int a;a=68;则执行下面语句后的输出结果是_。printf(%d,%o,%x,%cn,a,a,a,a);A).68,104,44,D B).104,68,44,D C).68,104,D,44 D).68,44,104,D 3-3.若 int x,y;double z;,则不合法的 scanf函数调用语句是_。A).scanf(%d%lx,%le,&x,&y,&z);B).scanf(%2d*%d%lf&x,&
11、y,&z);C).scanf(%x%*d%o,&x,&y);D).scanf(%x%o%6.2f,&x,&y,&z);3-4.若 float x,y;用下面的语句使 x,y均为 1.5,正确的输入是_。scanf(x=%f,y=%f,&x,&y);A).1.25,1.25 B).1.25_1.25 C).x=1.25,y=1.25 D).x=1.25_y=1.25 3-5.if语句的控制条件_。A).只能用关系表达式 B).只能用逻辑表达式 C).只能用关系表达式或逻辑表达式 D).可以是任意表达式 3-6.若 int x,y;,则执行下面的循环后,y 的值是_。for(y=1,x=1;y=1
12、0)break;if(x%2=1)x+=5;continue;x3;A).2 B).4 C).6 D).8 3-7.设有下面的程序段 int k=10;while(k=0)k=k-1;则下面描述中正确的是_ A).while循环执行 10 次 B).循环是无限循环 C).循环体语句一次也不执行 D).循环体语句执行一次 3-8.若 int x,y,则以下的 for循环_。for(x=0,y=0;(y!=123)&(x5);x+);A).执行 4 次 B).执行 5 次 C).循环次数不确定 D).是死循环 二、判断题(正确的在题后括号内划“”,错误的划“”)3-9.用预定义函数 putchar
13、()可以输出整型变量的值。()3-10.在调用 scanf函数时,可以指明输入数据的精度。()3-11.三种循环语句 while、for和 dowhile都实现当型循环。()3-12.若 int i=10,j=0;则执行完下面的语句后,i 的值为 11。()if(j=0)i+;else i-;3-13.若 int i=5,j=10;则执行完下面的语句,j 的值为 8。()switch(i)case 4:j+;case 5:j-;case 6:j+;case 7:j-=2;default:;三、读程序 3-14.下面程序正确的运行结果是_。#include void main()long y=-
14、43456;printf(y=%-8ldn,y);printf(y=%-08ldn,y);printf(y=%08ldn,y);printf(y=%+8ldn,y);3-15.若有下面的程序#include void main()int m,n,x,y,c;scanf(%d%d,&m,&n);while(m&n)c=0;x=m0?m:-m;y=n0?n:-n;while(x=y)x-=y;c+;printf(%d,%d)=%d.%dn,m,n,c,x);scanf(%d%d,&m,&n);运行时分别输入:100 -15,-20 30,其中“”表示回车符。运行结果是_。3-16.下面程序运行时的
15、输出结果是_。#include void main()int s=1;while(s20|s%3!=1)s+;while(s%5!=2)s+=3;while(s%4!=3)s+=15;printf(nThe result is:%d,s);3-17.下面程序运行时的输出结果是_。#include void main()int x=18,i;for(i=2;is2)B)if(strcmp(s1,s2)C)if(strcmp(s1,s2)0)D)if(strcmp(s2,s1)0)8.执行下列语句后,其输出结果为()#include main()int*k,*j,i=100;j=&i;k=&j;p
16、rintf(%dn,*k);A)运行错误 B)100 C)i 的地址 D)j 的地址 9.以下程序的输出结果是()main()char cf35=AAAA,BBB,CC;printf(%sn,cf1);A)AAAA B)BBB C)BBBCC D)CC 10.设有如下的程序段:char str=Hello;char*ptr;ptr=str;执行上面的程序段后,*(ptr+5)的值为()A)o B)0 C)不确定的值 D)o的地址 二、填空题 1指针包括两部分 及 ,在指针的概念中,“*”表示的含义是 ,而“&”表示的含义是 。2如果 p 是一个指针,那么*&p 表示的含义是 ,而&*p 表示的
17、含义是 。3已知数组 s1 为一有 18 个单元的整型数组,下面的语句的语句试图求出这 18 个单元的平均值,并用 s 保存这个值;请补充完整下面的语句。int j,s=;int s118;for(;j+);s=18;4下面程序段的功能是删除字符串 s 中出现的与字符 c 相同的字符;请补充完整下面的语句。int i,j;char s100,c;for(i=0;i+)if(si=c)for()sj=sj+1;5 统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请填空。#include#include main()int num26,i;char c;for(i=0;i26;i
18、+)numi=0;while(!=#)/*统计从终端输入的大写字母个数*/if(isupper(c)numc-65+=1;for(i=0;i26;i+)/*输出大写字母和该字母的个数*/if(numi)printf(%c:%dn,i+,numi);三、写出以下程序的运行结果 1 main()int a=2,4,6,8,*p=a,i;for(i=0;i4;i+)ai=*p+;printf(%d,%dn,a2,*(-p);2 main()int a=2,4,6,8,10,*p,*k;p=a;k=&p;printf(%d ,*(p+);printf(%d n,*k);3 main()int a34=
19、2,4,6,8,10,12,14,16,18,20,22,24;int(*p)4=a,i,j,k=0;for(i=0;i3;i+)for(j=0;j2;j+)k+=*(*(p+i)+j);printf(%d n,k);4#include main()int a,b,c;int x=4,y=6,z=8;int*p1=&x,*p2=&y,*p3;a=p1=&x;b=3*(-*p1)/(*p2)+7;c=*(p3=&z)=*p1*(*p2);printf(%d,%d,%dn,a,b,c);5#include main()int k=0,sign,m;char s=“-12345”;if(sk=+|s
20、k=-)sign=sk+=+?1:-1;for(m=0;sk=0&sk=9;k+)m=m*10+sk-0;printf(Result=%dn,sign*m);四、编程题 1通过键盘输入 10 整数在一维数组中,并且把该数组中所有为偶数的数,放在另一个数组中。2 对在一维数组中存放的 10 整数进行如下的操作:从第 3 个元素开始直到最后一个元素,依次向前移动一个位置,输出移动后的结果。3在一个字符数组中存放“AbcDEfg”字符串,编写程序,把该字符串中的小写字母变为大写字母,把该字符串中的大写字母变为小写字母。4用字符指针变量,进行 5 个字符串的输入,字符串大小的比较,并且输出 5 个字符
21、串中最小的字符串。5 从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。若程序执行时输入字符串为:turbo c and borland c+从键盘上输入字符:n,则输出后变为:turbo c ad borlad c+如果输入的字符在字符串中不存在,则字符串照原样输出。6有 30 个学生,三门课程,用二维数组存放该信息;对数组的信息分别进行如下的操作:(1)输出每门课程的平均分(2)输出每门课程的最高分、最低分(3)统计每门课程不及格人数。第 5 章 函数 习题 5 一、选择题 1.在一个 C 语言程序构成中,较完整的描述是()A)由主程序与子程序构成 B)由多个主函数与多个函数构成
22、 C)由主函数与函数构成 D)由一个主函数与多个函数构成 2.C语言在程序开始执行时,其正确的描述是()A)由编写程序语句的顺序格式执行 B)在主函数 main()开始处执行 C)在第一个函数处执行 D)由人随机选择执行 3.下列有关函数错误的描述是()A)C语言中允许函数嵌套定义 B)C语言中允许函数递归调用 C)调用函数时,实参与形参的个数、类型需完全一致 D)C语言函数的缺省数据类型是 int类型 4.在 C 语言中,各个函数之间具有的关系是()A)不允许直接递归调用,也不允许间接递归调用 B)允许直接递归调用,不允许间接递归调用 C)不允许直接递归调用,允许间接递归调用 D)允许直接递
23、归调用,也允许间接递归调用 5.在 C 语言中,函数的返回值的类型是由()A)C语言的编译程序,在程序编译时决定 B)由调用该函数的主调函数所决定 C)由 return语句的表达式的类型所决定 D)由定义该函数时指定的函数类型所决定 6 当调用函数时,如果实参是一个数组名,则向函数传送的是()A)数组的首元素 B)数组的首地址 C)数组每个元素的地址 D)数组每个元素中的值 7 对于以下程序,不正确的叙述是()#include void f(int n);/*函数说明*/main()void f(int n);/*函数说明*/f(5);void f(int n)printf(%dn,n);A)
24、若只在主函数中对函数 f 进行说明,则只能在主函数中正确调用函数 f B)要求函数 f 无返回值,所以可用 void将其类型定义为无值型 C)在主函数前对函数 f 进行说明,则在主函数和其后的其它函数中都可以正确调用函数 f D)对于上面程序的说明,编译时系统会提示出错信息:提示对 f 函数重复说明 8.下面函数的功能是()sss(s,t)char*s,*t;while(*s)&(*t)&(*t+=*s+);return(*s-*t);A)求字符串的长度 B)比较两个字符串的大小 C)将字符串 s 复制到字符串 t 中 D)将字符串 s 接续到字符串 t 中 9 以下程序的输出结果是 long
25、 fun(int n)long s;if(n=1|n=2)s=2;else s=n-fun(n-1);return s;main()printf(%ldn,fun(3);A)1 B)2 C)3 D)4 10请选出以下程序的输出结果()#include sub(x,y,z)int x,y,*z;*z=y-x;main()int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(%d,%d,%dn,a,b,c);A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7 二、填空题 1在 C 语言中,除主函数外,其函数分为
26、 、两类。2变量在程序使用中,其作用域可分为 变量和 变量。3以下程序调用 findmax 函数求数组中值最大的元素在数组中的下标,请补充填空。#include findmax(s,t,k)int*s,t,*k;int p;for(p=0,*k=p;p s*k)_;main()int a10,i,k;for(i=0;i10;i+)scanf(%d,&ai);findmax(a,10,&k);printf(%d,%dn,k,ak);4以下程序求 a 数组中的所有素数的和,函数 isprime 用来判断自变量是否为素数,请补充填空。#include main()int i,a10,*p=a,sum
27、=0;printf(Enter 10 num:n);for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i10;i+)if(isprime(*(p+)=1)printf(%d,*(a+i);sum+=*(a+i);printf(nThe sum=%dn,sum);isprime(x)int x;int i;for(i=2;i=x/2;i+)if(x%i=0)return(0);5在下列程序中,其函数的功能是比较两个字符串的长度,比较的结果是函数返回较长的字符串的地址。若两个字符串长度相同,则返回第一个字符串的地址。#include char*(char*s,char*t)
28、char*ss=s,*tt=t;while(*ss)&(*tt)ss+;tt+;if(*tt)return();else return();main()char a20,b10,*p,*q;int i;gets(a);gets(b);printf(%sn,fun(a,b);三、程序分析综合题 1下面程序的输出结果是什么?如何把该功能改写成一个函数,如何调用该函数。#include main()char*p=BOOL,OPK,H,SP;int i;for(i=3;i=0;i-,i-)printf(%c,*pi);2若有 5 门课程的成绩是:92.5,86,70,71.5,50,则程序运行结果是多
29、少,其函数执行什么功能。#include float fun(float*a,int n)int i;float sum=0;for(i=0;i=n;i+)sum+=ai;return(sum/n);main()float score30=90.5,72,80,61.5,55,aver;aver=fun(score,5);printf(nAverage score is:%5.2fn,aver);3若输入字符串-1234,则程序运行结果是多少,其程序执行什么功能。#include#include long fun(char*p)long nn=0;int ss=1;if(*p)=-)p+;ss
30、=-1;if(*p)=+)p+;while(*p)nn=nn*10-48+(*p+);return(nn*ss);main()/*主函数*/char s6;long n;printf(Enter a string:n);gets(s);n=fun(s);printf(%ldn,n);4下列程序功能是将长整型数中每一位上为偶数的数依次取出,构成一个新数放在 t 中。高位仍在高位,低位仍在低位。例如,当 s 中的数为:87653142 时,t 中的数为:8642。请改正程序中的错误,使它能得出正确的结果。#include void fun(long s,long*t)int d;long sl=1
31、;*t=0;while(s 0)d=s%10;if(d/2=0)*t=d*sl+*t;sl*=10;s=10;main()long s,t;scanf(%ld,&s);fun(s,&t);printf(The result is:%ldn,t);5下列程序功能是对 M 行 M 列整数方阵求两条对角线上各元素之和。请改正程序中的错误,使它能得出正确的结果。#include#define M 5 int fun(int n,int x )int i,j,sum=0;for(i=1;i(b)?(a):(b)下面的表达式将展开成什么?max(a,max(b,max(c,d)2用宏定义求 x 的平方,下
32、面哪种写法最好?为什么?(1)#define POWER(x)x*x(2)#define POWER(x)(x)*(x)(3)#define POWER(x)(x*x)(4)#define POWER(x)(x)*(x)3如有下列宏定义#define x 5#define y x+1#define z y*x/2 则执行下面语句后的输出是什么?int a;a=y;printf(%dn,z);printf(%dn,-a);4定义一个宏,将小写字母变成大写字母。5输入两个整数,求它们相除的余数,用带参的宏实现。6分别用带参数的宏和函数,从 5 个整数中找出最小值。7有一个变量,可能是整型或实型中的
33、一种类型,试用条件编译检查其类型。二、二级考试模拟题 1单项选择题(1)以下有关宏替换的叙述不正确的是()。A宏替换不占用运行时间 B宏名无类型 C宏替换只是字符串替换 D宏替换是在运行时进行的(2)有下列程序#define A(x,y)x*y+3*y+x/y void main()int a,b;a=4;b=3;printf(%x,A(b,a);运行后的输出结果是()。A15 B 24 C18 D0 x18(3)如果有#define f(x,y)x+y 及 int a=2,b=3;,则执行 printf(%d,f(a,b)*f(a,b);后的值为()。A 36 B 25 C11 D13 (4
34、)如果程序中有#include 文件名则意味着()。A.将文件名所指的那个文件的全部内容,在此命令行出现的 这一点上,插入源程序。B指定标准输入输出。C宏定义一个函数。D条件编译说明。(5)以下程序段输出 sum 的值为()。#define ADD(x)x+x main()int m=1,n=2,k=3;int sum=ADD(m+n)*k;printf(sum=%dn,sum);A.sum=9 B.sum=10 C.sum=12 D.sum=18 (6)有如下宏定义#define N 2#define Y(n)(N+1)*n)则执行语句 z=2*(N+Y(5);后的结果是()。A语句有错误
35、BZ=34 CZ=70 DZ 无定值 2判断题(1)C 语言中的宏定义允许嵌套定义,也允许带参数。()(2)若有宏定义:#define M(x,y,z)x*y+z 则宏引用 M(2+3,4+5,6+7)通过宏展开后的表达式应为(2+3)*(4+5)+(6+7)。()(3)C 语言的编译系统对宏命令的处理是在 C 源程序编译阶段完成的。()3读程序写出结果(1)下列程序的运行结果是()#include#define MIN(x,y)(x)b?a:b)+1 main()int i=10,j=15;printf(%dn,MAX(i,j);(4)指出下面程序中的输出()define S(a,b)a*b
36、#include main()int i=4,j=6,k;k=S(i+6,j+4);printf(k=%dn,k);(5)下面程序的输出是()define PR(r)printf(%d,r);#include main()int j,a=1,3,5,7,9,11,13,15,*p;p=a+5;for(j=3;j0;j-)switch(j)case 1:case 2:PR(*p+);break;case 3:PR(*(-p);第 7 章 结构体、共用体、枚举类型 习 题 7 一、基本知识题 1 使用两个结构体变量分别存取用户输入的两个日期(包括年、月、日),计算两个日期之间相隔的天数。2 有一高
37、考成绩表:包括准考证号码(字符串)、考生姓名、考生类别、高考总分等信息。按准考证号码编一查分程序,输出该考生的相关信息。要求能给用户以提示信息(按键盘某一键后)实现循环查询。3 输入一串整数,以 0结束。把这些整数(不含 0)放入一单链表中,再按由大到小的次序排列,最后将排好序的链表输出。4.将一个链表按反序输出,即将原表头当链表尾,原链表尾当链表头。5 口袋中有红、黄、蓝、白、黑 5种颜色的球若干个。每次从口袋内取出三个球,问得到三种不同颜色的球的可能取法的总数,并打印出每种组合的三种颜色各是什么。二、二级考试模拟题 1.单项选择题(1)已知 int 类型占 2 个字节,若有说明语句:str
38、uct stint num;char name10;double gz;则 sizeof(struct st)的值为()A18 B20 C8 D20(2)使用共用(联合)体 union 的目的是()。A将一组数据作为一个整体,以便于其中的成员共享同一存储空间 B将一组具有相同数据类型的数据作为一个整体,以便其成员共享同一存储空间 C将一组数据作为一个整体,以便程序使用 D 将一组具有相同数据类型的数据作为一个整体,以便程序使用(3)若有以下的定义、说明和语句,则值为 101 的表达式是()。struct cw int a;int*b;*p;int x0=11,12,xl=31,32;stati
39、c struct cw x2=100,x0,300,x1;p=x;A*p-b Bp-a C+(p-a)D(p+)-a(4)设有如下程序:main()union unsigned int n;unsigned char c;u1;u1.c=A;printf(d,u1.n);A 产生语法错 B随机值 CA D65(5)若要说明一个类型名 STP,使得定义语句 STP s;等价于 char*s;以下选项中正确的是()Atypedef STP char*s;Btypedef*char STP;C typedef STP*char Dtypedef char*STP;(6)以下枚举类型名的定义中正确的是
40、()Aenum a=sun,mon,tue;Benum asum=5,mon=2,tue;C enum a=sun,mon,tue;Denum asun,mon,tue;(7)下列关于链表的叙述中不正确的是()A 通过链表可以实现内存的动态分配 B 单链表要求在逻辑上相邻的两个元素在物理存储上也是相邻的 C 在单链表中除尾结点外,每一个结点的指针域存储的是下一个结点的地址 D 每个单链表必须用一个指向链表的指针来表示 2多项选择题(1)有说明语句:unionint i;char c;float f;x,y,z;对共用变量正确引用的是()。A x.i By.c Cprintf(d,x)D pri
41、ntf(f,z.f);Ez.i=5;(2)如有说明 structint day;int month;int year;d,*pd;,则下列哪些引用是正确的()A pd-year B(*pd).year C d.year D*pd.year E*(pd-year)(3)C 语言规定,如下说法是正确的()。A不能对结构体作为整体来进行存取 B结构体是若干变量的集合,这些变量的类型可以相同 C共用体(联合)允许不同数据类型的数据使用共同的存储区域 D不能用&来取结构体的地址;E位段是一种特殊的结构体成员。位段的类型可以是 char、int、float、double 等。(4)关于枚举类型中的枚举元素
42、,正确的说法是()A枚举元素是常量 B枚举元素是变量 C枚举元素是有值的 D枚举元素的值可以改变 E可将枚举元素直接赋值给枚举变量(5)对于下列定义,正确的叙述是()union ss int i;char c;float f;a,b;A变量 a 所占内存的长度等于成员 f 的长度 B变量 a 的地址值和它的各成员地址值都是相同的 C地址表达式&a、&a.i、&a.c、&a.f 的值相同 D变量 a 所占内存的长度等于各成员所占空间之和 Esizeof(union ss)的值为 4 3判断题(1)使用 typedef可以定义一种新的数据类型。()(2)结构(struct)和联合(union)类型
43、实际上是相同的。()(3)在程序中定义了一个结构体类型,将为此类型分配存储空间。()(4)一个整数不能直接赋给一个枚举变量。()(5)位段是以位为单位定义长度的结构体类型。()4 程序填空题(1)下面是输出链表 head 的函数 print。#include struct stud long num;float score;struct stud*next;void print(struct stud*head)struct stud *p;p=head if(head!=NULL)do printf(%ld,%5.1fn,p-num,p-score);_;while(p!=NULL);(2)
44、有一个描述零件加工的数据结构为:零件号 pn;工序号 wn;指针 next 下列程序建立一个包含 10 个零件加工数据的单向链表,请填空。#include#define LEN sizeof(struct parts)struct parts char pn10;int wn;_;void main()struct parts*head,*p;int i;head=NULL;for(i=0;ipn);scanf(%d,&p-wn);p-next=head;head=p;(3)以下函数 creatlist 用来建立一个带头节点的单项链表,新产生的节点总是插在链表的末尾。单项链表的头指针作为函数值
45、返回。函数中以换行符作为链表建立的结束标志。请填空。#include struct node char data;struct node*next;struct node*creatlist()struct list*h,*p,*q;char ch;h=(struct node*)malloc(sizeof(struct node);p=q=h;ch=getchar();while(_)p=(struct node*)malloc(sizeof(struct node);p-data=ch;p-next=p;q=p;ch=getchar();p-next=0;return h;5 读程序写出结
46、果(1)下列程序的执行结果是()#include union ss int i;char c2;void main()uniom ss x;x.c0=10;x.c1=1;printf(%d,x.i);(2)下列程序执行后其输出结果是()#include struct bb int x;char*y;struct bb*tp;a=1,pascal,NULL,3,debug,NULL;void main()struct bb*p=a;char c,*s;s=+p-y;printf(sn,s);c=*p+-y;prinf(%cn,c);s=p-y+;printf(%sn,s);c=(*p-y)+;p
47、rintf(%cn,c);(3)下列程序执行后其输出结果是()#include union ee int a;int b;*p,s4;void main()int n=1,i;for(i=0;ia);printf(%d,+p-a);(4)给出下面程序的运行结果。#include static struct stl char name10;char*addr;static struct st2 char*pname;struct stl s1;s2=England,Ann,London;void main()printf(s,s n,+s2.s1.addr,&s2.pname3);第 8 章 文
48、件 习 题 8 一、基本知识题(1)一般来说,操作系统对外部介质上的数据的管理是以 为单位的。并且,将所有的与主机相连的输入输出设备都看作 。(2)在 C 程序中,数据可以用 和 两种代码形式存放。(3)C 语言中对文件的存取是以_ _为单位的。这种文件被称为流式文件。(4)fread函数的一般调用形式为 ,其中各个参数的意义是_ _。fwrite函数的一般调用形式为 ,其中各个参数的意义是_ _ 。fseek函数的一般调用形式为 ,其中各个参数的意义是_ _。(5)文件使用完毕后必须关闭,否则的严重后果是 。二、二级考试模拟题 1 单选题(1)以下叙述不正确的是()A C 语言中的文本文件以
49、 ASCII形式存储数据 B C 语言对二进制文件的访问速度比文本文件快 C C 语言中,随机读写方式不适用于文本文件 D C 语言中,顺序读写方式不适用于二进制文件(2)函数 fscanf 的功能是()。A将信息从文件输入 B将信息输出到文件 C将信息从控制台输入 D将信息输出到控制台终端上(3)如果程序中有语句 FILE*fp;fp=fopen(abc.txt,w);则程序准备做()。A对文件读写操作 B对文件读操作 C对文件写操作 D对文件不操作(4)使用 fopen()以文本方式打开或建立可读可写文件,要求:若指定的文件不存在,则新建一个,并使文件指针指向其开头;若指定的文件存在,打开
50、它,将文件指针指向其结尾。正确的“文件使用方式”是()A r+Bw+Ca+D.a (5)若定义:int a5;,fp 是指向某一已经正确打开了的文件的指针,下面的函数调用形式中不正确的是()A fread(a0,sizeof(int),5,fp);Bfread(&a0,5*sizeof(int),1,fp);Cfread(a,sizeof(int),5,fp);Dfread(a,5*sizeof(int),1,fp);(6)以下程序企图从终端输入的字符输出到名为 abc.txt的文件中,直到从终端读入字符#号时结束输入输出操作,但程序有错。#include main()FILE*fout;ch