C语言程序设计题答案文档格式.docx
《C语言程序设计题答案文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计题答案文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
=2)&
&
(n<
10)"
应改为"
while((high>
10))"
本题中的第二处错误是:
C语言中,"
;
是语句的一部分,是语句结束的标志,不可缺少,所以,"
if(high%j==0){yes=0;
break}"
if(high%j==0){yes=0;
break;
5.评析:
本题着重考察考生对C语言中的语法以及一些简单算法的掌握情况。
C语言中,大小写的字母含意不同。
源程序中"
For(i=0,t=0;
p[i];
i++)"
是错误的,"
For"
应为小写,程序应改为"
for(i=0,t=0;
C语言中,一对双引号括起来的字符序列表示字符串常量,一对单引号括起来的表示字符常量。
转义字符'
\0'
作为字符串常量的结束标志。
源程序"
c[t]="
\0"
是错误的,应改为"
c[t]='
。
6.评析:
本题着重考察考生对C语言中一些简单算法的掌握情况。
本题中的第一个错误:
程序中外循环的循环次数少了一次,导致数列不能正确排序,所以应将程序中的语句"
for(i=j+1;
i<
n-1;
改为"
n;
本题中的第二个错误:
程序中变量t是作为中间变量交换数据用的,变量p是用来记录较小值的,所以应将程序中的语句"
t=i;
p=i;
7.评析:
本题的考核点是C语言中的函数的入口参数和for循环控制的格式。
函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普通的变量说明不同,函数参数必须同时具有变量类型和变量名;
另外,当函数前面的返回数据类型省略时,C语言默认函数返回整型,本题中n是整型数据,由"
printf("
\nTheresultis%lf\n"
fun(n));
可以看出fun函数应该返回浮点型数据,所以fun函数的返回数据类型不能省略。
综上所述,应该把程序中的"
fun(intm)"
floatfun(intm)"
for循环语句的一般形式为:
for(表达式1;
表达式2;
表达式3)语句各表达式之间用分号间隔。
所以,应该把语句"
for(i=100,i<
=m,i+=100)"
,改为"
for(i=100;
=m;
i+=100)"
8.评析:
本题着重考察考生对C语言中基本语法的掌握情况。
首先根据C语言中的语法规定,在定义数组变量时,用变量或不定量说明数组的大小是不对的;
其次,语句printf("
%4f"
xx[i][j])错误,因为根据题意方阵中的数为整型所以这里的语句应为printf("
%4d"
xx[i][j]);
9.评析:
本题的主要解题思路是:
通过一维数组c作为中转点,交换字符串a和字符串b的内容,首先,将串a赋给c,再将串b赋给a,最后将c赋给串b。
根据这个思路,很容易得出,在横线处应填上"
c[i]=a[i];
或具有相同作用的语句。
10.评析:
C语言中,变量是区分大小写的,p和P是不同的两个变量名,所以程序中语句"
if(P==n)return-1;
if(p==n)return-1;
由题意可知,要删除符合条件的元素,需将该元素后面的数向前移动一个位置,所以程序中语句"
a[i+1]=a[i];
a[i]=a[i+1];
11.评析:
本题的主要考核点是:
C语言的语法。
解题思路:
使用循环语句的嵌套来统计子字符串在字符串中出现的次数。
C语言中for的语法结构是for(;
),中间以"
号作间隔,在C语言中是区分大小写的。
本评析只作参考。
12.评析:
本题的考核点是C语言中指针的使用。
原程序的横线处应填入"
(*n)++"
这是因为:
main函数最后输出新数组时,for循环以m作为循环的上界,所以在InSort函数中最后应将*n加1。
程序中的错误:
main函数最后输出新数组时,for循环以1作为循环的下界将漏掉数组元素aa[0],且"
for(k=1;
k<
m;
k++);
语句后面也不应该加分号,应将之改为"
for(k=0;
k<
m;
k++)"
13.评析:
本题的考核点是C语言的一些基本常识和if语句的使用。
上述"
ifk>
0"
应改为"
if(k>
0)"
C语言中"
="
表示赋值,而"
=="
才表示"
等于"
,由题意看出,"
elseif(k=0)"
应为"
elseif(k==0)"
14.评析:
本题的考核点是C语言中函数入口参数的使用和文件包含的用法。
C语言提供了#include命令用来实现"
文件包含"
的操作。
其一般形式为#include"
文件名"
所以,"
include"
stdio.h"
include前不加"
#"
#include"
从主函数中可以看出,p是一个字符串,因此在upfst函数的参数表中应将p改为字符指针或字符数组,即把"
upfst(charp)"
upfst(char*p)"
15.评析:
本题的考核点是C语言的一些基本用法以及if语句的使用。
本题中IsPrime(int,n)是函数的定义,变量与关键字之间不能有逗号。
所以,"
IsPrime(int,n)"
IsPrime(intn)"
根据if语句的语法规则,if后的表达式必须由括号括起来。
由题意看出,n整除i时,也就是说"
n%i==0"
时,循环才继续进行。
因此,"
if!
(n%i)"
if(!
(n%i))"
二、程序填空题
本题的考核点是C语言中算术运算符的用法以及输入输出语句和break语句的使用。
题中第一个空填"
%"
:
为模运算符,或称求余运算符,%两侧均应为整型数据。
只有当"
时,循环才继续执行。
题中第二个空填"
break"
break语句用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。
题中第三个空填"
k"
scanf函数为格式输入函数,其一般形式为:
scanf(格式控制,地址表列)
格式控制"
是用双引号括起来的字符串,也称"
转换控制字符串"
地址表列"
是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。
本题的考核点是c语言中的函数的入口参数和类型转换。
本题求二分之一的圆面积,由数学公式得知圆面积公式为:
S=πr2,所以:
r"
此处是对有参函数的定义,括号内指定形参的类型及形参变量。
r*r"
此处是将圆面积公式转化为C程序中的公式,将主函数中输入的圆半径通过形参变量进行传递。
x"
:
本题的考核点是循环语句和整除算法。
使用循环语句使循环变量依次从1递增到1000,并将每个值与7和11进行取余比较,将符合条件的值存放入数组中并统计符合条件的值的个数。
本评析仅供参考。
本题考核点为字符串的查找,赋值操作。
题中第一空填"
break为跳出循环的语句。
if(s[i]==t[j])break;
语句是指当s[i]==t[j],即t[j]中的字符已经在字符指针s[j]所指向的字符数组中存在时,循环就结束。
题中第二空填"
s[i]"
*u++=s[i];
是将s[i]赋给*u,然后u加1。
题中第三空填"
*u"
*u='
,字符串的最后一个字符应该是'
的。
先判断输入的字母是否是大写字母,若是大写字母,将其转化为相应的小写字母,方法是该大写字母对应的ASCII码值加上32就是其小写字母的ASCII码值,再判断该小写字母是否是a~u,若是转化为其后的第5个字母。
若该小写字母是v~z,则将其ACSII码值减去21,转换后的小写字母作为函数值返回。
5"
C语言中,字母从a~z或A~Z的ASCII码值是依次递增的,所以将其转换为其后的第5个字母应该是"
c=c+5;
c"
通过return语句将被调用函数中c的值带回主调函数中去。
c1"
此句是调用fun()函数,括弧中是其实际参数。
本题着重考察考生对C语言中函数的调用以及一些简单算法的掌握情况。
!
从题意得知,若字符ch与字符串str中的某个字符相同,什么也不做;
若不同,则插在str的最后。
因此fun函数中先设置了一个循环从字符串str中寻找字符ch,如果找到则中断循环并保留字符ch的地址,否则一直循环到串尾。
因此通过判断*str的内容即可判断是否已找到字符ch。
str[1]"
如果没有找到字符ch,则在while循环后str指针指向串结束符0x00,此时应将字符ch写入这里并在下一地址写入一个串结束符0x00,所以应该是"
str[1]=0;
语句。
s,c"
本题主要考查的是函数的递归调用。
>
此处为递归调用结束的条件。
k-1"
此处为递归调用时返回给调用函数的实参值。
此处判断k是否为0,若是则将值返回给主函数。
本题的考核点是c语言中循环语句的使用。
本程序先通过n%2是否为0判断数组中元素的个数是奇数还是偶数,然后再通过"
t=a[i];
a[i]=a[p+i];
a[p+i]=t;
三个语句对换数组中的前半部分元素中的值和后半部分元素中的值。
本题的考核点是for循环的使用。
本题通过for循环,使用公式c[i]=(a[i]*b[n-1-i])*(a[i]*b[n-1-i]),求得数组a与数组b逆序之积的平方,将计算结果存在c数组中。
本题的考核点是c语言中的循环语句和条件判断语句的使用。
从本题的要求来看,我们应该采用循环条件判断的算法。
本参考函数使用while循环从头到尾扫描字符串,并在扫描时进行条件判断,对'
z'
,'
Z'
和其它字符进行不同的处理。
*(pstr+j)"
观察源程序可以发现,在程序中使用strcmp()函数是为了判断字符串str[i]与str[i+1]两者的大小,在fun()函数中只能通过指针来表达各个字符串,所以应当填"
pstr[j]"
对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]中的字符赋给pstr[i]。
p"
对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]和pstr[i]的内容进行交换。
本题考核点为:
文件的打开,读写操作。
题中第一个空填””r”“;
题中第二个空填”fs”
题中第三个空填”ft”
本题考核点为:
文件的打开,关闭和读写操作。
fp"
是向文件指针fp所指向的文件中写数据。
fclose(fp);
此语句是文件的关闭操作。
fname"
fopen函数用于文件的打开操作,其调用形式一般为:
fopen(文件名,使用文件方式)。
为所要打开的文件名。
本题考核点为结构体和文件的操作等。
STYPE"
typedef可以用来声明新的类型名来代替已有的类型名,此题用"
来代替未命名的结构体。
FILE"
关键字用于声明文件指针。
fwrite函数的一般调用形式为:
fwrite(buffer,size,count,fp);
其中buffer:
是一个指针,是要输出数据的地址;
size:
是要写的字节数;
count:
要进行读写多少个size字节的数据项;
fp:
文件型指针。
本题的考核点是结构体类型变量的定义和引用。
先从所有的学生数据中找出最低的分值,然后将所有学生分数中与最低分值相等的学生数据放到另一数组中,最后统计分数最低的学生人数并返回。
三、程序编写题
1.参考答案:
voidfun(char*s)
{charp[80];
inti=0,j=0;
while(s[i]!
='
)/*假如s[i]不为字符串结束符,则继续循环*/
{if((s[i]>
0'
)&
(s[i]<
9'
)){p[j]='
$'
p[j+1]=s[i];
j=j+2;
}/*假如s[i]为数字字符,则将$置于p[j]中,数字字符置于p[j+1]中*/
else{p[j]=s[i];
j=j+1;
}/*否则将s[i]置于p[j]中*/
i++;
}
p[j]='
strcpy(s,p);
/*将p数组中的字符复制到s数组中*/
}
2.参考答案:
voidfun(char*tt,intpp[])
{
char*p_tt=tt;
inti=0;
while(i<
26){
pp[i]=0;
i++;
}/*初始化pp数组中的值*/
for(;
*p_tt!
=NULL;
p_tt++)/*判断p_tt指针是否指向空,如果是则已统计完字符串tt中的各个字母的个数并退出循环,否则指针指向字符串tt中的下一个字符*/
{
switch(*p_tt){
case'
a'
pp[0]++;
b'
pp[1]++;
c'
pp[2]++;
d'
pp[3]++;
e'
pp[4]++;
f'
pp[5]++;
g'
pp[6]++;
h'
pp[7]++;
i'
pp[8]++;
j'
pp[9]++;
k'
pp[10]++;
l'
pp[11]++;
m'
pp[12]++;
n'
pp[13]++;
o'
pp[14]++;
p'
pp[15]++;
q'
pp[16]++;
r'
pp[17]++;
s'
pp[18]++;
t'
pp[19]++;
u'
pp[20]++;
v'
pp[21]++;
w'
pp[22]++;
x'
pp[23]++;
y'
pp[24]++;
pp[25]++;
}
另一种解法:
voidfun(char*tt,intpp[])
{inti;
for(i=0;
26;
i++)
pp[i]=0;
/*for()循环用于给数组pp[]赋初值0*/
*tt;
tt++)/*for()循环用于控制在字符串内从头到尾移动*/
if(*tt<
*tt>
)
pp[*tt-97]++;
/*统计字符串中各个字母出现的次数*/
}
3.参考答案:
voidfun(inta,intb,long*c)
inta_up,a_low,b_up,b_low;
/*a_up、a_low、b_up和b_low分别存放指针c的千位、十位、百位和个位数上的数字*/
a_up=a/10;
a_low=a%10;
b_up=b/10;
b_low=b%10;
*c=a_up*1000+b_low*100+a_low*10+b_up;
4.参考答案:
voidfun(intm,intk,intxx[])
inti,j,total=0;
int*p_xx=xx;
for(i=m+1;
i++){
for(j=2;
j<
i;
j++)if(i%j==0)break;
/*找出第一个能整除i的整数,找到则退出循环*/
if(i<
=j)/*判断i是否为素数,假如能整除i的整数为其自身j,则i为素数*/
*p_xx=i;
p_xx++;
total++;
if(total==k){
*p_xx=NULL;
break;
5.参考答案:
floatfun(intn)
floats=1.0,h=1;
for(i=2;
=n;
{h=h+i;
/*h为每一分式的除数,i为前后相邻除数之间的增量*/
s=s+1.0/h;
return(s);
6.参考答案:
intfun(ints)
intx1=0,x2=1,m=0;
/*假如当前项的值小于指定值s,但是下一项的值又大于指定值s,即下一项值即为大于s的最小的一个数*/
while(s>
m)
{
m=x1+x2;
x1=x2;
x2=m;
returnm;
7.参考答案:
doublefun(intm)
doubles=0;
for(i=1;
i++)/*求In
(1)~In(m)的和*/
s=s+log(i);
s=sqrt(s);
/*求s的平方根*/
return(s);
8.参考答案:
voidfun(char*s)
inti,j=0;
charstr[100],*p;
p=s;
while(*p!
){
if(*p<
'
||*p>
)/*假如当前指针p所指的字符不为数字字符,则将指针p所指的字符复制到str数组中*/
str[j++]=*p;
p++;
/*指针p指向字符串s中的下一个字符*/
str[j]='
j;
i++)/*将字符串数组str中的所有字符全部复制到p指针所指向的字符串s中,覆盖原串*/
p[i]=str[i];
p[i]='
9.参考答案:
voidfun(char*a)
{charb[81];
inti=0,j=0,s=0,k;
while(a[i]=='
*'
)/*统计原串串首连续*的个数*/
{i++;
s++;
while(a[i])/*将从第