if(!
(j%i))
7break;
if(i=j-1)
printf("%d",j);
}
}
输出结果是()。
A)11B)10
C)9D)12
4.以下程序的输出结果是()。
程序1-7:
P1-7.c
main()
{
inta,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=10)
break;
if(b%3==1)
{
b+=3;
continue;
}
}
printf("%d\n",a);
}
A)101B)6
C)5D)4
5.假定a和b为int型变量,则执行以下语句后b的值为()。
a=1;
b=10;
do
{
b-=a;
a++;
}
while(b--<0);
A)9B)-2
C)-1D)8
6.在C语言中,下面的说法正确的是()。
A)不能使用do-while语句构成的循环
B)do-while语句构成的循环必须用break语句才能退出
C)do-while语句构成的循环,当while语句中的表达式值为非0时结束循环
D)do-while语句构成的循环,当while语句中的表达式值为0时结束循环
5.数组的定义和引用
1.在下面的数组定义中,合法的是()。
A)inta[]="string";B)inta[5]={0,1,2,3,4,5};
C)vhsts="string";D)chara[]={0,1,2,3,4,5};
2.若有定义和语句:
chars[10];
s="abcd";
printf("%s\n",s);
则结果是(以下k代表空格)()。
A)输出abcdB)输出a
C)输出abcdkkkkkD)编译不通过
3.给出以下定义:
charx[]="abcdefg";
chary[]={'a','b','c','d','e','f','g'};
则正确的叙述为()。
A)数组x和数组y等价B)数组x和数组y的长度相同
C)数组x的长度大于数组y的长度D)数组x的长度小于数组y的长度4.若有以下定义:
doublew[10];
则w数组元素下标的上限为______,下限为______。
5.下面各语句行中,正确的关于字符串操作的语句行是()。
A)charst[4][5]={"ABCDE"};
B)chars[5]={'A','B','C','D','E'};
C)char*s;s="ABCDE";
D)char*s;scanf("%s",s);
6.下述对C语言字符数组的描述中错误的是()。
A)字符数组可以存放字符串
B)字符数组中的字符串可以整体输入、输出
C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D)不可以用关系运算符对字符数组中的字符串进行比较
7.定义如下变量和数组:
inti;
intx[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是()。
for(i=0;i<3;i++)
printf("%d",x[i][2-1]);
A)1,5,9B)1,4,7C)3,5,7D)3,6,9
6.函数
1.以下函数调用语句中含有()个实参。
func((exp1,exp2),(exp3,exp4,exp5));
A)1B)2C)4D)5
2.sizeof(double)是()。
A)一种函数调用B)一个双精度型表达式
C)一个整型表达式D)一个不合法的表达式
3.设有以下语句:
charstr1[]="string",str2[8],*str3,*str4="string";
则()不是对库函数strcpy的正确调用。
A)strcpy(str1,"HELLO1");B)strcpy(str2,"HELLO2");
C)strcpy(str3,"HELLO3");D)strcpy(str4,"HELLO4");
4.设有如下的函数:
g(x)
floatx;
{
printf("\n%d",x*x);
}
则函数的类型
A)与参数x的类型相同B)是void
C)是intD)无法确定
5.C语言规定,程序中各函数之间()。
A)既允许直接递归调用又允许间接递归调用
B)不允许直接递归调用又不允许间接递归调用
C)允许直接递归调用不允许间接递归调用
D)不允许直接递归调用允许间接递归调用
6.以下对C语言函数的有关描述中,正确的是()。
A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B)C函数既可以嵌套定义又可以递归调用
C)函数必须有返回值,否则不能使用函数
D)C程序中有调用关系的所有函数必须放在同一个源程序文件中
7.以下叙述中不正确的是()。
A)在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值
B)在C中,在调用函数时,实在参数和对应形参在类型上只需赋值兼容
C)在C中,外部变量的隐含类别是自动存储类别
D)在C中,函数形参可以说明为register变量
7.编译预处理
1.C提供3种预处理功能:
______、______和条件编译。
2.指出下面这句话的问题:
C语言编译预处理是在编译之前完成的。
103.设有如下宏定义
#defineMYSWAP(z,x,y){z=x;x=y;y=z;}
以下程序段通过宏调用实现变量a、b内容交换,请填空。
floata=5,b=16,c;
______;
4.下列程序的运行结果是()。
程序1-8:
P1-8.c
#include
#defineM3
#defineNM+1
#defineNNN*N/2
main()
{
printf("%d,",NN);
printf("%d\n",5*NN);
}
A)3,17B)4,18C)6,18D)8,40
5.以下程序的输出结果是()。
程序1-9:
P1-9.c
#include
#defineFUDGE(y)2.84+y
#definePR(a)printf("%d",(int)(a))
#definePRINT(a)PR(a);putchar('\n')
main()
{
intx=2;
PRINT(FUDGE(5)*x);
}
A)11B)13C)15D)16
指针
1.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是()。
A)pb=&xB)pb=x;C)*pb=&x;D)*pb=*x
2.下面函数的功能是()。
sss(s,t)
char*s,*t;
{
while((*s)&&(*t)&&(*t++==*s++));
return(*s-*t);
}
A)求字符串的长度B)比较两个字符串的大小
11C)将字符串s复制到字符串t中D)将字符串s接续到字符串t中
3.设有说明
int(*ptr)[m];
其中的标志符ptr是()。
A)m个指向整型变量的指针
B)指向m个整型变量的函数指针
C)一个指向具有m个整型元素的一维数组的指针
D)具有m个指针元素的一维指针数组,每个元素都只能指向整型量
4.若要用下面的程序片段使指针变量P指向一个存储型变量的动态存储单元:
int*p;
p=______malloc(sizeof(int));
则应填入()。
A)intB)int*
C)(*int)D)(int*)
5.下面函数的功能是()。
intfunl(char*x)
{
char*y=x;
while(*y++);
return(y-x-1);
}
A)求字符串的长度B)比较两个字符串的大小
C)将字符串x复制到字符串yD)将字符串x连接到字符串y后面
6.设有以下定义:
inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*prt)[3]=a,*p=a[0];
则下列能够正确表示数组元素a[1][2]的表达式是()。
A)*((*prt+1)[2])B)*(*(p+5))
C)(*prt+1)+2D)*(*(a+1)+2)
7.函数NewPrint用于打印sin(x)、cos(x)和ln(x)等函数的曲线模拟,其参数就是上述函数,则NewPrint的原型为()。
A)doubleNewPrint(doublex)
B)voidNewPrint(double(*f)(doublex))
C)void(*NewPrint)(doublex)
D)void(*NewPrint)(doublef(doublex))
8.结构体与共用体
1.结构体又称为“______”,是由具有不同数据类型的多个变量组合而成的数据存储形式。
定义一个结构体类型的一般形式为:
12struct结构体名{成员列表};
其中的成员又可以称为“______”,成员表列可以称为“______”。
2.若有以下的说明,则对初值中字符'a'的引用方式为()。
staticstruct
{
charch;
doublex;
chara[];
}c[2][2]={
{{'a',3.5,'bc'},
{'c',4.5,'de'},
{'m',8.6,'abc'}
}
};
A)c.chB)c[0][0].ch
C)c[1][1].chD)a[0]
3.设有以下说明语句:
structex
{
intx;
floaty;
charz;
}example;
则下面的叙述中不正确的是()。
A)struct结构体类型的关键字B)example是结构体类型名
C)x,y,z都是结构体成员名D)structex是结构体类型
4.以下选项中,能定义s为合法的结构体变量的是()。
A)typedefstructabc
{
doublea;
charb[10];
}s;
B)struct
{
doublea;
charb[10];
}s;
C)structabc
{
doublea;
charb[10];
}
abcs;
D)typedefstructabc
{
13doublea;
charb[10];
}
abcs;
5.变量a所占内存字节数是()。
unionU
{
charst[4];
inti;
longl;
};
structA
{
intc;
unionUu;
}a;
A)4B)5C)6D)8
9.位运算
1.在位运算符中除了取反运算符“~”以外,其余均为______运算符,即要求运算符的两侧各有一个运算量,并且运算量只能是______或者______数据。
2.位段就是以位为单位定义长度的______类型中的成员,就是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的______。
3.整型变量x和y的值相等,且为非0值,则以下选项中,结果为0的表达式是()。
A)x||yB)x|yC)x&yD)x^y
4.设有以下语句:
chara=3,b=6,c;
c=a^b<<2;
则c的二进制值是()。
A)00011011B)00010100
C)00011100D)00011000
5.字符(char)型数据在微机内存中的存储形式是()。
A)反码B)补码
C)EBCDIC码D)ASCII码
10.文件操作
1.标准函数fgets(s,n,f)的功能是()。
A)从文件f中读取长度为n的字符串存入指针s所指的内存
B)从文件f中读取长度不超过n-1的字符串存入指针s所指的内存
C)从文件f中读取n个字符串存入指针s所指的内存
D)从文件f中读取长度为n-1的字符串存入指针s所指的内存
2.对于用“r”方式打开文件,下列说法正确的是()。
A)用“r”方式打开的文件只能输入,不能输出
B)用“r”方式打开的文件只能输出,不能输入
C)用“r”方式可以打开任何文件
D)以上均不对
3.下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空。
#include"stdio.h"
FILE*fp;
{
charch;
if((fp=fopen(______))==NULL)
exit(0);
while((ch=getchar())!
='@')
fputc(ch,fp);
fclose(fp);
}
4.下面的程序执行后,文件test.t中的内容是:
程序1-10:
P1-10.C
#include
voidfun(char*fname,char*st)
{
FILE*myf;
inti;
myf=fopen(fname,"w");
for(i=0;ifputc(st[i],myf);
fclose(myf);
}
main()
{
fun("test","newworld");
fun("test","hello,");
}
A)hello,B)newworldhello,
C)newworldD)hello,rld
5.下面的程序用来统计文件中字符的个数,请填空。
程序1-11:
P1-11.C
#include
main()
{
FILE*fp;
longnum=0;
if((fp=fopen("fname.dat","r"))==NULL)
{
printf("Can'topenfile!
\n");exit(0);
}
while______
{
fgetc(fp);
num++;
}
printf("num=%d\n",num);
fclose(fp);
}
6.设有如下程序:
程序1-12:
P1-12.C
#include
main(argc,argv)
intargc;
char*argv[];
{
FILE*fp;
voidfc();
inti=1;
while(--argc>0)
if((fp=fopen(argv[i++],"r"))==NULL)
{
printf("Cannotopenfile!
\n");
exit
(1);
}
else
{
fc(fp);
fclose(fp);
}
}
voidfc(ifp)
FILE*ifp;
{
charc;
while((c=getc(ifp))!
='#')
putchar(c-32);
}
上述程序经编译、连接后生成可执行文件名为cpy.exe。
假定磁盘上有3个文本文件