的 t1所指子串替换成 t2所指子串。首先查找指定要替换的
字符串,然后执行替换操作。
【解题思路】
(1)第一个标识符下 while循环中的判断条件不指向字 符串尾,就进入循环进行子串出现判断与替换操作,while 循环中指向 w字符串尾的指针,应该是“while(*w)”
(2)第二个标识下“IF(*r==*p)”是比较 r指向的字符 和 p指向的字符是否相同,在 C语言中没有“IF”关键字, 应该用 if语句,故第二个标识下应改成“if(*r==*p)”。
【考点链接】函数定义语法;指针变量。
二、程序修改题
【考点链接】排序;字符串处理。
【答案】 难度指数★★
(1)t+=1.0/i; (2)return t; 【审题分析】
该题中函数功能是求题干累加公式的值。从已给定源程 序的 main主函数开始入手,通过“printf( \%lf\\n\”语句调用 fun函数,求得公式值。
【解题思路】
(1)第一个标识下,在以 i为循环参数的 for循环中进 行公式累加,每一项为 1.0/i,所以“t+=1.0/k;”改为“t+=1.0/i;”。
(2)第二个标识下,首先根据题干,将“填空”删除, 函数定义为“double fun(int n)”,它有 double型的返回值, 所以这里返回累加公式的计算结果,即“return t;”。
【考点链接】函数功能;函数返回。
三、程序设计题
【答案】 难度指数★★ 1 int i, j=0;
2 for(i=1; i 【审题分析】 该程序功能是将 s所指字符串中 ASCII值为奇数的字符 删除。解题思路,首先求得字符串的长度,然后利用长度控 制循环,在循环过程中,使用 if判断语句对字符串中的每 一个字符 ASCII值的奇偶进行判断,如果是偶数,将其拷 贝到指定字符串。 【解题思路】 (1)首先,求得字符串的长度。 (2)然后选择字符串中 ASCII码为偶数的字符。 (3)最后将(2)中选择出的字符复制到指定的字符数 组中。 【考点链接】数组操作;函数传值。 三、程序设计题 【答案】 难度指数★★★★ 1 int cnt=0; 2 char *p=str, *q; 3 while(*p){ 4 q=strstr(p, substr); 5 if(q==NULL) break; 6 p=q+strlen(substr); 7 cnt++; 8 } 9 return cnt; 【审题分析】 该程序功能是统计一个定长子串在另一个字符串中出 现的次数。解题过程利用循环过程判断字符串中是否存在指 定子串,如果存在该子串,将统计的计数器加 1。 【解题思路】 (1)在 fun函数中,str接受主函数中的字符数组的首地 址,另一个字符形参指针指向子串字符数组 substr的首地址。 (2)利用 strstr函数找到 substr出现的位置,设置两个 指针变量 p和 q分别记录起始地址和 substr出现的地址。 (3)每次循环开始,使指针 p指向 str字符串首地址, 使 q指向子串 substr出现的地址,p的位置不断往后移,直 到字符串尾,每次找到 substr对应统计加 1。 【考点链接】指针操作。 第 99套试题答案及详解 一、程序填空题 【答案】 难度指数★★★ (1)[N] (2)len (3)*n=len 【审题分析】 函数 fun的功能是求 ss所指字符串数组中长度最长的 字符串所在的行下标,求最长字符串所在的下标,一般假设 第一个字符串的长度最长为 max,用 k记录最长字符串的下 标的话,开始时 max=strlen(ss[0]),k=0,然后逐个比较其他 字符串长度,如果字符串 ss[i]长度比 max大,则 max为这 个字符串长度,k=i,如此便可求得最长字符串和最长字符 串所在的下标位置。 【解题思路】 第一空:在主函数内 fun函数调用“k=fun(ss,&n);”可 知,fun函数的第一个参数为数组首地址,是指针变量,故 第一空处的 fun函数定义应为“[N]”。 第二空:由审题分析可知,i=0时,记录长度的变量*n 应该赋初值 len,故第二空处应为“len”。 第三空:由审题分析可知,如果 len比*n大,那么*n 记录这个大的值,故第三空处应为“*n=len;”。 第 100套试题答案及详解 一、程序填空题 【答案】 难度指数★★★ (1)*s (2)1 (3)k[n] 【审题分析】 本题中函数 fun的功能是找出形参 s所指字符串中出现 频率最高的字母(不区分大小写),并统计出其出现的次数。 在字母表中,有 26个字母,找到出现频率最高的字母需要 对每次字符进行统计,在统计结果里面找到出现频率最大的 31 字母。 在 fun函数中,定义了一个数组 k[26],k中的每一个元 素对应的一个字符出现的次数,26个字符出现的次数分别 存储在 26个数组元素当中,k[0]存放字符“a”出现的次数, k[1]存放字符“b”出现的次数,依此类推。 【解题思路】 第一空:“ch=tolower(__1__); n=ch-'a';”可知统一将字 符*s转化成小写字母,然后和字母“'a'”比较,因此第一空 处应为“*s”。 第二空:“ k[n]+=__2__;”是统计字符“*s”出现的次数, “ch-'a'”得到了应存放的数组元素的下标位置 n,k[n]元素加 1标识该字符在上一次出现的基础上又出现了一次,故第二 空处应为“1”。 第三空:“if(max 【考点链接】函数功能。 二、程序修改题 【答案】 难度指数★★ (1)double fun(int k) (2)return s; 【审题分析】 本题中函数的功能是计算题干中给出的公式值。首先根 据题干中给出的公式推出每一项之间的关系,求出每一项的 表达式,然后求得数列的值。其中本题中的每一项为 (2*n)*(2*n)/((2*n-1)*(2*n+1))。 【解题思路】 (1)第一个标识下 fun函数的定义缺少返回类型,所以 将“void fun(int k)”改为“double fun(int k)”。 (2)第二个标识下返回语句没有分号结束。所以,第二 个标识下“return s”应该改为“return s;”。 【考点链接】函数定义;C语言基本语法。 三、程序设计题 【答案】 难度指数★ 1 double s=0.0; 2 int i; 3 for(i=1; i<=n; i++) s=s+1.0/ (i*(i+1)); 4 return s; 【审题分析】 该程序功能是计算并输出多项式值。该题的解题思路 是,根据题干中给出的数列,首先推出每一项的表达式或者 公式,然后再对多项式进行累加求和。 【解题思路】 (1)根据题干中给出的数列,推出每一项是 1.0/(i*(i+1))。 (2)在循环中求得每一项,然后对其进行累加求和。 【考点链接】运算符。 32