哈尔滨工业大学C语言期末试卷(2007秋季人文学院笔试A卷)
下载地址:http://115.com/file/dpbiify8#2007秋季人文学院笔试A卷.doc
一、填空题(共20分,每空2分)
1.C语言中简单数据类型包括 、 、 。
2.C语言中用_______表示逻辑值“假”,用________表示逻辑值“真”。
3. char *p[10];这条语句的含义是:__ ___ _ _ 。
4.设有语句“int a=3;”,执行语句“printf(”%d”,-a++ );”后,输出结果 是 , 变量a的值是 。
5. 如果在程序中定义静态变量和全局变量时,未明确指明其初始值,那么它们可 以在程序编译阶段自动被初始化为 。
6. 在C语言中,可以用 定义一种新的数据类型。
二、选择题:(共16分,每题2分)
1.在C语言中,函数的隐含存储类别是( )。
A) auto B) static C) extern D) 无存储类别
2.若用数组名作为函数调用时的实参,则实际上传递给形参的是()。
A.数组的首地址 B. 数组的第一个元素值
C.数组中全部元素的值 D. 数组元素的个数
3.已知 struct sk
{
int a;
float b;
}data,*p;
若有p=&data,则对data中的成员a正确引用是( )
A. (*p).data B.(*p).a C.p->data.a D. p.data.a
4.在while(x)语句中的x与下面条件表达式等价的是: 。
A. x!=0 B. x==1 C. x!=1 D. x==0
5.二维数组a有m行n列,则在a[i][j]之前的元素个数为( )。
A. j*n+i B. i*n+j C. i*n+j-1 D. i*n+j+1
6.设有声明语句:int a=1,b=0;则执行以下语句后输出为: 。
switch (a)
{
case 1:
switch (b)
{
case 0: printf("**0**");
break;
case 1: printf("**1**");
break;
}
case 2: printf("**2**");
break;
}
A **0** B **0****2**
C **0****1****2** D 有语法错误
7.以下程序运行结果是( )
main()
{char s[]=”Address”;
printf(”%d\n”, strlen(s));
}
A) 7 B) 8
C) 9 D) 10
8.以下不正确的描述是()
A) 在函数外部定义的变量是全局变量
B) 在函数内部定义的变量是局部变量
C) 函数的形参是局部变量
D) 局部变量不能与全局变量同名
三、写出下列程序的运行结果。(15分,每题3分)
1.#include<stdio.h>
int Fun(int x)
{
static int y = 0;
y += x;
return y;
}
main()
{
int x = 10, y = 0, k;
for(k=0; k<2; k++)
{
y = Fun(x);
printf("y = %d\n", y);
}
}
运行结果是:
2.#include<stdio.h>
main ( )
{
char a[] = "programming" , b[] = "language" ;
char *p1, *p2 ;
int i;
p1 = a;
p2 = b;
for (i=0; i<7; i++)
{
if (*(p1+i) == *(p2+i))
printf("%c" ,*(p1+i)) ;
}
printf("\n");
}
运行结果是:
3. #include <stdio.h>
main()
{
int a=10;
{
int a=15;
printf(“a.1=%d,”,a);
}
printf(“a.2=%d\n”,a);
}
运行结果是:
4.#include <stdio.h>
main()
{
int i=0;
while(1)
{
printf(“*”);
i++;
if(i<3) break;
}
printf(“\n”);
}
运行结果是:
5.int runc(int a,int b)
{return(a+b);}
main()
{
int x=2,y=5,z=8,r;
r=runc(runc(x,y),z);
printf(“%d\n”,r);
}
执行结果是:
四、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(16分,每空2分)
1. 下面这个程序功能:读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。读入5个数据后,程序结束运行。
#include <stdio.h>
main()
{
int i, n;
for (i=1; i<=5; i++)
{
printf("Please enter n:");
scanf("%d", &n);
if (n <= 0) _____________;
printf("n = %d\n", n);
}
printf("Program is over!\n");
}
2. 韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。下面程序的主要功能是计算韩信至少有多少兵。
#include <stdio.h>
main()
{
int x = 1;
int find = 0;
for (x=1; ________; x++)
{
if (x%5==1 && x%6==5 && x%7==4 && x%11==10)
{
printf(" x = %d\n", x);
____________;
}
}
}
3.计算1+1/2+1/4+…+1/50的值,并显示出来。
main()
{
int i=2;
float sum=1.0;
while(i<= )
{ sum+=1/ ;
i+=2;
}
printf(“sum=%f\n”,sum);
}
4.Fibonacci数列中的头两个数是1和1,从第三个数开始,每个数等于前两个数之和。下述程序计算此数列的前20个数,且每行输出5个数,请填空。
#include <stdio.h>
main()
{
int f,f1=1,f2=1;
int i;
printf(“%6d,%6d”,f1,f2);
for (i=3;i<=20;i++)
{
f= ;
printf(“%6d”,f);
if( )
printf(“\n”);
f1=f2;
;
}
}
五、编程(33分,前3题各8分,第4小题9分)
1.编写函数实现两个整型变量值的交换。
2. 从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。
3.从键盘任意输入某班20个学生的成绩,输出最高分并统计出不及格人数。
4.利用函数求出两个正整数的最大公约数。
一、填空题(共20分,每空2分)
1.C语言中简单数据类型包括 、 、 。
2.C语言中用_______表示逻辑值“假”,用________表示逻辑值“真”。
3. char *p[10];这条语句的含义是:__ ___ _ _ 。
4.设有语句“int a=3;”,执行语句“printf(”%d”,-a++ );”后,输出结果 是 , 变量a的值是 。
5. 如果在程序中定义静态变量和全局变量时,未明确指明其初始值,那么它们可 以在程序编译阶段自动被初始化为 。
6. 在C语言中,可以用 定义一种新的数据类型。
二、选择题:(共16分,每题2分)
1.在C语言中,函数的隐含存储类别是( )。
A) auto B) static C) extern D) 无存储类别
2.若用数组名作为函数调用时的实参,则实际上传递给形参的是()。
A.数组的首地址 B. 数组的第一个元素值
C.数组中全部元素的值 D. 数组元素的个数
3.已知 struct sk
{
int a;
float b;
}data,*p;
若有p=&data,则对data中的成员a正确引用是( )
A. (*p).data B.(*p).a C.p->data.a D. p.data.a
4.在while(x)语句中的x与下面条件表达式等价的是: 。
A. x!=0 B. x==1 C. x!=1 D. x==0
5.二维数组a有m行n列,则在a[i][j]之前的元素个数为( )。
A. j*n+i B. i*n+j C. i*n+j-1 D. i*n+j+1
6.设有声明语句:int a=1,b=0;则执行以下语句后输出为: 。
switch (a)
{
case 1:
switch (b)
{
case 0: printf("**0**");
break;
case 1: printf("**1**");
break;
}
case 2: printf("**2**");
break;
}
A **0** B **0****2**
C **0****1****2** D 有语法错误
7.以下程序运行结果是( )
main()
{char s[]=”Address”;
printf(”%d\n”, strlen(s));
}
A) 7 B) 8
C) 9 D) 10
8.以下不正确的描述是()
A) 在函数外部定义的变量是全局变量
B) 在函数内部定义的变量是局部变量
C) 函数的形参是局部变量
D) 局部变量不能与全局变量同名
三、写出下列程序的运行结果。(15分,每题3分)
1.#include<stdio.h>
int Fun(int x)
{
static int y = 0;
y += x;
return y;
}
main()
{
int x = 10, y = 0, k;
for(k=0; k<2; k++)
{
y = Fun(x);
printf("y = %d\n", y);
}
}
运行结果是:
2.#include<stdio.h>
main ( )
{
char a[] = "programming" , b[] = "language" ;
char *p1, *p2 ;
int i;
p1 = a;
p2 = b;
for (i=0; i<7; i++)
{
if (*(p1+i) == *(p2+i))
printf("%c" ,*(p1+i)) ;
}
printf("\n");
}
运行结果是:
3. #include <stdio.h>
main()
{
int a=10;
{
int a=15;
printf(“a.1=%d,”,a);
}
printf(“a.2=%d\n”,a);
}
运行结果是:
4.#include <stdio.h>
main()
{
int i=0;
while(1)
{
printf(“*”);
i++;
if(i<3) break;
}
printf(“\n”);
}
运行结果是:
5.int runc(int a,int b)
{return(a+b);}
main()
{
int x=2,y=5,z=8,r;
r=runc(runc(x,y),z);
printf(“%d\n”,r);
}
执行结果是:
四、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(16分,每空2分)
1. 下面这个程序功能:读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。读入5个数据后,程序结束运行。
#include <stdio.h>
main()
{
int i, n;
for (i=1; i<=5; i++)
{
printf("Please enter n:");
scanf("%d", &n);
if (n <= 0) _____________;
printf("n = %d\n", n);
}
printf("Program is over!\n");
}
2. 韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。下面程序的主要功能是计算韩信至少有多少兵。
#include <stdio.h>
main()
{
int x = 1;
int find = 0;
for (x=1; ________; x++)
{
if (x%5==1 && x%6==5 && x%7==4 && x%11==10)
{
printf(" x = %d\n", x);
____________;
}
}
}
3.计算1+1/2+1/4+…+1/50的值,并显示出来。
main()
{
int i=2;
float sum=1.0;
while(i<= )
{ sum+=1/ ;
i+=2;
}
printf(“sum=%f\n”,sum);
}
4.Fibonacci数列中的头两个数是1和1,从第三个数开始,每个数等于前两个数之和。下述程序计算此数列的前20个数,且每行输出5个数,请填空。
#include <stdio.h>
main()
{
int f,f1=1,f2=1;
int i;
printf(“%6d,%6d”,f1,f2);
for (i=3;i<=20;i++)
{
f= ;
printf(“%6d”,f);
if( )
printf(“\n”);
f1=f2;
;
}
}
五、编程(33分,前3题各8分,第4小题9分)
1.编写函数实现两个整型变量值的交换。
2. 从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。
3.从键盘任意输入某班20个学生的成绩,输出最高分并统计出不及格人数。
4.利用函数求出两个正整数的最大公约数。