哈尔滨工业大学C语言 考试题.docx
《哈尔滨工业大学C语言 考试题.docx》由会员分享,可在线阅读,更多相关《哈尔滨工业大学C语言 考试题.docx(79页珍藏版)》请在冰豆网上搜索。
哈尔滨工业大学C语言考试题
哈工大2003年春季学期C语言考试题
说明:
请将答案写在答题纸的相应题号后面!
!
!
!
!
一、填空题:
(24分每空1.5分)
1.已知:
int*p,a;则语句p=&a;中的运算符&的含义是
(1)。
2.凡在函数体内没有明显存储类别说明的变量是
(2)。
3.已知:
struct
{intk;
charc;
floata;}test;则sizeof(test)的值是(3)。
4.程序填空:
(1)下面的程序是main函数利用函数abcd来交换main中的两个变量的值。
#include
main()
{floatx=10,y=20;
abcd(4);
printf(“%f,%f”,x,y);
}
abcd(x,y)
(5);
{floattemp;
temp=(6);
(7);
(8);
}
(2)下面的程序是使用冒泡法对输入的10个数据从小到大排序。
排好序的10个数分两行输出。
#include
main()
{(9);
intj,k;
printf(“input10numbersplease\n”);
for(j=0;(10);j++)
scanf(“%f”,&a[j]);
printf(“\n”);
for(j=0;(11);j++)
for(k=0;(12);k++)
if(13)
{x=a[k];
(14);
a[k+1]=x;
}
printf(“Thesorted10numbers:
\n”);
for(j=0;(15);j++)
{if(16)
printf(“\n”);
printf(“%f\t”,a[j]);
}
printf(“\n”);
}
二、单项选择题:
(20分每题2分)
1.C语言中基本数据类型包括()。
A.整型、实型、逻辑型
B.整型、实型、字符型
C.整型、字符型、逻辑型
D.整型、实型、逻辑型、实型
2.已知inti,a;执行语句”i=(a=2*3,a*5),a+6;”后,变量a的值是()。
A.6B.12C.30D.36
3.C语言中规定函数的返回值的类型是由()。
A.return语句中的表达式类型所决定
B.调用该函数时的主调用函数类型所决定
C.调用该函数时系统临时决定
D.在定义该函数时所指定的函数类型所决定
4.不能进行++和--运算的数据类型是()。
A.指针B.doubleC.intD.long
5.为了判断两个字符串s1和s2是否相等,应当使用()。
A.if(s1==s2)B.if(s1=s2)
C.if(strcpy(s1,s2))Dif(strcmp(s1,s2))
6.若有以下说明和语句:
structstu
{intno;
char*name;
}student,*p=&student;
则以下引用方法不正确的是()。
A.student.noB.(*p).no
C.p->noD.student->no
7.以下不是死循环的语句为()。
A.for(;;x+=k);
B.while
(1){x++};
C.for(k=10;;k--)sum+=k;
D.for(;(c=getchar())!
=’\n’;)printf(“%c”,c);
8.以下错误的描述是()。
A.不同的函数中可以使用相同的变量名
B.形式参数是局部变量
C.一个函数内部定义的变量只能在本函数范围内有效D.在一个函数内部的复合语句中定义的变量可以在本函数范围内有效
9.若用数组名作为函数调用时实参,则实际上传递给形参的是()。
A.数组首地址B.数组的第一个元素值
C.数组中全部元素的值D.数组元素的个数
10.已知inta,*p=&a;则为了得到变量a的值,下列错误的表达式是()。
A.*&pB.*pC.p[0]D.*&a
三、判断下列问题描述及语句正确与否,正确的打“√”。
(16分每题2分)
1.C的关键字都是小写的。
2.一个复合语句是作为一个语句处理的且在逻辑上相互关联的一组语句。
3.#definePI=3.14159
4.局部变量在进入代码块时生成,退出代码块时消失。
5.inta=123456;
6.函数可以嵌套定义,也可嵌套调用。
7.switch与if不同,switch只能测试是否相等,而if中还能测试关系和逻辑表达式。
8.break和continue语句都可用于选择结构和循环结构中。
四、读程序,写出运行结果:
(20分每题5分)
1.main()
{inta=5,b=4,x,y;
x=a++*a++*a++;
printf(“a=%d,x=%d\n”,a,x);
y=--b*--b*--b;
printf(“b=%d,y=%d\n”,b,y);
}
2.#include
main()
{structs1
{charc[4],*s;}s1={“abc”,”def”};
structs2
{char*cp;
structs1ss1;}s2={“ghi”,{”jkl”,”mno”}};
printf(“%c%c\n”,s1.c[0],*s1.s);
printf(“%s%s\n”,s1.c,s1.s);
printf(“%s%s\n”,s2.cp,s2.ss1.s);
printf(“%s%s\n”,++s2.cp,++s2.ss1.s);
}
3.#include
func(intb[])
{intj;
for(j=0;j<4;j++)
b[j]=j;
}
main()
{inta[4],k;
func(a);
for(k=0;k<4;k++)
printf(“%d\n”,a[k]);
}
4.voidfun()
{staticinta=5;
a++;
printf(“a=%d\n”,a);
}
main()
{
intm;
for(m=0;m<=1;m++)
fun();
}
五、编程(20分)
1.有一个34的矩阵,找出最大值及该值所在位置。
(10分)
2.写一个函数,计算x的n次方。
(10分)
哈工大2002/2003学年秋季学期C语言试题
一、选择题:
(20分,每题2分)
1.以下不正确的C语言标识符是()。
A.ABCB.abcC.a_bcD.ab.c
2.C程序是由 构成的。
A.主程序与子程序
B.主函数与若干子函数
C.一个主函数与一个其它函数
D.主函数与子函数
3.以下说法中正确的是:
。
A.在C语言中,实参与其对应的形参各占独立的存储单元;
B.在C语言中,实参与其对应的形参共占同一个存储单元;
C.在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元;
D.在C语言中,形参是虚拟的,不占存储单元。
4.设n=3;则n++的结果是()。
A.2B.3C.4D.5
5.设整型变量n=10,i=4,则赋值运算n%=i+1执行后,n的值是()。
A.0B.1C.2D.3
6.凡是函数中未指定存储类别的局部变量其隐含的存储类别是()。
A.自动(auto)B.静态(static)C.外部(extern)D.寄存器(register)
7.在while(x)语句中的x与下面条件表达式等价的是:
。
A.x==0B.x==1C.x!
=1D.x!
=0
8.若有以下说明和语句:
structworker
{
intno;
char*name;
}work,*p=&work;
则以下引用方法不正确的是()。
A.work.noB.(*p).noC.p->noD.work->no
9.以下对二维数组进行正确初始化的是()。
E.inta[2][3]={{1,2},{3,4},{5,6}};
F.inta[][3]={1,2,3,4,5,6};
G.inta[2][]={1,2,3,4,5,6};
H.inta[2][]={{1,2},{3,4}};
10.二维数组a有m列,则在a[i][j]之前的元素个数为:
。
A)j*m+i
B)i*m+j
C)i*m+j-1
D)i*m+j+1
二、给出下列程序的运行结果:
(20分,前四题每题3分,后两题每题4分)
1.#include
main()
{
inti=16,j,x=6;
j=i+++1;
x*=i=j;
printf(“%d,%d\n”,j,x);
}
运行结果是:
2.#include
#include
main()
{
inta=1,b=4,c=2;
floatx=10.5,y=4.0,z;
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
printf(“%f\n”,z);
}
运行结果是:
3.#include
main()
{
inta,b,c,d;
a=c=0;
b=1;
d=20;
if(a)d=d-10;
elseif(!
b)
if(!
c)d=25;
elsed=15;
printf(“d=%d\n”,d);
}
运行结果:
5.main()
{
inti=10;
switch(i){
case9:
i+=1;
case10:
i+=1;
case11:
i+=1;
default:
i+=1;
}
printf(“%d”,i);
}
运行结果:
5.#include
main()
{
inta[]={1,2,3,4},i,j,s=0;
j=1;
for(i=3;i>=0;i--)
{
s=s+a[i]*j;
j=j*10;
}
printf("s=%d\n",s);
}
运行结果:
6.func(intx)
{x=20;}
main()
{
intx=10;
func(x);
printf(“%d”,x);
}
运行结果:
三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。
(20分,每空2分)
1.已知能被4整除而不能被100整除的或者能被400整除的年份是润年,则判断某一年是否是润年的程序如下:
main()
{
intyear,leap;
scanf(“%d”,&year);
if()
leap=1;
elseleap=0;
if()printf(“是润年”);
elseprintf(“不是润年”);
}
2.将100至200间不能被3整除的数输出:
main()
{
intn;
for(n=100;n<=200;n++)
{
if(n%3==0);
printf(“%d”,n);
}
}
3.判断m是否是素数
#include
main()
{
intm,i,k;
scanf(“%d”,&m);k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0);
if(i>=k+1)printf(“%disaprimenumber\n”,m);
elseprintf(“%disnotaprimenumber\n”,m);
}
4.给定一3*4的矩阵,求出其中值最大的元素的值,及所在的行列号。
main()
{
inti,j,row=0,colum=0,max;
staticinta[3][4]={{1,2,3,4}{9,8,7,6}{10,-10,-4,4}};
;
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{
max=a[i][j];
;
;
}
printf(“max=%d,row=%d,colum=%d\n”,max,row,colum);
}
6.下面函数的功能是将两个字符串s和t连接起来。
char*conj(char*s,char*t)
{
char*p=s;
while(*s);
while(*t)
{
*s=;
s++;
t++;
}
*s=’\0’;
;
}
四、编程(40分)
1.计算1-1/2+1/3-1/4+…+1/99-1/100+…,直到最后一项的绝对值小于10-4为止。
(13分)
2.输入一行字符,分别统计求出其中英文字母、空格、数字和其他字符的个数并输出结果。
(13分)
3.任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果。
(14分)
哈工大2003年秋季学期C语言程序设计试题
注意:
请将答案写在答题纸上,否则无效!
!
!
一、判断题:
(12分每题2分)
1、C语言规定:
在一个源程序中,main函数的位置必须在最开始。
2、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是8。
3、凡是函数中未指定存储类别的局部变量,其隐含的存储类别为静态存储。
4、C语言中规定函数的返回值的类型是由return语句中的表达式类型所决定。
5、在C语言中对文件操作必须先关闭当前文件,然后再打开一个新文件。
6、C语言程序的基本单位是语句。
二、选择题:
(20分每题2分)
1、假设已定义chara[10]和char*p=a,下面的赋值语句中,正确的是:
A)a[10]=”TurboC”;B)a=”TurboC”;
C)*p=”TurboC”;D)p=”TurboC”;
2、下面关于运算符优先顺序的描述中正确的是:
A)关系运算符<算术运算符<赋值运算符<逻辑与运算符
B)逻辑运算符<关系运算符<算术运算符<赋值运算符
C)赋值运算符<逻辑与运算符<关系运算符<算术运算符
D)算术运算符<关系运算符<赋值运算符<逻辑与运算符
3、以下正确的描述是。
A)continue语句的作用是结束整个循环的执行
B)只能在循环体内和switch语句体内使用break语句
C)在循环体内使用break语句或continue语句的作用相同
D)从多层循环嵌套中退出时,只能使用goto语句
4、用8位无符号二进制数能表示的最大十进制数为
A)127B)128C)255D)256
5、下列叙述中正确的是:
A)C语言中既有逻辑类型也有集合类型
B)C语言中没有逻辑类型但有集合类型
C)C语言中有逻辑类型但没有集合类型
D)C语言中既没有逻辑类型也没有集合类型
6、以下对C语言函数的有关描述中,正确的是:
A)调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B)函数既可以嵌套定义又可以递归调用
C)函数必须有返回值,否则不能使用函数
D)程序中有调用关系的所有函数必须放在同一个源程序文件中
7、在C语言中,不正确的int类型的常数是:
A)32768B)0C)037D)0xaf
8、以下叙述中不正确的是:
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量在本函数范围内有效
9、以下说法中正确的是:
A)#define和printf都是C语句
B)#define是C语句,而printf不是
C)printf是C语句,但#define不是
D)#define和printf都不是C语句
10、若有以下定义和语句:
doubler=99,*p=&r;*p=r;则以下正确的叙述是:
A)以下两处的*p含义相同,都说明给指针变量p赋值
B)在“doubler=99,*p=&r;”中,把r的地址赋值给了p所指的存储单元
C)语句“*p=r;”把变量r的地址值赋给指针变量p
D)语句“*p=r;”取变量r的值放回r中
三、填空题:
(24分每空2分)
1、下面程序的功能是:
输入一行字符,统计其中有多少个单词,单词之间
用空格分开。
请填空完成。
#include
main()
{charstr[81];
intI,(【1】);
charc;
gats(str);
for(I=0;(【2】)!
=’\0’;I++)
if(c==’’)word=0;
elseif(【3】)
{word=1;
(【4】)}
printf(“Thereare%dwordinline.\n”,num);
}
2、下面程序的功能是:
用选择排序法对数组中10个数据按由小到大排序。
请填空完成。
voidsort(inta[],intn)
{(【5】)
for(I=0;I{(【6】)for(j=I+1;jif(a[j]if((【7】)){t=a[k];a[k]=a[I];a[I]=t;}
}
}
main()
{intb[10],I;
printf(“enterthearray\n”);
for(I=0;I<10;I++)
scanf(“%d”.&b[I]);
(【8】)
printf(“thesortedarray:
\n”);
for(I=0;I<10;I++)
printf(“%d“,b[I]);
printf(“\n”);
}
3、判断m是否是素数
#include
main()
{
intm,i,k;
scanf(“%d”,&m);(【9】)
for(i=2;i<=k;i++)
if(m%i==0)(【10】);
if(i>=k+1)printf(“%disaprimenumber\n”,m);
elseprintf(“%disnotaprimenumber\n”,m);
}
4、假设当年产值为100,工业产值的增长率分别为6%、8%、10%、12%时,
求工业产值分别经过多少年可实现翻番。
请填空完成。
main()
{inty[4],i;
floats[4]={100,100,100,100},c[4]={.06,.08,.10,.12};
clrscr();
for(i=0;i<4;i++)
{y[i]=0;
while(【11】)
{s[i]=s[i]*(1+c[i]);
(【12】)}
printf("\ny=%d\ts=%.2f\tc=%.2f",y[i],s[i],c[i]);
}
}
四、读程序,写出程序运行结果。
(24分每题4分)
1、main()
{intx=10,y=10,I;
for(I=0;I>8;y=++I)
printf(“%d%d”,x--,y);
}
2、main()
{intm=37,n=13;
while(m!
=n)
{while(m>n)
m=m-n;
while(n>m)
n-=m;
}
printf(“m=%d\n”,m);
}
3、main()
{intx=9;
for(;x>0;x--)
{if(x%3==0){printf(“%d”,--x);
continue;}
}
}
4、main()
{inta=7,b=2;
floatx=2.5,y=4.7,z;
z=x+a%3*(int)(x+y)%2/4;
printf(“%f\n”,z);
z=(a+b)/2+(int)x%(int)y;
printf(“%f”,z);
}
5、main()
{intx[]={0,1,2,3,4,5,6,7,8,9};
ints,I,*p;
s=0;
p=&x[0];
for(I=1;I<10;I+=2)
s+=*(p+I);
printf(“sum=%d”,s);
}
6、main()
{intk=4,m=1,p;
p=func(k,m);
printf("%d",p);
p=func(k,m);
printf("%d",p);
}
func(inta,intb)
{staticintm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
五、编程题:
(20分每题10分)
1、利用指针完成。
输入两个整数,按先大后小的顺序输出。
2、编程完成两个字符串的连接。
(不使用strcat()函数)。
哈工大2004年秋季学期C语言考试题
说明:
考试成绩分为三部分:
实验成绩占10分,卷面笔试成绩占45分,机考成绩占45分,满分为100分。
本试卷为卷面笔试部分,卷面满分为45分。
一、填空题(6分,每题2分)
1.C语言中基本数据类型包括。
2.已知能被4整除而不能被100整除的或者能被400整除的年份是闰年,则判断某一年year是否是闰年的表达式为:
。
3.设有下列登记表,采用最佳方式对它进行类型定义。
姓名
性别
出生年月
家庭收入状况
家庭收入状况标记
年
月
日
低收入
中等收入
高收入
姓名用name表示,性别用sex表示,出生年月用birthDay表示,年用year表示,月用month表示,日用date表示,家庭收入状况用salary表示,低收入用low表示,中等收入用middle表示,高收入用high表示,家庭收入状况标记用mark表示。
二、判断下列问题描述正确与否,正确的打“√”,错误的打“×”。
(3分,每题1分)
1.#definePI=3.14159;不是C语句。
()
2.在C语言中,可以用typedef定义一种新的类型。
( )
3.共用体所占的内存空间大小取决于占空间最多的那个成员变量。
()
三、选择题:
(10分,每题1分)
1.以下不正确的C语言标识符是()。
A.AB1B.a2_bC._ab