哈工大C语言03秋EMK.docx
《哈工大C语言03秋EMK.docx》由会员分享,可在线阅读,更多相关《哈工大C语言03秋EMK.docx(13页珍藏版)》请在冰豆网上搜索。
![哈工大C语言03秋EMK.docx](https://file1.bdocx.com/fileroot1/2023-5/27/d1c19950-2f75-4f5d-9c3c-59bf62dbd66e/d1c19950-2f75-4f5d-9c3c-59bf62dbd66e1.gif)
哈工大C语言03秋EMK
哈工大2003年秋季学期
班号
姓名
高级语言程序设计试题
题号
一
二
三
四
五
六
七
八
九
十
总分
分数
(说明:
卷面总分85,另有8分选做题。
平时成绩15分)
一、判断(5分)
(1)自动变量和外部变量都是局部变量。
()
(2)在函数调用过程中,不能通过改变形参的值而使实参的值也改变;但可以通过改变指针形参的值而使指针实参的值也改变。
()
(3)数组可以在定义时整体赋初值,但不能在赋值语句中整体赋值。
()
(4)对于printf()函数,通过字符数组名或者字符指针变量做参数可以输出一个字符串,而对一个数值型数组是不能用数组名做参数输出它的全部元素的。
()
(5)实参和形参(均为变量)各占独立的存储空间。
()
二、解释下列语句含义(10分)
(1)int*p();语句含义:
____________________________________________________
(2)int(*p)();语句含义:
__________________________________________________
(3)int(*p)[3];语句含义:
_________________________________________________
(4)int*p[4];语句含义:
___________________________________________________
(5)int**p;语句含义:
______________________________________________________
三、单选题(13分)
(1)下列哪种说法是正确的?
()
A.程序编译时的警告(warning)可以全不在乎
B.编译通过,程序就是没有问题的
C.程序在一台计算机运行无误,而在另一台计算机按同样步骤运行,却可能出错
D.程序发生编译错误(error),仍可以运行
(2)下列说法正确的是()
A.一个int类型的变量占两个字节
B.一个结构体变量占的字节数,是每个成员变量字节数的总和
C.任何类型的指针变量占的字节数,与其指向的类型所占字节数相等
D.一个long类型变量可能与一个int类型变量占用相同大小的内存
(3)下列关于程序调试的说法,错误的是()
A.可以一条语句一条语句地执行
B.调试过程中如果修改了源代码,不需要重新编译就能继续运行
C.可以随时查看变量值
D.可以跟踪进入自己编写的函数内部
(4)下面这些名词,没有“地址”的是:
()
A.变量B.函数C.宏D.指针
(5)在C语言中()
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义和函数的调用均不可以嵌套
D.函数的定义和函数的调用均可以嵌套
(6)阅读程序选择正确答案填空
程序功能:
检查给定字符串s是否满足下列两条件:
1、从字符串首字符起,在顺序检查s中的字符的过程中,遇到的右括号“)”的个数在任何时候均不超过所遇到的左括号“(”的个数;
2、字符串s中左括号“(”的个数与右括号“)”的个数相同。
若字符串s同时满足上述条件1和条件2,函数返回非0值,否则返回0值。
intcheck(
(1))()
{
intlp,rp;
lp=0;
rp=0;
while(
(2))()
{
if(*s=='(')
lp++;
elseif(*s==')')
{
rp++;
if((3))()
return0;
}
(4);()
}
return((lp!
=rp)?
0:
1);
}
(1)A.char*sB.chars[][]C.charsD.chars[]
(2)A.*sB.*s==0C.*s!
=0D.s
(3)A.rp>lpB.rp=lp
(4)A.s++B.(*s)++C.++(*s)D.++s
四、阅读程序(22分)
(1)下面程序运行会出错吗?
如果会,请改正。
(4分)
#include
main()
{
charbuffer[128];
intc;
intpos=0;
while((c=getchar())!
=EOF)
{
buffer[pos++]=c;
}
printf("%s",buffer);
}
(2)对下面这个程序谈谈你的看法。
(3分)
#include
main()
{
inti,j;
for(i=1,j=1;i!
=0;j++)
i++;
}
(3)给下面程序找错。
请标注在程序上,并给予恰当的文字说明。
(6分)
#include
main()
{
intsize=10,i;
floatf[size];
for(i=0;i<=size;i++)
scanf("%f",f[i]);
if(f[0]=f[10])
printf("您输入的第一个数和最后一个数相等\n");
}
(4)阅读程序,写出输出结果。
(4分)
#include
main()
{
inti,j,k,sum,temp;
sum=0;
temp=0;
for(i=1;i<=2;i++)
{
for(j=1;j<=3;j++)
{
for(k=1;k<=i;k++)
temp=temp+k;
sum=sum+temp;
}
}
printf("sum=%d",sum);
}
(5)阅读程序,写出输出结果。
(5分)
#include
main()
{
inta[20],*p[4];
inti,k=0;
for(i=0;i<20;i++)
a[i]=i;
for(i=0;i<4;i++)
p[i]=&a[i*(i+1)];
for(i=0;i<4;i++)
k+=*(p[i]+i);
printf("%d",k);
}
五、简答题(11分)
(1)请定义一个结构student,其成员包括姓名、学号、性别、出生年月日、籍贯、身高(单位:
米)、体重(单位:
公斤)。
(6分)
(2)请谈谈你对高级语言程序设计的看法。
(5分)
(注:
后面两道大题答在试卷的附页上)
六、程序设计。
请从下面5道题中任选3题,按题意要求编写程序。
(24分)
(1)编写一个函数intIsPrime(intdata),判断data是否为素数(除了1和其本身以外,不能被其他正整数整除的正整数),若是返回-1,否则返回0。
(2)一个函数voidfunc(void),现在想统计这个函数一共被调用了多少次,并在函数被调用的时候打印此数值。
请用两种方法实现,并推荐一种最好的方法,说明理由。
(3)用户输入若干个(不超过20个)小于100的正整数,编程求出这些数的最大值、最小值和平均值。
用户输入一个负数表示输入结束。
(4)输入一行字符(最多80个),统计其中的大写字母,小写字母,数字,空格及其它字符的个数。
(5)利用memcpy()函数实现char*my_strcpy(char*dst,char*src)函数,把字符串src拷贝到dst内,并返回dst。
注:
TurboC2.0对memcpy的联机帮助如下
memcpy:
copiesablockofnbytesfromsrctodest
void*memcpy(void*dest,constvoid*src,size_tn);
Prototypesinmem.h
Returnsdest
七、选做题。
此题分数不在试卷总分之内。
如作答,则此题得分额外加入总分,否则不加分(8分)
用户输入一行字符串,可能输入的字符个数不定,以回车作为结束标志。
统计用户的输入中一共有多少个单词。
单词之间以空格或者\t作为分隔。
KeytoPartVI
(1)
#include
intIsPrime(intdata)
{
inti;
intresult=0;
intlimit=(int)sqrt((double)data);
for(i=2;i<=limit;i++)
if(data%i==0)
{
i=-1;
break;
}
returnresult;
}
(2)
1、全局变量法
intinvoked=0;
voidfunc(void)
{
invoked++;
printf(“%d\n”,invoked);
}
2、静态变量法
voidfunc(void)
{
staticintinvoked=0;
invoked++;
printf(“%d\n”,invoked);
}
喜欢哪个看个人喜好……
(3)
/*这题……让输入正整数,负数表示结束,输入0咋整……*/
#include
main()
{
inti=0,temp;
intmax=0,min=100,sum=0;
intnum[20];
while(scanf(“%d”,temp)==1)
{
if(temp<=0)break;
if(temp>max)max=temp;
if(tempsum+=temp;
num[i]=temp;
i++;
}
if(i==0)printf(“Noinput.\n”);
else
{
printf(“Max:
%d\n”,max);
printf(“Min:
%d\n”,min);
printf(“Average:
%lf\n”,sum/(double)i);
}
}
(4)
#include
#defineUCASE0
#defineLCASE1
#defineNUM2
#defineSPACE3
#defineOTHER4
main()
{
inti=0;
chartemp;
intletter[5]={0};
while(temp=getchar()!
=’\n’)
{
if(temp>=’A’&&temp<=’Z’)letter[UCASE]++;
elseif(temp>=’a’&&temp<=’z’)letter[LCASE]++;
elseif(temp>=’0’&&temp<=’9’)letter[NUM]++;
elseif(temp==’’)letter[SPACE]++;
elseletter[OTHER]++;
}
printf(“Uppercase:
%d\nLowercase:
%d\nNumber:
%d\n\Space:
%d\n\
Other:
%d\n”,letter[0],letter[1],letter[2],letter[3],letter[4]);
}
(5)
char*my_strcpy(char*dst,char*src)
{
inti=0;
while(*(src+(i++)));
return(char*)memcpy(dst,src,i);
}
KeytoPartVII
#include
#include
usingnamespacestd;
intmain()
{
intword=0;
stringinput;
getline(cin,input);
for(inti=0;i{
if(input[i]==’’||input[i]==’\t’)word++;
}
if(input[input.size()-1]!
=’’||input[input.size()-1]!
=’\t’)word++;
cout<return0;
}