C语言812章练习题.docx
《C语言812章练习题.docx》由会员分享,可在线阅读,更多相关《C语言812章练习题.docx(14页珍藏版)》请在冰豆网上搜索。
C语言812章练习题
C语言程序设计分章节联系
八、编译预处理
一、选择题
1.以下叙述中正确的是_______.
a)在程序的一行上可以出现多个有效的预处理命令行
b)使用带参的宏时,参数的类型应与宏定义时的一致
c)宏替换不占用运行时间,只占用编译时间
d)在以下定义中CR是称为“宏名”的标识符
#defineCR045
2.以下程序的运行结果是________.
#defineMIN(x,y)(x)<(y)?
(x):
(y)
main()
{inti=10,j=15,k;
k=10*MIN(i,j);
printf("%d\n",k);
}
a)10b)15c)100d)150
3.若有宏定义如下:
#defineX5
#defineYX+1
#defineZY*X/2
则执行以下printf语句后,输出结果是_______.
inta;a=Y;
printf("%d\n",Z);
printf("%d\n",--a);
a)7b)12c)12d)7
6655
4.请读程序:
#include
#defineMUL(x,y)(x)*y
main()
{
inta=3,b=4,c;
c=MUL(a++,b++);
printf("%d\n",c);
}
上面程序的输出结果是__________.
a)12b)15c)20d)16
5.对下面程序段:
#defineA3
#defineB(a)((A+1)*a)
...
x=3*(A+B(7));
正确的判断是_________.
a)程序错误,不许嵌套宏定义
b)x=93
c)x=21
d)程序错误,宏定义不许有参数
6.以下正确的描述是____________.
a)C语言的预处理功能是指完成宏替换和包含文件的调用
b)预处理指令只能位于C源程序文件的首部
c)凡是C源程序中行首以"#"标识的控制行都是预处理指令
d)C语言的编译预处理就是对源程序进行初步的语法检查
7.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用<>(尖括号)括起时,找寻被包含文件的方式是_______.
a)仅仅搜索当前目录
b)仅仅搜索源程序所在目录
c)直接按系统设定的标准方式搜索目录
d)先在源程序所在目录搜索,再按照系统设定的标准方式搜索
九、指针
一、选择题
1.变量的指针,其含义是指该变量的_________.
a)值b)地址
c)名d)一个标志
2.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是____.
a)a,point,*&ab)&*a,&a,*point
c)*&point,*point,&ad)&a,&*point,point
3.若有说明;int*p,m=5,n;以下正确的程序段的是________.
a)p=&n;b)p=&n;
scanf("%d",&p);scanf("%d",*p);
c)scanf("%d",&n);d)p=&n;
*p=n;*p=m;
4.下面程序段的运行结果是_________.
char*s="abcde";
s+=2;printf("%d",s);
a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果
5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.
a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);
6.以下正确的程序段是_________.
a)charstr[20];b)char*p;
scanf("%s",&str);scanf("%s",p);
c)charstr[20];d)charstr[20],*p=str;
scanf("%s",&str[2]);scanf("%s",p[2]);
7.若有说明语句
chara[]="Itismine";
char*p="Itismine";
则以下不正确的叙述是_______.
a)a+1表示的是字符t的地址
b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变
d)a中只能存放10个字符
8.下面程序的运行结果是_______.
#include
#include
main()
{
char*s1="AbDeG";
char*s2="AbdEg";
s1+=2;s2+=2;
printf("%d\n",strcmp(s1,s2));
}
a)正数b)负数c)零d)不确定的值
9.下面程序的运行结果是_______.
#include
#include
fun(char*w,intn)
{chart,*s1,*s2;
s1=w;s2=w+n-1;
while(s1}
main()
{char*p;
p="1234567";
fun(p,strlen(p));
puts(p);
}
a)7654321b)1714171c)1711717d)7177171
10.若有以下定义,则对a数组元素的正确引用是_________.
inta[5],*p=a;
a)*&a[5]b)a+2c)*(p+5)d)*(a+2)
11.若有定义:
inta[2][3],则对a数组的第i行j列元素地址的正确引用为______.
a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j
12.若有以下定义,则p+5表示_______.
inta[10],*p=a;
a)元素a[5]的地址b)元素a[5]的值
c)元素a[6]的地址d)元素a[6]的值
填空:
1.以下程序的功能是:
通过指针操作,找出三个整数中的最小值并输出。
请填空。
#include"stdlib.h"
main()
{int*a,*b,*c,num,x,y,z;
a=&x;b=&y;c=&z;
printf("输入3个整数:
");
scanf("%d%d%d",a,b,c);
printf("%d,%d,%d\n",*a,*b,*c);
num=*a;
if(*a>*b)__num=*b___;
if(num>*c)___num=*c___;
printf("输出最小整数:
%d\n",num);
}
2.下面程序段的运行结果是__hELLO!
______.
chars[80],*sp="HELLO!
";
sp=strcpy(s,sp);
s[0]='h';
puts(sp);
3.下面程序段的运行结果是__ef______.
charstr[]="abc\0def\0ghi",*p=str;
printf("%s",p+5);
4.下面程序的功能是将两个字符串s1和s2连接起来。
请填空。
#include
main()
{chars1[80],s2[80];
gets(s1);gets(s2);
conj(s1,s2);
puts(s1);
}
conj(char*p1,char*p2)
{char*p=p1;
while(*p1)__p1++____;
while(*p2){*p1=_*p2_____;p1++;p2++;}
*p1='\0';
__p[79]=‘\0’__;
}
5.若有定义:
inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______.*(a+5)的值是_________.
6.若有以下定义:
inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.*(*(a+1)+0))的值是________.
7.以下程序将数组a中的数据按逆序存放,请填空。
#defineM8
main()
{inta[M],i,j,t;
for(i=0;ii=0;j=M-1;
while(i{
t=*(a+i);________;*(_______)=t;
i++;j--;
}
for(i=0;i}
8.若有定义:
inta[3][5],i,j;(且0<=i<3,0<=j<5),则a数组中任一元素可用
五种形式引用。
它们是:
(1)a[i][j]
(2)*(a[i]+j)
(3)*(*______);
(4)(*(a+i))[j]
(5)*(____+5*i+j)
9.下面程序的运行结果是_________.
main()
{char*a[]={"Pascal","Clanguage","dBase","Coble"};
char(**p)[];
intj;
p=a+3;
for(j=3;j>=0;j--)printf("%s\n",*(p--));
}
十、结构体与共同体
一、选择题
1.C语言结构体类型变量在程序执行期间_________.
a)所有成员一直驻留在内存中
b)只有一个成员驻留在内存中
c)部分成员驻留在内存中
d)没有成员驻留在内存中
2.下面程序的运行结果是___________.
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
3.设有如下定义:
structsk
{intn;
floatx;
}data,*p;
若要使p指向data中的n域,正确的赋值语句是_______.
a)p=&data.n;
b)*p=data.n;
c)p=(structsk*)&data.n;
d)p=(structsk*)data.n;
4.以下对结构体变量stu1中成员age的非法引用是________.
structstudent
{intage;
intnum;
}stu1,*p;
p=&stu1;
a)stu1.ageb)student.age
c)p->aged)(*p).age
5.下面对typedef的叙述中不正确的是______.
a)用typedef可以定义各种类型名,但不能用来定义变量
b)用typedef可以增加新类型
c)用typedef只是将已存在的类型用一个新的标识符来代表
d)使用typedef有利于程序的通用和移植
6.以下scanf函数调用语句中对结构体变量成员的不正确引用是________.
structpupil
{charname[20];
intage;
intsex;
}pup[5],*p;
p=pup;
a)scanf("%s",pup[0].name);
b)scanf("%d",&pup[0].age);
c)scanf("%d",&(p->sex));
d)scanf("%d",p->age);
一、填空题
1.以下程序的运行结果是________.
structn{
intx;
charc;
};
main()
{structna={10,'x'};
func(a);
printf("%d,%c",a.x,a.c);
}
func(structnb)
{
b.x=20;
b.c='y';
}
2.若有定义:
structnum
{inta;
intb;
floatf;
}n={1,3,5.0};
structnum*pn=&n;
则表达式pn->b/n.a*++pn->b的值是________,表达式(*pn).a+pn->f的值是________.
3.以下程序的运行结果是________.
structks
{inta;
int*b;
}s[4],*p;
main()
{
intn=1;
printf("\n");
for(i=0;i<4;i++)
{
s[i].a=n;
s[i].b=&s[i].a;
n=n+2;
}
p=&s[0];
p++;
printf("%d,%d\n",(++p)->a,(p++)->a);
}
4.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名
和年龄。
请在_______内填入正确内容。
statistructman{
charname[20];
intage;
}person[]={"li=ming",18,
"wang-hua",19,
"zhang-ping",20
};
main()
{structman*p,*q;
intold=0
p=person;
for(;p_____;p++)
if(oldage)
{q=p;______;}
printf("%s%d",______);
}
5.以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点
的指针(链表不带头结点)。
请在______内填入正确内容。
structlink
{chardata;
structlink*next;
};
....
structlink*p,*first;
intc=0;
p=first;
while(_____)
{_______;
p=_______;
}
十二、文件
一、填空题
1.系统的标准数入文件是指_________.
a)键盘b)显示器c)软盘d)硬盘
2.若执行fopen函数时发生错误,则函数的返回值是_______.
a)地址值b)0c)1d)EOF
3.若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件
方式字符串应是______.
a)"ab+"b)"wb+"c)"rb+"d)"ab"
4.fscanf函数的正确调用形式是_________.
a)fscanf(fp,格式字符串,输出表列)
b)fscanf(格式字符串,输出表列,fp);
c)fscanf(格式字符串,文件指针,输出表列);
d)fscanf(文件指针,格式字符串,输入表列);
5.fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是____.
a)只写b)追加c)读或读写d)答案b和c都正确
6.函数调用语句:
fseek(fp,-20L,2);的含义是_______.
a)将文件位置指针移到距离文件头20个字节处
b)将文件位置指针从当前位置向后移动20个字节
c)将文件位置指针从文件末尾处后退20个字节
d)将文件位置指针移到离当前位置20个字节处
7.利用fseek函数可实现的操作_________.
a)fseek(文件类型指针,起始点,位移量);
b)fseek(fp,位移量,起始点);
c)fseek(位移量,起始点,fp);
d)fseek(起始点,位移量,文件类型指针);
8.在执行fopen函数时,ferror函数的初值是_______.
a)TUREb)-1c)1d)0