本评析仅作参考。
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"stdio.h""或相同作用的语句。
从主函数中可以看出,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))"或相同作用的语句。
本评析仅作参考。
二、程序填空题
1.评析:
本题的考核点是C语言中算术运算符的用法以及输入输出语句和break语句的使用。
题中第一个空填"%":
"%"为模运算符,或称求余运算符,%两侧均应为整型数据。
只有当"n%i==0"时,循环才继续执行。
题中第二个空填"break":
break语句用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。
题中第三个空填"&k":
scanf函数为格式输入函数,其一般形式为:
scanf(格式控制,地址表列)
"格式控制"是用双引号括起来的字符串,也称"转换控制字符串"。
"地址表列"是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。
本评析仅作参考。
2.评析:
本题的考核点是c语言中的函数的入口参数和类型转换。
本题求二分之一的圆面积,由数学公式得知圆面积公式为:
S=πr2,所以:
题中第一个空填"r":
此处是对有参函数的定义,括号内指定形参的类型及形参变量。
题中第二个空填"r*r":
此处是将圆面积公式转化为C程序中的公式,将主函数中输入的圆半径通过形参变量进行传递。
题中第三个空填"&x":
scanf函数为格式输入函数,其一般形式为:
scanf(格式控制,地址表列)
"格式控制"是用双引号括起来的字符串,也称"转换控制字符串"。
"地址表列"是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。
本评析仅作参考。
3.评析:
本题的考核点是循环语句和整除算法。
解题思路:
使用循环语句使循环变量依次从1递增到1000,并将每个值与7和11进行取余比较,将符合条件的值存放入数组中并统计符合条件的值的个数。
本评析仅供参考。
4.评析:
本题考核点为字符串的查找,赋值操作。
题中第一空填"break;":
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='\0';",字符串的最后一个字符应该是'\0'的。
本评析仅作参考。
5.评析:
本题着重考察考生对C语言中一些简单算法的掌握情况。
解题思路:
先判断输入的字母是否是大写字母,若是大写字母,将其转化为相应的小写字母,方法是该大写字母对应的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()函数,括弧中是其实际参数。
本评析仅作参考。
6.评析:
本题着重考察考生对C语言中函数的调用以及一些简单算法的掌握情况。
题中第一空填"!
=":
从题意得知,若字符ch与字符串str中的某个字符相同,什么也不做;若不同,则插在str的最后。
因此fun函数中先设置了一个循环从字符串str中寻找字符ch,如果找到则中断循环并保留字符ch的地址,否则一直循环到串尾。
因此通过判断*str的内容即可判断是否已找到字符ch。
题中第二个空填"str[1]":
如果没有找到字符ch,则在while循环后str指针指向串结束符0x00,此时应将字符ch写入这里并在下一地址写入一个串结束符0x00,所以应该是"str[1]=0;"语句。
题中第三个空填"s,c":
此句是调用fun()函数,括弧中是其实际参数。
本评析仅作参考。
7.评析:
本题主要考查的是函数的递归调用。
题中第一个空填">":
此处为递归调用结束的条件。
题中第二个空填"k-1":
此处为递归调用时返回给调用函数的实参值。
题中第三个空填"==":
此处判断k是否为0,若是则将值返回给主函数。
本评析仅供参考。
8.评析:
本题的考核点是c语言中循环语句的使用。
解题思路:
本程序先通过n%2是否为0判断数组中元素的个数是奇数还是偶数,然后再通过"t=a[i];a[i]=a[p+i];a[p+i]=t;"三个语句对换数组中的前半部分元素中的值和后半部分元素中的值。
本评析仅供参考。
9.评析:
本题的考核点是for循环的使用。
解题思路:
本题通过for循环,使用公式c[i]=(a[i]*b[n-1-i])*(a[i]*b[n-1-i]),求得数组a与数组b逆序之积的平方,将计算结果存在c数组中。
本评析仅供参考。
10.评析:
本题的考核点是c语言中的循环语句和条件判断语句的使用。
解题思路:
从本题的要求来看,我们应该采用循环条件判断的算法。
本参考函数使用while循环从头到尾扫描字符串,并在扫描时进行条件判断,对'z','Z'和其它字符进行不同的处理。
本评析仅供参考。
11.评析:
题中第一个空填"*(pstr+j)":
观察源程序可以发现,在程序中使用strcmp()函数是为了判断字符串str[i]与str[i+1]两者的大小,在fun()函数中只能通过指针来表达各个字符串,所以应当填"*(pstr+j)"。
题中第二个空填"pstr[j]":
对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]中的字符赋给pstr[i]。
题中第三个空填"p":
对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]和pstr[i]的内容进行交换。
本评析仅作参考。
12.评析:
本题考核点为:
文件的打开,读写操作。
题中第一个空填””r”“;
题中第二个空填”fs”
题中第三个空填”ft”
本评析仅作参考。
13.评析:
本题考核点为:
文件的打开,关闭和读写操作。
题中第一个空填"fp":
是向文件指针fp所指向的文件中写数据。
题中第二个空填"fclose(fp);":
此语句是文件的关闭操作。
题中第三个空填"fname":
fopen函数用于文件的打开操作,其调用形式一般为:
fopen(文件名,使用文件方式)。
"fname"为所要打开的文件名。
本评析仅作参考。
14.评析:
本题考核点为结构体和文件的操作等。
题中第一空填"STYPE":
typedef可以用来声明新的类型名来代替已有的类型名,此题用"STYPE"来代替未命名的结构体。
题中第二空填"FILE":
"FILE"关键字用于声明文件指针。
题中第三空填"fp":
fwrite函数的一般调用形式为:
fwrite(buffer,size,count,fp);
其中buffer:
是一个指针,是要输出数据的地址;size:
是要写的字节数;count:
要进行读写多少个size字节的数据项;fp:
文件型指针。
本评析仅作参考。
15.评析:
本题的考核点是结构体类型变量的定义和引用。
解题思路:
先从所有的学生数据中找出最低的分值,然后将所有学生分数中与最低分值相等的学生数据放到另一数组中,最后统计分数最低的学生人数并返回。
本评析仅供参考。
三、程序编写题
1.参考答案:
voidfun(char*s)
{charp[80];
inti=0,j=0;
while(s[i]!
='\0')/*假如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]='\0';
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]++;break;
case'b':
pp[1]++;break;
case'c':
pp[2]++;break;
case'd':
pp[3]++;break;
case'e':
pp[4]++;break;
case'f':
pp[5]++;break;
case'g':
pp[6]++;break;
case'h':
pp[7]++;break;
case'i':
pp[8]++;break;
case'j':
pp[9]++;break;
case'k':
pp[10]++;break;
case'l':
pp[11]++;break;
case'm':
pp[12]++;break;
case'n':
pp[13]++;break;
case'o':
pp[14]++;break;
case'p':
pp[15]++;break;
case'q':
pp[16]++;break;
case'r':
pp[17]++;break;
case's':
pp[18]++;break;
case't':
pp[19]++;break;
case'u':
pp[20]++;break;
case'v':
pp[21]++;break;
case'w':
pp[22]++;break;
case'x':
pp[23]++;break;
case'y':
pp[24]++;break;
case'z':
pp[25]++;break;
}
}
}
另一种解法:
voidfun(char*tt,intpp[])
{inti;
for(i=0;i<26;i++)
pp[i]=0;/*for()循环用于给数组pp[]赋初值0*/
for(;*tt;tt++)/*for()循环用于控制在字符串内从头到尾移动*/
if(*tt<='z'&&*tt>='a')
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
if(i<=j)/*判断i是否为素数,假如能整除i的整数为其自身j,则i为素数*/
{
*p_xx=i;
p_xx++;
total++;
if(total==k){
*p_xx=NULL;
break;
}
}
}
}
5.参考答案:
floatfun(intn)
{inti;
floats=1.0,h=1;
for(i=2;i<=n;i++)
{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)
{inti;
doubles=0;
for(i=1;i<=m;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!
='\0'){
if(*p<'0'||*p>'9')/*假如当前指针p所指的字符不为数字字符,则将指针p所指的字符复制到str数组中*/
str[j++]=*p;
p++;/*指针p指向字符串s中的下一个字符*/
}
str[j]='\0';
p=s;
for(i=0;ip[i]=str[i];
p[i]='\0';
}
9.参考答案:
voidfun(char*a)
{charb[81];
inti=0,j=0,s=0,k;
while(a[i]=='*')/*统计原串串首连续*的个数*/
{i++;s++;}
while(a[i])/*将从第