北京农学院C语言程序设计复习题

本试卷为北京农学院C语言程序设计复习题,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,指针,数组/指针数组,字符串/字符串指针,函数/函数指针,程序题,结构体,文件。

C语言程序设计复习题

一、单项选择题 (共20题,每题2分,共计40分)

(  A  )
1、设int x=7,则~x的值是________。
A、-8
B、7
C、-1
D、1
(  B  )
2、交换两个变量的值,不允许用临时变量,应该使用下列( )位运算符。
A、&
B、^
C、||
D、~
(  B  )
3、下列程序的运行结果是________。
void main()
{
int s=0,k;
for(k=7;k>1;k--)
{
switch(k)
{
case 1: case 4: case 7: s++: break;
case 2: case 3: case 6:break;
case 0: case 5: s+=2: break;
}
}
printf("s=%d",s);
}
A、s=3
B、s=4
C、s=5
D、无输出结果
(  A  )
4、有以下程序
void sum(int *a)
{
a[0]=a[1];
}
main( )
{
int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=2;i>=0;i--) sum(&aa[i]);
printf("%d\n",aa[0]);
}
执行后的输出结果是________。
A、4
B、3
C、2
D、1
(  B  )
5、有以下程序
#include <stdlib.h>
struct node
{
int num;
struct node *next;
};
main( )
{
struct node *p,*q,*r;
int sum=0;
p=(struct node *)malloc(sizeof(struct node));
q=(struct node *)malloc(sizeof(struct node));
r=(struct node *)malloc(sizeof(struct node));
p->num=1;
q->num=2;
r->num=3;
p->next=q;
q->next=r;
r->next=null;
sum+=q->next->num;
sum+=p->num;
printf("%d\n",sum);
}
执行后的输出结果是________。
A、3
B、4
C、5
D、6
(  A  )
6、在c语言中,变量的隐含存储类别是________。
A、auto
B、static
C、extern
D、无存储类别
(  D  )
7、设有语句:"int a=1,b=2,*p1=&a,*p2=&b; ",则使指针p1指向变量b的赋值语句是______。
A、p1=*p2
B、*p1=p2
C、p1=p2
D、*p1=*p2
(  B  )
8、二维数组a的每个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。若a按行先存储,元素a[8,5]的起始地址与当a按列先存储时的元素( )的起始地址相同。设每个字符占一个字节。
A、A[8,5]
B、A[3,10]
C、A [5,8]
D、A[0,9]
(  D  )
9、表达式x+1>x是________。
A、算术表达式
B、非法表达式
C、字符串表达式
D、关系表达式
(  A  )
10、下列是用户自定义标识符的是________。
A、_w1
B、3_xy
C、int
D、LINE-3
(  B  )
11、设矩阵a是一个n×n对称矩阵.即a[i,j]=a[i,j],为了节省存储空间,将其下三角部分按行序为主序存放在一维数b[1...n(n+1)/2]中,对任一下三角元素aij(i≥j),在一维数组b的下标位置k的值是______。
A、(i+(i-1))/2+j-1
B、i(i-1)/2+j
C、i(i+1)/2+j-1
D、i(i+1)/2+j
(  C  )
12、有以下程序
main()
{
int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
程序运行后的输出结果是______。
A、2,3,3
B、2,3,2
C、2,3,1
D、2,2,1
(  A  )
13、以下程序的运行结果是
#include"stdio.h"
main()
{
struct date {
int year, month, day ;
} today;
printf("%d\n",sizeof(struct date));
}
A、6
B、8
C、10
D、12
(  C  )
14、结构化程序设计主要强调程序的()
A、效率
B、速度
C、可读性
D、大小
(  D  )
15、请阅读程序:
#include<math.h>
#include<stdio.h>
main()
{
float a,b,c;
scanf("%f%f",&a,&b);
c=a/b;
while(1) {
if(fabs(c)>1.6) {
a=b;
b=c;
c=a/b;
}
else break;
}
printf("%f\n",b);
}
若运行时从键盘上输入3.6 2.4<回车>,则输出结果是______。
A、1.500000
B、1.600000
C、2.000000
D、2.400000
(  C  )
16、下列程序的运行结果是______。
main()
{
int a[6],i;
for(i=2;i<6;i++)
{
a[i]=4*(i-2*(i>3))%5;
printf("%2d",a[i]);
}
}
A、2 3 2 3
B、1 2 1 2
C、3 2 3 2
D、2 2 2 2
(  A  )
17、有定义语句:int x,y; 若要通过scanf("%d,%d",&x,&y); 语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是______。
A、11 12↙
B、11,12↙
C、11, 12↙
D、11,↙12↙
(  B  )
18、能正确表示a≥10或a≤0的关系表达式是________。
A、a>=10 or a<=0
B、a>=10 || a<=0
C、a>=10 | a<=0
D、a>=10 && a<=0
(  B  )
19、有以下程序
main( )
{
int c=5,x;
scanf("%d",&x);
switch(x+1)
{
case 6: c++;
case 8: ++c;
break;
default:c+=3;
}
printf("%d",c);
}
程序运行时,从键盘输入: 5<回车>,程序执行后的输出结果是________。
A、6
B、7
C、8
D、语法错
(  B  )
20、若有定义语句:double x[5]= {1.0,2.0,3.0,4.0,5.0 }, *p=x;
则错误引用x数组元素的是______。
A、*p
B、x[5]
C、*(p+1)
D、*x

二、判断题 (共10题,每题2分,共计20分)

(   T  )
1、c语言的标识符由字母、数字和下划线组成,其中第一个字符必须是字母或下划线。 
(   F  )
2、在switch语句中,每一个的case常量表达式的值可以相同。 
(   T  )
3、在c语言中,可以将主调函数放在被调函数的后面,省略函数的声明。 
(   T  )
4、编译后的函数其代码存储在连成一片的内存单元中,这些代码的第一个代码所在的内存地址,称为函数的入口地址,而函数名就代表了函数的入口地址。 
(   T  )
5、符号"a"和’a’的区别是 "a"是字符串常量,占2个字节; 而’a’是字符常量,占1个字节。( ) 
(   T  )
6、在一个函数中调用另一个被调函数时,如果在所有函数定义之前,已经对函数类型进行了说明,则在各个主调函数中不再进行说明。 
(   T  )
7、数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。 
(   F  )
8、以“a”方式打开一个文件时,文件指针指向文件首。 
(   F  )
9、for循环的三个表达式可以任意省略,while,do-while也是如此。 
(   F  )
10、有指针变量p和数组a,指针变量和数组都可以实现本身的值的改变,如p++和a++ 

三、填空题 (共5题,每题4分,共计20分)

1、在c语言中,在调用一个函数的过程中又出现__________或间接地调用该函数本身,这一现象称为函数的递归调用。
2、在c语言数据类型中,浮点型类型包括单精度类型和( )精度类型。
3、#include <stdio.h>
void main()
{
int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for (i=1;i<3;i++) for (j=0;j<i;j++) s+=a[i][j];
printf("%d\n",s);
}
4、循环语句for(i=0;i<3;i++) printf("*");
表达式i=0 执行【1】________次,表达式i++执行【2】________次。
5、在C语言中,表示静态存储类别的关键字______。

四、程序分析题 (共4题,每题5分,共计20分)

1、有以下程序
#include < stdio.h >
main()
{
int a=1,b=2,c=3,d=0;
if (a==1) if (b!=2) if(c!=3) d=1;
else d=2;
else if(c!=3) d=3;
else d=4;
else d=5;
printf("%d\n",d);
}
程序运行后的输出结果是: ________。
2、下面程序段的运行结果是________。for(a=1,i=-1;-1<=i<1;i++)
{
a++;
printf("%d,",a);
}
printf("%2d",i);
3、以下程序的输出结果是 ________ 。
main()
{
int x=0;
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{
if(k<=n) sub(a,n/2,2*k);
*a+=k;
}
4、程序运行结果是________。
void swap(int a[2])
{
int t;
t=a[0];
a[0]=a[1];
a[1]=t;
}
void main()
{
int x[2]={5,8};
swap(x);
printf("x[0]=%d,x[1]=%d\n",x[0],x[1]);
}

五、编程题 (共3题,每题0分,共计50分)

1、建立一个链表每个结点包括学号、姓名、性别、年龄、地址。输入一个学号打印该学号的学生的所有信息。如无此学号,则输出“没有找到",使用结构体实现
2、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
3、任意输入两行字符串,把第二行字符串连接到第一行字符串末尾(不用strcat函数)。