哈尔滨工业大学C语言期末试卷(2007秋季人文学院笔试B卷)
下载地址:http://115.com/file/anwjjmgj#2007秋季人文学院笔试B卷.doc
A)表达式与语句 B)若干文件 C)函数 D)main函数
2.有关以下函数的哪些说法是正确的________。
int add( int x;int y)
{
z=x+y;
return z;
}
A)此函数能单独运行
B)此函数存在语法错误
C)此函数通过main函数能调用
D)此函数没有语法错误
3.下列数据中,为字符的是________。
A)'AB' B)"A" C)How D)'A'
4.下列表达式没有错误的是________。
int x,*p;
A)5.0%2 B)x+1=5 C)&p D)&(x+1)
5.任何复杂的程序,都是由________构成的。
A)分支结构、顺序结构、过程结构 B)循环结构、分支结构、过程结构
C)顺序结构、循环结构、分支结构 D)循环结构、分支结构
6.以下选项中,合法的C语言关键字是________。
A)integer B)char C)short D)long
7.若有以下变量说明和数据的输入方式,则正确的输入语句为________。
变量说明:float x1,x2;
数据的输入方式:4.52<回车>
3.5<回车>
A)scanf(“%f,%f”,&x1,&x2); B)scanf(“%f%f”,&x1,&x2);
C)scanf(“%3.2f,%2.1f”,&x1,&x2); D)scanf(“%3.2f%2.1f”,&x1,&x2);
8.已知:int a,*p=&a; 则为了得到变量a的值,下列错误的表达式为________。
A)p[0] B)*p C)&*a D)*&a
9.若有定义:int b[5];则以下对b 数组元素的正确引用是________。
A)*&b[5] B)b+2
C)*(*(b+2)) D)*(b+2)
10.设有int x,y; 以下语句判断x和y是否相等,正确的说法是该语句________。
if (x=y) printf(" x is equal to y.");
A)语法错 B)不能判断x和y是否相等
C)编译出错 D)能判断x和y是否相等
11.以下有关switch语句的正确说法是________。
A)break语句是语句中必须的一部分
B)在switch 语句中可以根据需要使用或不使用break语句
C)break语句在switch 语句中不可以使用
D)在switch 语句中的每一个case都要用break语句
12.若用数组名作为函数调用时的参数,则实际上传递给形参的是________。
A)数组元素的个数 B)数组的第一个元素值
C)数组中全部元素的植 D)数组首地址
13.以下叙述正确的是________。
A)函数的定义和函数的调用均不可以嵌套
B)函数的定义和函数的调用均可以嵌套
C)函数的定义可以嵌套,但函数的调用均不可以嵌套
D)函数的定义不可以嵌套,但函数的调用均可以嵌套
14.凡是在函数中未指定存储类别的局部变量,其隐含的存储类别是________。
A)静态(static) B)外部(extern)
C)自动(auto) D)寄存器(register)
15.下列对字符串的定义中,错误的是 。
A)char str[5]= "abcde"; B)char str[ ]= "abcde";
C)char *str ="abcde"; D)char str[ ]={ 'a', 'b', 'c', 'd', 'e', '\0'};
#include <stdio.h>
main()
{
int a=10;
{
int a=15;
printf(“a.1=%d,”,a);
}
printf(“a.2=%d\n”,a);
}
运行结果是:
2.阅读以下程序,写出程序的功能。
#include<stdio.h>
main()
{
int a[10]={2,4,0,-5,10,6,-8,9,6,7};
int i,s=0,count=0;
for(i=0; i<10; i++)
if(a[i]>0)
{ s+=a[i];count++;}
else
continue;
printf ("s= %d , count=%d\n", s ,count);
}
3.阅读以下函数,写出此函数的功能。
void fun(char A[ ],int n)
{
char tmp;
int k;
for (k=0; k<n/2; k++)
{
tmp=A[k]; A[k]=A[n-k-1]; A[n-k-1]=tmp;
}
}
4.阅读以下程序,写出此程序的功能。
#include<stdio.h>
main()
{
char ch;
int c=0,s=0,n=0,other=0;
while ((ch=getchar())!='\n')
{
if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) c++;
else if (ch==' ') s++;
else if (ch>='0'&&ch<='9') n++;
else other++;
}
printf("Char:%d\nSpace:%d\nNumber:%d\nOther:%d\n",c,s,n,other);
}
5.阅读下面的程序,写出它的运行结果。
#include<stdio.h>
int func(int m)
{
int s;
if (m= =1)
s=1;
else
s=m+4;
return(s);
}
main()
{
int y;
y=func(4);
printf( "%d",y);
}
6.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);
}
执行结果是:
#include<stdio.h>
main()
{
int x,a,b,c;
do{
printf("输入一个1000以下的整数:");
scanf("%d",&x);
printf("\n");
}while( );
a=x/100;
b=(x-a*100)/10;
c= ;
printf("%d的个位数是%d,十位数是%d,百位数是%d\n",x,c,b,a);
}
2.以下程序完成对键盘输入的正整数求最大值和最小值,输入负数时循环结束。请填写缺少的语句。
#include<stdio.h>
main()
{
int i,j,n,max,min,a[100];
for(i=1; i<=100; i++)
{
scanf("%d,",&a[i]);
if(a[i]<0) ;
}
n=i-1;
min=max=a[1];
for(j=2; j<=n; j++)
{
if( ) max=a[j];
if( ) min=a[j];
}
printf("n=%d\tmax=%d\tmin=%d\n",n,max,min);
}
3.以下函数的功能是删除字符串s中的数字字符,请填写缺少的语句。
void delnum(char s[])
{
int i,j;
for( i=0,j=0;s[i]!='\0';i++)
if ( s[i]<'0' s[i]>'9')
{
s[j]=s[i];
;
}
s[j]= ;
}
4.以下程序用来求数组全部元素的和,请填写缺少的语句。
#include<stdio.h>
main( )
{
int a[ ]={0,1,2,3,4,5,6,7,8,9};
int s=0 , i, *p;
p= ;
for (i=0; i<10; i++) ;
printf("sum=%d", s);
}
2.编写程序,输出100以内的所有素数(即只能被1和自身整除的数)。
3.从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。
4.编写程序输出下列图形:
*
***
*****
*******
一、单项选择题(每题2分,共30分)
1.组成C程序的基本单位是________。A)表达式与语句 B)若干文件 C)函数 D)main函数
2.有关以下函数的哪些说法是正确的________。
int add( int x;int y)
{
z=x+y;
return z;
}
A)此函数能单独运行
B)此函数存在语法错误
C)此函数通过main函数能调用
D)此函数没有语法错误
3.下列数据中,为字符的是________。
A)'AB' B)"A" C)How D)'A'
4.下列表达式没有错误的是________。
int x,*p;
A)5.0%2 B)x+1=5 C)&p D)&(x+1)
5.任何复杂的程序,都是由________构成的。
A)分支结构、顺序结构、过程结构 B)循环结构、分支结构、过程结构
C)顺序结构、循环结构、分支结构 D)循环结构、分支结构
6.以下选项中,合法的C语言关键字是________。
A)integer B)char C)short D)long
7.若有以下变量说明和数据的输入方式,则正确的输入语句为________。
变量说明:float x1,x2;
数据的输入方式:4.52<回车>
3.5<回车>
A)scanf(“%f,%f”,&x1,&x2); B)scanf(“%f%f”,&x1,&x2);
C)scanf(“%3.2f,%2.1f”,&x1,&x2); D)scanf(“%3.2f%2.1f”,&x1,&x2);
8.已知:int a,*p=&a; 则为了得到变量a的值,下列错误的表达式为________。
A)p[0] B)*p C)&*a D)*&a
9.若有定义:int b[5];则以下对b 数组元素的正确引用是________。
A)*&b[5] B)b+2
C)*(*(b+2)) D)*(b+2)
10.设有int x,y; 以下语句判断x和y是否相等,正确的说法是该语句________。
if (x=y) printf(" x is equal to y.");
A)语法错 B)不能判断x和y是否相等
C)编译出错 D)能判断x和y是否相等
11.以下有关switch语句的正确说法是________。
A)break语句是语句中必须的一部分
B)在switch 语句中可以根据需要使用或不使用break语句
C)break语句在switch 语句中不可以使用
D)在switch 语句中的每一个case都要用break语句
12.若用数组名作为函数调用时的参数,则实际上传递给形参的是________。
A)数组元素的个数 B)数组的第一个元素值
C)数组中全部元素的植 D)数组首地址
13.以下叙述正确的是________。
A)函数的定义和函数的调用均不可以嵌套
B)函数的定义和函数的调用均可以嵌套
C)函数的定义可以嵌套,但函数的调用均不可以嵌套
D)函数的定义不可以嵌套,但函数的调用均可以嵌套
14.凡是在函数中未指定存储类别的局部变量,其隐含的存储类别是________。
A)静态(static) B)外部(extern)
C)自动(auto) D)寄存器(register)
15.下列对字符串的定义中,错误的是 。
A)char str[5]= "abcde"; B)char str[ ]= "abcde";
C)char *str ="abcde"; D)char str[ ]={ 'a', 'b', 'c', 'd', 'e', '\0'};
二、程序阅读题(每题2分,共12分)
1.阅读以下程序,写出程序的功能。#include <stdio.h>
main()
{
int a=10;
{
int a=15;
printf(“a.1=%d,”,a);
}
printf(“a.2=%d\n”,a);
}
运行结果是:
2.阅读以下程序,写出程序的功能。
#include<stdio.h>
main()
{
int a[10]={2,4,0,-5,10,6,-8,9,6,7};
int i,s=0,count=0;
for(i=0; i<10; i++)
if(a[i]>0)
{ s+=a[i];count++;}
else
continue;
printf ("s= %d , count=%d\n", s ,count);
}
3.阅读以下函数,写出此函数的功能。
void fun(char A[ ],int n)
{
char tmp;
int k;
for (k=0; k<n/2; k++)
{
tmp=A[k]; A[k]=A[n-k-1]; A[n-k-1]=tmp;
}
}
4.阅读以下程序,写出此程序的功能。
#include<stdio.h>
main()
{
char ch;
int c=0,s=0,n=0,other=0;
while ((ch=getchar())!='\n')
{
if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) c++;
else if (ch==' ') s++;
else if (ch>='0'&&ch<='9') n++;
else other++;
}
printf("Char:%d\nSpace:%d\nNumber:%d\nOther:%d\n",c,s,n,other);
}
5.阅读下面的程序,写出它的运行结果。
#include<stdio.h>
int func(int m)
{
int s;
if (m= =1)
s=1;
else
s=m+4;
return(s);
}
main()
{
int y;
y=func(4);
printf( "%d",y);
}
6.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);
}
执行结果是:
三、程序填空题(每空2分,共20分)
1.以下程序对输入的1000以下的整数,求出其相应的个位数、十位数和百位数。#include<stdio.h>
main()
{
int x,a,b,c;
do{
printf("输入一个1000以下的整数:");
scanf("%d",&x);
printf("\n");
}while( );
a=x/100;
b=(x-a*100)/10;
c= ;
printf("%d的个位数是%d,十位数是%d,百位数是%d\n",x,c,b,a);
}
2.以下程序完成对键盘输入的正整数求最大值和最小值,输入负数时循环结束。请填写缺少的语句。
#include<stdio.h>
main()
{
int i,j,n,max,min,a[100];
for(i=1; i<=100; i++)
{
scanf("%d,",&a[i]);
if(a[i]<0) ;
}
n=i-1;
min=max=a[1];
for(j=2; j<=n; j++)
{
if( ) max=a[j];
if( ) min=a[j];
}
printf("n=%d\tmax=%d\tmin=%d\n",n,max,min);
}
3.以下函数的功能是删除字符串s中的数字字符,请填写缺少的语句。
void delnum(char s[])
{
int i,j;
for( i=0,j=0;s[i]!='\0';i++)
if ( s[i]<'0' s[i]>'9')
{
s[j]=s[i];
;
}
s[j]= ;
}
4.以下程序用来求数组全部元素的和,请填写缺少的语句。
#include<stdio.h>
main( )
{
int a[ ]={0,1,2,3,4,5,6,7,8,9};
int s=0 , i, *p;
p= ;
for (i=0; i<10; i++) ;
printf("sum=%d", s);
}
四、编程题(共38分)
1.编写程序,计算s=1+3+5+7...+99。2.编写程序,输出100以内的所有素数(即只能被1和自身整除的数)。
3.从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。
4.编写程序输出下列图形:
*
***
*****
*******