笔试样卷
一、选择题(每小题1分,共10分)
1.在 C 语言中,逻辑值“真”用 ( 1) 表示。
( 1) (A) true (B) 大于 0 的数 (C) 非零整数 (D) 非零的数
2.下列程序中有 3 个具有相同功能,只有 ( 2) 所完成的功能与其他程序不同。
( 2) (A) sum=0; (B) sum=0;
i=0; i=1;
while(i<=50) while(i++<50)
sum+=i++; sum+=i;
(C) sum=0; (D) sum=0;
i=0; i=0;
while(i<50) while(++i<=50)
sum+=++i; sum+=i;
3.已知下列程序:
#include "stdio.h"
main(int argc,char *argv[])
{
int i;
for(i=0;i<argc;i++)
printf("%s\n",argv[i]);
}
该程序的可执行文件名为 program.exe,运行程序时键入的命令行为:
program apple orange banana
则执行结果为 ( 3) 。
( 3) (A) (B) (C) (D)
PROGRAM PROGRAM.EXE apple p
apple apple orange a
orange orange banana o
banana banana b
4.在下列选项中,不正确的表达式是 ( 4) 。
( 4) (A) a>b>c (B) x=a+b>c+d=y (C) a=1,b=2,c=3 (D) p++
5.若有定义 int a[ ]={1,2,3,4,5},*p=a;则下面错误的运算式是 ( 5) 。
( 5) (A ) *(p+=3) (B) a[3]++ (C) (a+=2) (D) ++p, ++p, *p
6.下列函数调用不正确的是 ( 6) 。
( 6) (A) putchar(putchar(ch)) (B) str=gets(s) (C) fclose(fp) (D) fopen(fp)
7.定义 char *s 且执行 s=malloc(255)之后,能正确输入一个串的是 ( 7) 。
( 7) (A) scanf("%s",&s); (B) scanf("%c",&s[0]);
(C) scanf("%s",s); (D) scanf("%s",*s)
8.已知: int a=1, b=2, c=3 则表达式 ~( a<<b^c)运行结果为 ( 8) 。
( 8) ( A) 8 ( B) -8 ( C) 7 ( D) -7
9. main()
{ char s[]="abcdefg";
printf("%s",&s[3]);
}
程序的运行结果为 ( 9) 。
( 9) ( A) c ( B) d ( C) cdefg ( D) defg
10. #include "stdio.h"
void f(char *s,char *t)
{ int i=0,j=0;
while(*(s+i)) i++;
while(s[i++]=t[j++]);
}
main()
{ char s[]="xyz",t[]="abc";
f(s,t);
printf("%s\n",s);
}
程序运行结果为 ( 10) 。
( 10) ( A) abc ( B) xyzabc ( C) xyz ( D) xyz abc
二、读程序,并选出正确的答案(每空3 分,共45分)
1.如下程序:
#include <stdio.h>
main()
{
union EXAMPLE{
struct{ int x;
int y;
}in;
int a;
int b; }e;
e.a=1;
e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("\n%d",e.in.x);
printf("\n%d",e.in.y);
printf("\n%d",e.a);
printf("\n%d",e.b);
}
第一个 printf 行的输出为 ( 11) 。
( 11) (A) 4 (B) 5 (C) 6 (D) 7
第二个 printf 行的输出为 ( 12) 。
( 12) (A) 5 (B) 6 (C) 7 (D) 8
第三个 printf 行的输出为 ( 13) 。
( 13) (A) 4 (B) 5 (C) 6 (D) 7
第四个 printf 行的输出为 ( 14) 。
( 14) (A) 4 (B) 5 (C) 6 (D) 7
2.阅读程序,写出程序循环 3 次分别输出为 ( 15) 、 ( 16) 、 ( 17) 。
extern int a;
main()
{ int i;
for(i=1;i<4;i++)
{
++a;
printf("%d,",a);
s();
}
}
int a=9;
int s()
{ int a=100;
static int b=10;
++a;
printf("%d,%d\n",a,b);
b+=10;
}
( 15) (A) 1, 10, 10 (B) 10,101,10 (C) 10,11,10 (D) 1,101,10
( 16) (A) 11,101,20 (B) 102,101,10 (C) 11,101,10 (D)
101,11,20
( 17) (A) 102,101,10 (B) 12,102,30 (C) 102,101,30 (D) 12,101,30
3.写出下列程序运行结果。
#include "stdio.h"
#include "stdlib.h"
main()
{ char ps1[10]="1234",ps2[10]="5678",*s1=ps1,*s2=ps2;
while (*s1) s1++;
while(*s2)
{ *s1=*s2;
s1++;
s2++;
}
*s1='\0';
printf("%s\n",ps1); 输出为 : ( 18) 。
printf("%s\n",ps2); 输出为 : ( 19) 。
}
( 18) (A) 1234 (B) 5678 (C) 678 (D) 12345678
( 19) (A) 3456 (B) 5678 (C) 12345678 (D) 1234
4.下列程序:
#include "stdio.h"
f(int a)
{int b=0;
static int c=3;
b=a+c++;
return(b);
}
main()
{int a=2,i,k=0;
for(i=1;i<=2;i++)
{ k=f(a++)+k;
printf("k=%d\n",k);
}
}
程序运行的结果为 ( 20) 。
( 20) (A) k=5 (B) k=5 (C) k=5 (D) k=5
k=11 k=12 k=6 k=7
若将函数中的 static int c=3;换成 int c=3;,则程序运行结果为 ( 21) 。
( 21) (E) k=5 (F) k=5 (G) k=5 (H) k=5
k=11 k=12 k=6 k=7
5. #include "a:f1.c"
main()
{ int a,b;
scanf("%d,%d",&a,&b);
f1(a,b);
printf("a=%d,b=%d\n",a,b);
}
软盘上 f1.c 文件的内容如下 :
f1(x,y)
int x,y;
{int t;
if(x>y) {t=x;x=y;y=t;}
}
程序运行输入的数据为: 10,5
输出结果为 ( 22) 。
( 22) (A) a=5,b=10 (B) a=10,b=5 (C) 程序不能运行 (D) 函数调用有错
6.若 x,y 是整型变量,则执行以下语句后的 x 的值是 ( 23) , y 的值是 ( 24) 。
for (y=1,x=1;y<=50;y++)
{ if (x>=10) break;
if (x%2==1)
{ x+=5;continue; }
x-=3;
}
( 23) (A) 1 ( B) 6 ( C) 7 ( D) 10
( 24) (A) 6 ( B) 2 ( C) 4 ( D) 8
7. main()
{ char a[5][10]={ "ab","efgh","ijk","mnop","st"};
char *b[5]= {"ab","efgh","ijk","mnop","st"};
char **ptr;
int i;
ptr=b;
for(i=0;i<4;i++)
L1:printf("%s",ptr[i]);
printf("\n");
for(i=0;i<=4;i++)
printf("%s",*(a+i));
printf("\n");
}
L1 行输出结果为 ( 25) 。
( 25) (A) abef ( B) abefg ( C) abefghijkmnopst ( D) abefghijkmnop
三、程序填空(每空3分,共45分)
1.打印以下的扬辉三角形(要求打印出 10 行) 。
1
1 1
1 2 1
1 3 3 1
…
#include "stdio.h"
main()
{int k[10][10],i,j;
for (i=0;i<10;i++)
{ for (j=0;j<i+1;j++)
{ if (j==0)
{k[i][j]=1; printf(" 1");}
else
if(i==1)
{ k[i][j]=1; printf(" 1");}
else
if( ( 26) )
{ k[i][j]=1; printf(" 1");}
else
{ ( 27)
printf("%3d", k[i][j]);}
}
printf("\n");
}
}
2.软盘上已有一个数据文件 data1.dat,存储的数据形式为:
1, 2, 3
4, 5, 6
7, 8, 9
10, 11, 12
13, 14, 15
16, 17, 18
19, 20, 21
22, 23, 24
25, 26, 27
28, 29, 30
要将该数据文件的数据取出,存放在一个数组中,并显示在屏幕上。请将程序完善。
#include "stdio.h"
main()
{ int i,a[10][3];
char fname[10];
FILE *fp;
printf("input data filename:");
scanf("%s",fname); /*输入的文件名为 ( 28) */
fp=fopen(fname,( 29) );
for(i=0;i<10;i++)
( 30) (fp,"%d,%d,%d",&a[i][0],&a[i][1],&a[i][2]);
fclose(fp);
printf("output data is:\n");
for(i=0;i<10;i++)
printf("%5d,%5d,%5d\n",a[i][0],a[i][1],a[i][2]);
}
3.从键盘输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束。
请完善程序。
main()
{ float x, lmax, lmin;
scanf ("%f", ( 31) );
lmax=x;
lmin=x;
while ( ( 32) )
{ if (x>lmax) lmax=x;
if ( ( 33) ) lmin=x;
scanf("%f",&x);
}
printf("\nlmax=%f\nlmin=%f\n",lmax,lmin);
}
4.下面的程序能将字符串 How do you do!反向输出到屏幕上。请完善程序。
#include "stdio.h"
main()
{ print("\n How do you do! \n");
}
print(char *string)
{ char *str= ( 34) ;
if(*str== ( 35) ) return;
while(*str)str++;
--str;
printf("%c",*str);
*str=NULL;
print( ( 36) );
}
5.下列程序是将字符串 temp 后移 length 个位置,移出的字符移到串首。请完善程序。
#include "stdio.h"
#include "string.h"
main()
{ void backmove();
char temp[81];
int length=3;
gets(temp);
backmove(temp,length);
printf("%s\n",temp);
return;
}
void backmove(x,m)
char *x;
int m;
{ int i,j,n;
char ch;
n=strlen(x);
for(j=0;j<m;j++)
{ ch= ( 37) ;
for(i=0;i<n-1;i++)
*(x+n-1-i)= ( 38) ;
*x=ch;
}
}
6.以下程序把从键盘输入的字符存放到一个文件中,用 ' # ' 作为结束符 .请按题意要求
填空完善程序。
#include <stdio.h>
main()
{ FILE *fp;
char ch,fname[10];
printf("Input the file name:\n");
gets(fname);
if((fp=fopen( ( 39) ,"w"))==NULL)
{ printf("cannot open file\n");
exit(0);
}
while(ch= ( 40) )
fputc(ch,fp);
fclose(fp);
}