z||1);
3.以下有关宏替换的叙述不正确的是(D)。
(A)宏替换不占用运行时间(B)宏名无类型
(C)宏替换只是字符串替换;(D)宏替换是在运行时进行的
4.已知函数的调用形式:
fread(buffer,size,count,fp);其中buffer代表的是(C)。
(A)一个整型变量,代表要读入的数据项总数
(B)一个文件指针,指向要读的文件
(C)一个指针,指向要读入数据的存放地址
(D)一个存储区,存放要读的数据项
5.在位运算中,操作数每左移一位,其结果相当于(A)。
(A)操作数乘以2(B)操作数除以2
(C)操作数除以4(D)操作数乘以4
6.数字字符0的ASCII值为48,若有以下程序
#include
voidmain()
{
chara='1',b='2';
printf("%c,",b++);
printf("%d\n",b-a);
}
程序运行后的输出结果是(C)。
A)3,2B)50,2 C)2,2 D)2,50
7.有以下程序
#include
voidmain()
{
intm=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d\n",n++,++m);
}
程序运行后的输出结果是(C)。
A)12353514B)12353513 C)12343514 D)12343513
8.已有定义intk=2;int*ptr1,*ptr2,且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是(B)
A)k=*ptr1+*ptr2;B)ptr2=k;
C)ptr1=ptr2;D)k=*ptr1*(*ptr2);
9若有定义inti=2,a[10],*p=&a[i];则与*p++等价的是(A)。
A)a[i++]B)a[i]++C)a[i]D)a[++i]
10.有定义inta=3,b=4,c=5;执行完表达式a++>--b&&b++>c--&&++c后,a,b,c的值分别为(B)。
A)345B)435C)444D)445
11.已知:
intx=1,y=2,z=0;则执行:
z=x>y?
10:
20后,z的值为(B)。
A)10B)20C)1D)2
12.若已定义x和y为double类型,则表达式x=2,y=x+10/4的值是(C)。
A)2B)4C)4.0D)4.5
13.有定义语句:
intb;charc[10];,则正确的输入语句是(B)。
A)scanf("%d%s",&b,&c); B)scanf("%d%s",&b,c);
C)scanf("%d%s",b,c); D)scanf("%d%s",b,&c);
14.在一个源程序文件中定义的全局变量,其作用域为(B)。
A)定义所处的整个源程序文件B)从定义处开始到本源程序文件结束
C)整个主函数D)所处C程序的所有源程序文件中
15.在下面C语言的函数说明语句中,正确的是(A)。
A)intfun(intx,inty);B)intfun(intx,y);
C)intfun(x,y);D)intfun(intx;inty);
16.有以下程序
#include
voidmain()
{
intm,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是(A)。
A)m=123n=456p=789 B)m=123 n=456 p=789
C)m=123,n=456,p=789 D)123 456 789
17.已知E的ASCII码是69,则执行以下语句的结果是(C)
printf("%c",'E'-'8'+'5');
A)66B)AC)BD)E
18.有定义:
char*s=”\t\”Name\\Address\”\n”;,那么strlen(s)等于(B)。
A)15B)16
C)17D)18
19.设有定义:
intm=1,n=-1;则执行语句printf("%d\n",(m--&++n));后的输出结果是(B)
A)–1B)0C)1D)2
20.有以下程序
#include
voidmain()
{
inta,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是(B)。
A)6,1 B)2,1 C)6,0 D)2,0
二.基本概念选择填空题(本大题后面有若干备选项,请选择合适的备选项并将其号码填入各小题的空白处。
每空2分,共10分)
1.函数main(intargc,char*argv[])中argc表示的是______①____。
2.在C语言中,没有字符串变量,只有字符变量,字符串都存储在以②为结束符的字符数组中。
3.一个函数调用语句为fun((e1,e2,e3),(e4,e5),e6);,其实参个数为__③____。
4.为了避免嵌套的if-else语句的二义性,C语言规定else总是与___④____组成配对关系。
5.当程序打开一个文件时,系统就要在内存中建立一个与该文件对应的⑤结构体变量,存储该文件的有关信息。
①F②B③J④A⑤K
备选项:
(A)空格
(B)'\0'
(C)'\n'
(D)在其之前未配对的if
(E)参数字符串
(F)命令行参数的个数
(G)6
(H)在其之前最近的未配对的if
(J)3
(K)FILE
(L)EOF
(M)命令行参数的字符数
三.程序填空题。
(每空2分,共20分)。
1.以下程序的功能是:
从键盘上输入若干个学生的成绩,统计计算出平均成绩。
请填空。
#include
voidmain()
{
floatsum=0.0,ave,a;
intn=0;
printf("Entermark\n");
scanf("%f",&a);
while(a>=0.0)
{
sum=sum+a;
_____①_________;//n++
scanf("%f",&a);
}
ave=sum/n;
printf("ave=%f\n",ave);
}
2.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。
#include
voidmain()
{
charstr[]={"abcdefg"};
char*p1,*p2,ch;
p1=str;
p2=str;
while(*p2!
='\0')p2++;
____②________;//p2--
while(p1{
ch=*p1;*p1=*p2;*p2=ch;
____③_____;//p1++
p2--;
}
puts(str);
}
3.以下程序中,fun函数的功能是求m行4列二维数组每行元素中的最大值。
请填空。
#include
intfun(int,int,int(*)[4]);
voidmain()
{
inta[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},i;
for(i=0;i<3;i++)printf("%4d",fun(④)); //i,4,a
printf("\n");
}
intfun(intm,intn,inta[][4])
{
intj,x;
x=a[m][0];
for(j=0;jreturnx;
}
4.下面的程序是用来在数组table中查找x,若数中存在x程序输出数组中第一个等于x的数组元素的下标,否则输出-1。
请填空。
#include
inttable[10]={12,34,54,23,45,33,78,87,59,97},x;
intlookup(intt[],intkey,intn)
{
intk;
for(k=0;kif(t[k]==key)⑥;//break
if( ⑦ )k=-1; //k>=n
returnk;
}
voidmain()
{
scanf("%d",&x);
printf("x_location:
%d\n",lookup(table,x,10));
}
5.下列函数insert实现在一维数组v中插入一个元素x,且要求将该元素插入到下标为i位置,数组原有下标为i及以后的元素都将向后移动一个元素的位置,i>=0。
如果i大于等于元素的个数,则x插到数组的末尾。
原有的元素个数存放在指针n所指向的变量中,插入后元素个数加1。
主函数验证了该函的功能。
请填空。
#include
voidinsert(intv[],int*n,intx,inti);
voidmain()
{
inta[20]={1,2,3,4,5,6,7};
intkey=11;
intn=7,*p=&n;
insert(a,p,key,14);
for(key=0;key<*p;key++)printf("%d",a[key]);
putchar('\n');
printf("%d\n",n);
}
voidinsert(intv[],int*n,intx,inti)
{
intj;
if(___⑧____)//i<*n
for(j=*n-1;j>=i;____⑨____)//j--
_____⑩____=v[j];//v[j+1]
else
i=*n;
v[i]=x;
(*n)++;
}
四.阅读程序题(每小题5分,共30分)
1.下面程序的运行结果为:
( f=6 )
#include
intf(intnum,intrun)
{
staticintfact,i;
if(run==0)
{
fact=1;
i=1;
}
fact*=i;
if(++i<=num)
f(num,1);
return(fact);
}
voidmain()
{
inti=0;
printf("f=%d\n",f(3,0));
}
2.下面程序的运行结果是:
(63)
#include
main()
{
inta[]={1,3,5,7,9},b[4]={2,4,6,8},*p=a,*q=b;
p+=2;
q++;
*p=(*q)%3+5;
*(++q)=*(p--)-3;
printf("%d",*(p+1));
printf("%d\n",q[0]);
}
3.运行程序时输入-6931,则输出结果是:
(-1396)
#include
voidprintopp(longintn)
{
inti=0;
if(n==0)return;
else
while(n)
{
if(n>0||i==0)
printf("%1d",n%10);
else
printf("%ld",-n%10);
i++;
n/=10;
}
}
voidmain()
{
longintn;
scanf("%ld",&n);
printopp(n);
printf("\n");
}
4.下面程序的运行结果是:
(34)
#include
#defineN2
#defineY(n)((N+1)*n)
main()
{
intz;
z=2*(N+Y(5));
printf("%d",z);
}
5.以下程序的运行结果为( 9)
#include
voidmain()
{
longfun(intn);
printf("%ld\n",fun(4));
}
longfun(intn)
{
longs;
if(n==1||n==2)
s=2;
else
s=n+fun(n-1);
returns;
}
6.以下程序的运行结果为(4321)
#include
voidmain()
{
voidfun(int*x,int*y);
inta[]={1,2,3,4},j,x=0;
for(j=0;j<4;j++)
{
fun(a,&x);
printf("%d",x);
}
printf("\n");
}
voidfun(int*x,int*y)
{
staticintt=3;
*y=x[t];
t--;
}
五.编程序(每小题10分,共20分)
1.编写程序求下面数列
的前20项之和。
参考程序:
#include
main()
{
doublex,sum;
inti;
for(i=1,x=2,sum=0;i<=20;i++)
{
sum=sum+x;
x=1+1/x;
}
printf("Front20termsof2/1+3/2+5/3+……=%lf\n",sum);
}
2.函数fac的原型为longfac(intk);,函数利用静态变量实现:
连续以1,2,3,……,n为参数调用该函数后,函数最后返回n!
。
要求编制该函数并用相应的主函数进行测试。
参考程序:
#include
voidmain()
{
longfac(intn);
intn,j;
longff;
scanf("%d",&n);
for(j=2;j<=n;j++)
ff=fac(j);
printf("n!
=%ld\n",ff);
}
longfac(intn)
{
staticlongff=1;
ff*=n;
returnff;
}