C语言程序设计题答案文档格式.docx

上传人:b****5 文档编号:20723351 上传时间:2023-01-25 格式:DOCX 页数:16 大小:23.45KB
下载 相关 举报
C语言程序设计题答案文档格式.docx_第1页
第1页 / 共16页
C语言程序设计题答案文档格式.docx_第2页
第2页 / 共16页
C语言程序设计题答案文档格式.docx_第3页
第3页 / 共16页
C语言程序设计题答案文档格式.docx_第4页
第4页 / 共16页
C语言程序设计题答案文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

C语言程序设计题答案文档格式.docx

《C语言程序设计题答案文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计题答案文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

C语言程序设计题答案文档格式.docx

=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])/*将从第

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1