一、判断题(每小题1分,共15分)
1.标准C中,只有数值型数据才能进行4则混合运算。
2.标准C中,_a是合法的自定义标识符。
3.有定义:float f表达式f+=(int)3.6%2”不符合C语言语法。
4.标准C中,逻辑运算的结果只有是1表示满足条件,而结果是0表示不满足条件。
6.以下运算符排列顺序满足按照优先级从高到低的排列:‘&&’、‘!’、‘==’、‘-’。
7.语句for()是非法的。
8.在C语言程序中可以由多个源文件构成,每个源文件都可以有自己的main()函数。
9.while和do-while的主要区别是后者至少无条件执行一次。
10.数组名代表数组的首地址是常量,所以将实参数组名表示地址传给形参数组名是错误的。
11.当函数没有返回值类型时,表示函数类型为void。
12.C语言中,指针变量作函数参数时,它们不是采取单向值传递的方式。
13.一个函数中只允许有一条return语句。
14.在C语言中,如果没有说明变量的存储类型是auto类型的。
15.由于指针中所存放的地址都是整数,所以整型指针和浮点型指针可以相互赋值。
二、填空题(每空1分,共15分)
1. 若a=4b=5,c=6则表达式c==(b=-a)中c的值是 (1) 。
2. 计算表达式的值:
4&&-4的值: (2) ;
设int a=3,b=4,c=5,则表达式a||b+c&&b==c的值: (3) ;
设x=2.5, a=7, y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值: (4) ;
设a=12,则表达式a*=a/5的值: (5) ;
3. 若int x = 4,y = 6,z = 0;有循环while(x = y) {z ++;y--;}
则循环语句执行完后,z值为 (6) 。
4. 变量的指针就是指该变量的 (7) 。
5. 若有定义int (*p)[4],则标识符p是 (8) ;若有定义int *p[4],则标识符p是 (9) ;
6. 已有定义:char *p[ ]={“France”,“Chinese”,“Russia”,“America”};则语句printf(“%s”,p[2]);printf(“%c”,*(p[1]+2));printf(“%c”,*(*(p+1)+1));
的输出结果分别为: (10) 、 (11) 、 (12) 。
7. 已有定义: int x=65若格式化输出结果为“A, 65”,则对应的格式化输出语句为printf(“ (13) , (14) ”, x, x)。
8. 已定义:int a[][2]={1, 2, 3, 4, 2, 6, 7, 2};则a[3][0]= (15) 。
三、简答题(每题4分,共12分)
1、简述选择语句if和else语句对与switch语句的区别。
2、简述在循环语句中,break和continue的区别。
3、若int a[5],*p=a;简述*p++和(*p)++的区别。
四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4分,共16分)
五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
七、编程题(8分)
编译程序,其功能是比较字符串的大小( 不允许 用系统提供的字符串比较函数strcmp)。要求是:
(1) 通过主函数调用一个函数strcompare来实现。
(2) 要求函数strcompare实现两个字符的比较:如第一个字符小于第二个字符则返回一个负值;如两个字符相等则返回0值;如第一个字符大于第二个字符则返回一个正值。
(3) 并输出两个字符串中相同部分的子串。
《C语言程序设计基础》试卷参考答案
一、判断题(每小题1分,共15分)
1~5 ; 6~10 ; 11~15
二、填空题(每空1分,共15分)
(1) 6 (2) 1 (3) 1 (4) 2.5 (5) 24 (6) 6
(7)地址 (8) 行指针,指向有四个元素的一维数组
(9)指针数组名,该数组有四个元素,每个元素都是指针
(10)Russia (11)i (12)h (13) %c (14) %d (15)7
三、简答题(每题4分,共12分)
1、if总是判断其后面的表达式的值是否为非零值,如是非零值则执行其后面的语句或由{}括起来的复合语句,否则执行else后面的语句。而switch语句则根据其后面表达式的可数值来判断,执行switch语句体内与其中的一个case:常量值相等语句后面的语句。执行break语句后,跳出switch语句体。
2、break是终止整个循环过程;continue是终止本次循环。
3、*p++首先取a[0]的值,然后p指向a[1];(*p)++使得a[0]的值自增1,但p保持不变。
四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4 分,共16分)
1、 (1)缺#include ; (2)scanf(“%f”,a)改为 scanf(“%f”,&a)
2、 (1)缺sum=0(2)for(i=1i<=3i++) 改为for(i=0i<3i++)
3、 (1)p1=p2 改为 *p1=*p2 (2)swap(&a, *p) 改为swap(&a, p)
4、 (1)在if(m<0)语句后添加else if(m==0) a=1(2) 添加 return(a)
五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
1、 (1)x=0(2)if(n==x) (3)s++或s=s+1
2、 (4)&num[i] (5)max<num[i]? (6)num[i]!=0
3、 (7)n-i-1 (8)a[j]>a[j+1] (9)a[j+1]=temp
4、 (10)count=0(11)n%10 (12)n>0或n!=0或n
六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
1、 #*#*#*
2、 main i=1 j=2 k=2
sub i=1 j=2 k=1 x=2
sub i=1 j=2 k=1 x=3
七、编程题(8分)
#include
main()
{
int i,j, flag=0
char str1[90],str2[90]
gets(str1)
gets(str2)
i=0
do{
flag=strcompare(str1[i],str2[i])
i++
}while(str1[i]!=’’ &&str2[i]!=’’ &&flag=0)
if(flag<0)printf(“%s小于%s ”,str1,str2)
else if(flag==0) printf(“%s 等于%s ”,str1,str2)
else printf(“%s大于%s ”,str1,str2)
printf(“两个字符串中相同的字串为:”)
j=0
i--后3句可用str1[i]=’’printf(“%s”,str1)代替//用str2也可以。
while(j<i){printf(“%c”,str1[i])j++} span=""></i){printf(“%c”,str1[i])j++}>
}
int strcompare(char c1,char c2)
{
int v
v=c1-c2
return v
}
1、下面标识符中,均为不合法的用户标识符为( C )。A、AB、x_0、for B、float、1a0、_Y
C、x-y、goto、123 D、_123、tmp、CHAR
2、执行printf(“%x”, 100);后的输出结果为( D )。
A、100 B、0x100
C、0x64 D、64
6、能表示条件-100≤x≤100的C语言表达式是( D)。
A、-100<=x<=100 B、x>=-100, x<=100
C、-100≤x≤100D、x>=-100 &&x<=100
7、C程序中,注释部分的位置( D )。
A) 必须在一行的开始 B) 必须在语句之后
C) 必须在一行的最后 D) 以上三种都可以
8、结构化程序的三种基本结构是( A )。
A、顺序结构、选择结构、循环结构B、递归结构、循环结构、转移结构
C、嵌套结构、递归结构、循环结构D、循环结构、转移结构、顺序结构
9、对数组的描述正确的是( B )。
A、 数组一旦定义其大小是固定的,但数组元素的类型可以不同
B、 数组一旦定义其大小是固定的,但数组元素的类型必须相同
C、 数组一旦定义其大小是可变的,但数组元素的类型可以不同
D、 数组一旦定义其大小是可变的,但数组元素的类型必须相同
10、设有说明语句:char a=’\72’,则变量a( A )。
A、包含1个字符B、包含2个字符
C、包含3个字符D、说明不合法
11、以下叙述不正确的是( D )。
A、一个C程序可由一个或多个函数组成
B、一个C程序必须包含一个main函数
C、C程序的基本组成单位是函数
D、在C程序中,注释说明只能位于一条语句的后面
12、C语言用( C )表示逻辑“真”值。
A、t B、yC、非0整数值 D、整数1
13、C语言程序中,若对函数类型未加显式说明,则函数的隐含类型为( C )类型。
A、void B、double C、int D、char
判断题:
1、unsigned 和void 在C中都是保留的关键字。
真
2、7/2+12的值是15.5。
假
3、C语言中一个int的变量在内存中占2个字节。
假
4.注释内容太多会影响程序的执行效率。
假
5、void play(int a, b) 是一个合法的函数说明。
假
6.在main函数中说明的变量,有效范围是main函数及其调用的函数。
假
7、C语言中的函数可以嵌套调用,也可以递归调用。
真
8、程序段 int x1=x是正确的。
假
9、对于 for(j=1j<=20j++)形式的循环语句,肯定要执行20次循环。
假
10、对于字符串 ”welcome\0”,使用strlen函数所求出的字符串长度是7
真
1、一个函数如下,用程序实现。
y =x(x<0)
y=2x-1(0<=x<10)
y=3x-11(x>=10)
main()
{
float x, y
scanf(“%f”, &x)
If (x<0)
y = x
else
if(x<10) ;
y = ( 2*x - 1 );
else
y =( 3*x-11 );
printf(“y=%f”, y)
return 1
}
2、下面程序的功能为:把100~200之间的不能被3整除的数输出,请填空。
main( )
{int n
for ( n=100 ;n<=200n++)
{
if (n%3= =0)
printf("%d\n",n)
}}
四:写出程序的输出结果:
1. main() {
int a=6,b=4
a = a+b //a=6+4 所以a=10
b = a−b//b=10-4 所以b=6
a = a-b//a=10-6 所以a=4
printf(“a=%d, b=%d”, a, b)
}
所以输出结果 a=4 b=6;
2. main(){
int m,n
for (m=5m<=10m++)
for (n=2n<=m-1n++)
if (m%n==0)
printf(“%d\t”,m)
}
668891010
main()
{ int k, a[10]={1,2,3,4,5}
for(k=1k<3k++) fun(a)
for(k=0k<5k++) printf("%d", a[k])
}
上面程序的输出结果是
A.34756
B.23445
C.35743
D.12345
(40) 请读程序:
#include
#define SUB(X,Y) (X)*Y
main()
{ int a=3, b=4
printf("%d", SUB(a++, b++))
}
上面程序的输出结果是
A.12
B.15
C.16
D.20(41) 请读程序:
#include
main()
{ int mun=0
while(num<=2)
{ num++printf("%d\n",num)}
}
上面程序的输出结果是
A.1
B.1
C.1
D.1
2 2 2
3 3
4
(42) 请读程序:
#include
main()
{ float x,y
scan("%f",&x)
if(x<0.0) y=0.0
else if((x<5.0)&&(x!=2.0))
y=1.0/(x+2.0)
else if (x<10.0) y=1.0/x
else y=10.0
printf("%f\n",y)
}
若运行时从键盘上输入2.0(表示回车),则上面程序的输出结果是
A.0.000000
B.0.250000
C.0.500000
D.1.000000
(43) 请读程序:
#include
main()
{ int x=1, y=0, a=0, b=0
switch(x)
{ case 1:
switch(y)
{ case 0: a++break
case 1: b++break
}
case 2:
a++b++break
}
printf("a=%d, b=%d\n",a,
B.
}
上面程序的输出结果是
A.a=2, b=1
B.a=1, b=1
C.a=1, b=0
D.a=2, b=2
(44) 若有下面的程序片段:
int a[12]={0}, *p[3], **pp, i
for(i=0i<3i++)
p[i]=&a[i*4]
pp=p
则对数组元素的错误引用是
A.pp[0][1]
B.a[10]
C.p[3][1]
D.*(*(p+2)+2)
(45) 请读程序:
#include
#include
main()
{ float x,y,z
scan("%f%f",&x,&y)
z=x/y
while(1)
{ if(fabs(z)>1.0)
{ x=yy=zz=x/y
}
else break
}
printf("%f\n",y)
}
若运行时从键盘上输入3.6 2.4(表示回车),则输出的结果是
A.1.500000
B.1.600000
C.2.000000
D.2.400000
(46) 请读程序:
#include
f(in b[], int n)
{ int i, r
r=1
for(i=0i<=ni++) r=r*b[i]
return r
}
main()
{ int x, a[]={ 2,3,4,5,6,7,8,9}
x=f(a, 3)
printf("%d\n",x)
}
上面程序的输出结果是
A.720
B.120
C.24
D.6
(47) 请读程序:
#include
#include
void fun( char *s)
{ char a[10]
strcpy( a, "STRING")
s=a
}
main()
{ char *p
fun(p)
x=f(a, 3)
printf("%s\n",p)
}
上面程序的输出结果是(└┘表示空格)
A.STRING└┘└┘└┘└┘
B.STRING
C.STRING└┘└┘└┘
D.不确定的值
(48) 若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是
A.s->next=NULLp=p->nextp->next=s
B.p=p->nexts->next=p->nextp->next=s
C.p=p->nexts->next=pp->next=s
D.p=(*p).next(*s).next=(*p).next(*p).next=s
(49) 请读程序:
#include
void fun(float *pl, float *p2, float *s)
{ s=( float * )calloc( 1, sizeof(float))
*s=*p1+ *(p2++)
}
main()
{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a
fun(a, b, s)
printf("%f\n",*s)
}
上面程序的输出结果是
A.11.100000
B.12.100000
C.21.100000
D.1.100000
(50) 请读程序:
#include
#include
void fun( char *w, int m)
{ char s, *p1, *p2
p1=wp2=w+m-1
while (p1{ s=*p1++*p1=*p2--*p2=s}
}
main()
{ char a[]="ABCDEFG"
fun( a, strlen(a))
puts(a)
}
上面程序的输出结果是
A.GFEDCBA
B.AGADAGA
C.AGAAGAG
D.GAGGAGA
二、填空题(每空2分,共40分)
请将每空的正确答案写在答题卡上【1】-【20】序号后的横线上,答在试卷上不得分。
(1) DOS命令分为内部命令与外部命令,XCOPY命令是 【1】 命令
(2) 为了列出当前盘当前目录中所有第三个字符为C的文件名的有关信息,应该用命令 【2】 。
(3) 设当前盘为A盘,当前目录为\X\Y,A盘上的一个文件QR.C在当前目录下的子目录W中。现已将A盘的当前目录改为\D\XY,当前盘改为C盘,如需指定A盘上该文件应写成 【3】 。
(4) 用十六进制给存储器中的字节地址进行编号,其地址编号是从0000到FFFF,则该存储器的容量是【4】KB。
(5) 设有两个八位二进制数00010101与01000111相加,其结果的十进制表示为 【5】 。
(6) 数学式子 写成C语言表达式是 【6】 。
(7) 下面程序的输出结果是 【7】 。
#include
main()
{ static char b[]="Goodbye"
char *chp=&b[7]
while( --chp >=&b[0]) putchar( *chp)
putchar(’\n’)
}
(8) 下面程序的输出结果是 【8】 。
#include
void as( int x, int y, int *cp, int *dp)
{ *cp=x+y
*dp=x-y
}
main()
{ int a=4, b=3, c, d
as( a, b, &c, &d)
printf( ’%d %d\n", c, d)
}
(9) 请读程序:
#include
main( int argc, char *argv[])
{ int i
printf( ’%d\n", argc)
for( i=0i<=argc+1i++) printf( "%s ", argv[i])
printf("\n")
}
若上面的程序编译、连接后生成可执行文件ABC.EXE,则输入以下命令行
abc file1 file2(表示回车)
程序执行后的输出结果是 【9】 。
(10) 条件“20(11) 设二进制数a是00101101,若想通过异或运算a^b使a的高4位取反,低4位不变,则二进制数b应是 【11】 。
(12) 若有以下说明和定义语句,则变量w在内存中所占的字节数是 【12】 。
union aa
{ float x, y
char c[6]
}
struct st { union aa vfloat w[5]double ave} w
(13) 下面程序的输出结果是 【13】 。
#include
#define N 5
fun( char *s, char a, int n)
{ int j
*s=aj=n
while( ereturn j
}
main()
{ char s[N+1]
int k, p
for( k=1k<=Nk++)
s[k]=’A’+k+1
printf( "%d\n", fun(s, ’E’, N))
}(14) 下面程序的输出结果是 【14】 。
#include
void fun( char *a1, char *a2, int n)
{ int k
for( k=0ka2[k]=( a1[k]-’A’-3+26)&+’A’
a2[n]=’\0’
}
main()
{ char s1[5]="ABCD", s2[5]
fun( s1, s2, 4)
puts( s2)
}
(15) 下面的findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。
findmax( int s[], int t)
{ int k, p
for( p=0, k=ppif( s[p]>s[k]) 【15】 。
return k
}
(16) 下面程序的输出结果是 【16】 。
#include
fun( int x)
{ int p
if( x==0||x==1) return(3)
p=x-fun( x-2)
return p
}
main()
{ printf( "%d\n", fun(9))}
(17) 下面程序的输出结果是 【17】 。
#include
funa( int a, int b)
{ return a+b}
funb( int a, int b)
{ return a-b}
sub( int (*t)(), int x, int y)
{ return((*t)( x,y))}
main()
{ int x, (*p)()
p=funa
x=sub(p,9,3)
x+=sub(funb, 8, 3)
printf("%d\n", x)
}
(18) 下面程序的输出结果是 【18】 。
#include
main()
{ char *p[]={ "BOOL", "OPK", "H", "SP"}
int i
for(i=3i>=0i--,i--) printf( "%c", *p[i])
printf("\n")
}
(19) 为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是向结点的指针域),请填空。
data next
struct link { char data【19】 } node
(20) 下面的程序用来统计文件中字符的个数,请填空。
#include
main()
{ FILE *fp
long num=0
if(( fp=fopen("fname.dat","r"))==NULL)
{ printf( "Can’t open file! \n")exit(0)}
while 【20】
{ fgetc(fp)num++}
printf("num=%d\n", num)
fclose(fp)
}
参考答案一`选择题((1)~(40)题每题1分,(41)~(50)题每题2分,共60分)
(1)C (2)A (3)B (4)D (5)D (6)A (7)C (8)B (9)D (10)C
(11)B (12)D (13)A (14)C (15)B (16)A (17)B (18)A (19)C (20)C
(21)D (22)B (23)B (24)A (25)C (26)D (27)D (28)B (29)C (30)A
(31)B (32)B (33)D (34)C (35)A (36)C (37)A (38)B (39)C (40)A
(41)C (42)C (43)A (44)C (45)B (46)B (47)D (48)C (49)D (50)C
二` 填空题(每空2分,共40分)
(第(2)`(3)空允许小写或大小写混合使用,其它空均须与答案一样)
(1) 外部
(2) DIR ?? C*.*
(3) A:\X\Y\W\QR.C
(4) 64
(5) 92
(6) pow(sin(x),2) * (a+b)/(a-b) 或 sit(x) * sit(x) * (a+b)/(a-b)
(7) eybdooG
(8) 7 1
(9) 3 abc.exe file1 file2 (注:两个答案,每个1分)
(10) ((20 (11) 11110000
(12) 34
(13) 3
(14) XYZA
(15) k=p
(16) 7
(17) 17
(18) SO
(19) struct link *next
(20) (!feof(fp))或(feof(fp)==0)