阿尔伯特教研组编 禁止传阅
8
char*str
(2) 循环语句while(*str&&*str!=ch)str++;的循
环条件是字符串str存在元素,并且不存在与ch 相
同的字符,字符指针一直递增,如果没有找到指定
的字符,此时指针str已经指向'\0',则将字符ch 插
入该字符串的后面,故语句if(*str==ch){str[0]=
ch;str[1]='\0';}应该实现的功能是,当没有找到与
ch 相同的字符时(此时应满足*str=='\0'),把ch 插
到字符串的末尾。所以if(*str==ch)应改为
if(*str=='\0')。
(3)在前面的while 循环之后,str指向'\0',这里
str[0]与*str都表示'\0',此时需要把ch 插到字符串
末尾,即语句str[0]=ch;str[1]则指向其后一个地址,
一个字符串需要以'\0'结尾,因此str[1]='0';应改为
str[1]='\0';由于'\0'其值为0 所以也可以改为
str[1]=0;。
【参考答案】:
第1处:voidfun(charstr,charch) 应改为 void
fun(char*str,charch)
第2处:if(*str==ch) 应改为 if(*str=='\0')
第3处 str[1]='0'; 应改为 str[1]='\0'; 或者改为
str[1]=0;
考察知识点:整数按位分离合并算法。
解题思路:fun 函数的功能是求出w 的后n1位的
数作为函数值返回。其思路是:先把整数w 分离出
位上的数字,然后把后n1位数字分别乘以位权累
加作为返回值。按位拆分无符号整数w 的算法是:
w 与10取模(%)求其个位,然后w 除以10,再
与10取模求十位,依次类推。按位合并的算法是:
每位上的数字与该位上的位权相乘,然后各位相
加,即anan1…a2a1a0=an*10n+an1*10n1+ …
+a2*102a1101a0100。
【参考答案】:
unsignedfun(unsignedw)
{
unsignedt,s=0,s1=1,p=0;
t=w;
while(t>10)
{
if(t/10)
p=t%10;
s=s+p*s1;
s1=s1*10;
t=t/10;
}
returns;
}
16)考查知识点:if...else 语句,函数返回。
解题思路:fun 函数的功能是判断一个年份是否为
闰年。如果年份能被 4整除但是不能被 100整除,
或者能被 400 整除, 这两种情况满足之一都是闰年。
【参考答案】:
第1处填空:n%100!=0 或 n%100 或 0!=n%100
第2处填空:n%400==0 或 !(n%400) 或 0==
n%400
第3处填空:flag
考查知识点:链表,函数返回值,随机数。
解题思路: 函数Creatlink 的功能是创建带头结点的
单向链表,并为各结点数据域赋0到m1的值。创
建一个单向链表的算法是产生一个新节点,并把它
连接到当前节点表尾,每连接一个节点,就把指针
p 移动到新节点的表尾。注意错误标志符出现的地
方,着重分析错误标志符下方的语句。
答案详解:
(1)函数Creatlink 定义了3个链表指针,其中h
为单向链表的头指针,p 为创建链表的指针,功能
是指向下一个节点,s 为链表申请了内存空间,并
给数据域赋值,因此需要把s的值赋给p,即
p>next=NULL;应改为p=s;。
(2)按照题意,链表数据域的值为0 到m1的随
机值,函数 rand()的功能是产生一个随机数,由于
题目中要求节点数据域的值是一个0~m1的值,因
此s>data=rand()%m;应改为
s>data=rand()%(m1);。当rand()函数要产生一个随
机数,其范围使用求模运算来指定。
(3)创建一个链表,应该返回头指针,因此return
p;应改为returnh;。
【参考答案】:
第1处:p>next=NULL; 应改为 p=s;
第2处:s>data=rand()%m; 应改为
s>data=rand()%(m1);
第3处:returnp; 应改为 returnh;
考察知识点: 四舍五入算法、数据类型强制转换。
解题思路:fun 函数的功能是对变量h 中的值保留 2
位小数, 并对第三位进行四舍五入。 算法的关键是:
若预保留的位数的个数为n, 则先把实数乘以10 的
n+1次方;然后对此数加 5再与10 整除,其个位将
被舍弃;把所得的整数强制转换成float型再除以n
就得到最后的结果。
【参考答案】:
floatfun(float h)
{
longt;
floats;
h=h*1000;
t=(h+5)/10;
s=(float)t/100.0;
returns;
}
17)考察知识点: 四舍五入算法、数据类型强制
转换。
解题思路:fun 函数的功能是对变量h 中的值保留 2
位小数, 并对第三位进行四舍五入。 算法的关键是:
若预保留的位数的个数为n, 则先把实数乘以10 的
n+1次方;然后对此数加 5再与10 整除,其个位将
被舍弃;把所得的整数强制转换成float型再除以n
就得到最后的结果。
【参考答案】:
floatfun(float h)
{
longt;
floats;
h=h*1000;
t=(h+5)/10;
s=(float)t/100.0;
returns;
}
考查知识点:条件表达式、函数定义。
解题思路:fun 函数比较简单,编译就能发现少了
一个 “}” ,fun 函数的功能实现主要是 if 条件语句,
因此,要注意看条件表达式是否正确,编译查看是
否有语法错误。
答案详解:
(1)if((k%13=0)||(k%17=0))的条件表达式错误很明
显:即把赋值运算符=与关系运算符==混淆了,应
改为if((k%13==0)||(k%17==0))
(2)函数定义不完整,少了一个“}” 。
【参考答案】: