前两天做的测试题目及答案
一 填空题(20分)
1.C语言表达式 5>2>7>8 的值是( )。
2.当执行完以下语句后,变量a的值为( ),d的值为( ),e的值为( )。
a=6; b=++a; c=--a; d=a++; e=a--;
3.下面程序段的输出结果是( )。
char a=111; a=a^00; printf(“%d %o/n”,a,a);
4.a数组定义如下,按照内存排列顺序,a数组中的所有元素是( )。
char a[3];
5.设有以下宏定义,则执行赋值语句 a=PP+20;(a为int型变量)后,a的值是( )。
#define PR 8
#define PP PR*40
6.定义结构体类型时,应使用关键字( ),定义枚举类型时,应使用关键字( )。
7.C文件可以分为两种类型,它们是( )文件和( )文件。
8.若有char a[3]=“as”;则*a=( ),*(a+2)=( )。
二 判断对错(5分,对的划“√”,错的划“×”)
1.。( )
2.表达式1/4+2.75的值是3。( )
3.结构体类型只有一种。( )
4.函数若无返回值,则它一定无形参。( )
5.C语言只能处理文本文件和二进制文件。( )
二 判断对错(10分,每题1分。对的划“√”,错的划“×”)
1.在Turbo C中,实型数据在内存中占4个字节。( )
2.被main函数调用的函数只能是库函数。( )
3.对整型变量可进行自加或自减运算,而对常量或表达式不可以。( )
4.算术运算符和赋值运算符的结合方向均由左自右。( )
5.定义在main函数后的任何函数都需在main中进行函数声明。( )
6.一个函数中只允许有一条return语句。( )
7.任何数组在使用时必须先定义。( )
8.在int *p;和语句printf(“%d”, *p);中的*p含义相同。( )
9.在定义枚举时,枚举常量可以是标识符或数字。( )
10.用fopen(“file1”,”r+”)方式打开的文件可进行修改。( )
三 选择题(20分,每题2分)
1.a,b为整形变量,二者均不为0,以下关系表达式中恒成立的是( )。
(A) a*b/a*b==1 (B) a/b*b/a==1
(C) a/b*b+a%b==a (D) a/b*b==a
2.C语言源程序的基本单位是( )。
(A) 过程 (B) 函数 (C) 子程序 (D) 标识符
3.以下函数调用语句中含有( )个实参。
func((e1,e2),(e3,e4,e5));
(A) 2 (B) 3 (C) 5 (D) 语法错误
4.以下的 for 循环( )。
for(x=0,y=0;(y!=123)&&(x<4);x++) ;
(A) 执行 3 次 (B) 执行 4 次
(C) 循环次数不定 (D) 是无限循环
5.以下程序的输出结果为( )。
#define N 2
#define M N+2
#define CUBE(x) (x*x*x)
#include "stdio.h"
main( )
{ int i=M;
i=CUBE(i);
printf("%d/n",i);
}
(A) 17 (B) 64 (C) 125 (D) 53
6.以下程序的输出结果为( )。
main( )
{ int i=010,j=10,*pi,*pj;
pi=&i; pj=&j;
printf("%d.%d/n",*pi,*pj);
}
(A) 10,10 (B) 8,10 (C) 010,10 (D) 8,8
7.在下列程序段中,枚举变量 c1,c2 的值依次是( ),( )。
enum color { red,yellow,blue=4,green,white} c1,c2;
c1=yellow; c2=white;
printf("%d,%d/n",c1,c2);
(A) 1 (B) 3 (C) 5 (D) 6
8.要打开一个已存在的非空文件"file"用于修改,选择正确的语句( )。
(A) fp=fopen("file","r"); (B) fp=fopen("file","w");
(C) fp=fopen("file","r+"); (D) fp=fopen("file","w+");
9.以下程序的输出结果是( )。
main()
{ char s1[20]=“abc”,s2[20]=“123”;
if(strcmp(s1,s2)>0) printf(“%s/n”,s1));
else printf(“%s/n”,s2);
}
(A) abc (B) 123 (C) abc123 (D) 123abc
10.已知职工记录描述如下,设变量w中的“生日”是“1993年10月25日”,下列对“生日”的正确赋值方式是( )。
struct worker
{ int no; char name[20]; char sex;
struct { int day; int month; int year;}birth;
};
struct worker w;
(A) day=25; month=10; year=1993;
(B) w.birth.day=25; w.birth.month=10; w.birth.year=1993;
(C) w.day=25; w.month=10; w.year=1993;
(D) birth.day=25; birth.month=10; birth.year=1993;
四 写出下列程序的运行结果(25分,每题5分)
1.main()
{ int i,j;
i=16; j=(i++)+i; printf("%d/n",j);
i=15; printf("%d/t%d/n",++i,i);
}
2.#include "stdio.h"
main()
{ int i;
for(i=1;i+1;i++)
{ if(i>4)
{ printf("%d/n",i++);
break;
}
printf("%d/n",i++);
}
}
3.#include "stdio.h"
main()
{ int i,j,a[]={0,2,8,4,5};
printf("/n");
for(i=1;i<=5;i++)
{ j=5-i;
printf("%2d",a[j]);
}
}
4.#include "stdio.h"
main()
{ char string1[]={"ABCDEFGHIJ"},string2[10];
s(string1,string2,5);
printf("%s/n",string2);
}
s(p,q,m)
char *p.*q;
int m;
{ int n=0;
while(n<m-1)
{ n++;
p++;
}
while(*p!='/0')
{ *q=*p;
p++;
q++;
}
*q='/0';
}
5.main()
{ int y;
fac(5,&y);
printf(“y=%d/n”,y);
}
fac(int n,int *t)
{ int s;
if((n==1)||(n==0)) *t=2;
else { fac(n-1,&s); t=n*s; }
}
五 阅读下列程序,在 处填入适当内容,使程序完整(25分,每个空2分)
1.试求出1000以内的“完全数”。(提示:如果一个数恰好等于它的因子之和(因子包括1,不包括数本身),则称该数为“完全数”。如:6的因子是1、2、3,而6=1+2+3,则6是个“完全数”。)
main()
{
int i,a,m;
for(i=1;i<1000;i++)
{
for(m=0,a=l;a<=i/2;a++)
if(!(i%a)) (1) ;
if( (2) ) printf("%4d",i);
}
}
2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。
#define N 10
char str[N];
main()
{
int i,flag;
for(i=0;i<10;i++)
scanf("%c",&str[i]);
sort(_(1)__);
for(i=0;i<N;i++)
printf("%c",str[i]);
printf("/n");
}
sort(str)
char str[N];
{ int i,j;
char t;
for(j=1;j<N;j++)
for(i=0;i<N-j;i++)
if(str[i]> (2) )
{ t=str[i];
______(3)______;
______(4)______;
}
}
3.将一个磁盘文件中的信息复制到另一个磁盘文件中。
#include "stdio.h"
main()
{ (1) *in,*out;
char ch,infile[10],outfile[10];
printf("Enter the infile name:/n");
scanf("%s",infile);
printf("Enter the outfile name:/n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{ printf("Cannot open input file./n");
exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{ printf("Cannot open output file./n");
exit(0);
}
while(!feof(in))
fputc( (2) ,out);
(3) ;
(4) ;
}
4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。
#define N 10
main()
{
void maxmin(int arr[],int *pt1,int *pt2,int n);
int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
p1=&a; p2=&b;
maxmin(array,p1,p2,N);
printf("max=%d,min=%d",a,b);
}
void maxmin(int arr[],int *pt1,int *pt2,int n)
{
int i;
*pt1=*pt2=arr[0];
for(i=1;i<n;i++)
{
if(arr[i]>*pt1) (1) ;
if(arr[i]<*pt2) (2) ;
}
}