C语言51-100套试题答案及详解(4)

2019-08-17 12:04

数字字符分别存储在数组 t1和 t2中,然后将数组 t2和 t1按 照非数字字符在前、数字字符在后的方式放在字符串 s中。

【解题思路】

第一空:如果 s[i]是数字字符,则将 s[i]保存在 t2数组 中,同时变量 j自增,准备下次保存数字字符,故第一空处 应为“j++”。

第二空:语句“for(i=0; i

第三空:循环“for(i=0; i<___3___; i++)”是将数字字符 保存在 s字符串的后面,数字字符的个数为 j,因此这里是 将 j个数字字符保存在 s字符串的后面,故第三空处应为“j”。 【考点链接】字符串处理。

件,那么对统计计数变量进行加 1操作。

【考点链接】数组操作;指针操作。

第 76套试题答案及详解

一、程序填空题

【答案】 难度指数★★★ (1)i+1 (2)k=j (3)t 【审题分析】

函数 fun的功能是用是选择排序对 M个字符串由短到 长进行排序,是选择排序法降序排序,首先从字符串中挑选 一个最短的字符串,把它和第一个字符串交换,接着从剩下 的 M-1个字符串中再挑出一个最短的字符串,把它和第二 个字符串交换,不断重复以上过程,直到比较完最后一个字 符串。

【解题思路】 第一空:由审题分析可知,外循环 i=0时,内循环变量 从 i+1到 M-1(下标从 0开始),从 M-1个字符串中再挑出 一个最短的字符串,故第一空处应为“i+1”。

第二空:k记录最短字符串的下标,内循环开始前 k赋 初值 i,内循环从剩下的 M-i个字符串里面找最短的,比较 k字符串和 j字符串的长度大小,如果 n[k]>n[j],则把 j赋 给 k,即第二空处应为“k=j”。

第三空:if(k!=i)说明找到了新的更短的字符串,那么把 它和第 i个字符串交换,因此第三空处应为“t”。

【考点链接】循环结构,二维数组。

二、程序修改题

【答案】难度指数★★★

(1)for(j=i+1; j<6; j++) (2)*(pstr+i)=*(pstr+j); 【审题分析】

本题中函数的功能是用冒泡法对 6个字符串按由小到 大的顺序进行排序。其中,冒泡排序法的过程是从数组的首 元素开始,依次对相邻的两个元素进行比较,当发现前面的 数字大于后面时就进行依次交换,从头到尾比较完一遍就挑 出一个最大的数,将其排在最后面,n个数要比较 n-1遍, 其中第 j遍要两两相比 n-j次。

【解题思路】

(1)C语言中,for语句形式是:for(表达式 1;表达式

循环体语句。 2;表达式 3) 因此第一个标识下,for使用错误,应该为“for (j=i+1; j<6; j++)”。

(2)if语句后的复合语句的功能是把“*(pstr+i)”中和 “*(pstr+j)”中的地址进行交换,而“*(pstr+i)=pstr+j;”中 “ pstr+j;”并不是字符串的地址,所以第二个标识下 “*( pstr+i)=pstr+j;”改为“*( pstr+i)=*( pstr+j);”。

【考点链接】函数定义;指针操作。

二、程序修改题

【答案】 难度指数★★

(1)void fun(char *str, char ch) (2)if(*str !=ch) (3)str[1]='\\0'; 【审题分析】

该题中函数功能首先是查找子串再判断,最后是实现将 符合条件的字符串进行连接。从已给定源程序的 main主函 数开始入手,通过“fun(s,c);”语句调用 fun函数,实现题 干的要求。

【解题思路】 (1)第一个标识下,“ void fun(char str, char ch)”根据主函 数中的 fun函数的调用“fun(s,c)”,知道 s为数组名,传的应 该是数组地址,所以应改为“void fun(char *str, char ch)”。

(2)while循环中对 ch与 str进行匹配检查,第二个标 识下,是当不同时执行连接操作,那么判断*str与 ch是否 不同的表达式应该是“if(*str !=ch)”。

(3)第三个标识下,连接后的新串要添加结尾符,所以 正确的表达是将“str[1]='0';”改为“str[1]='\\0';”。

【考点链接】函数定义语法;数组操作。

三、程序设计题

【答案】 难度指数★★★★ 1 int cnt=0; 2 char *p=ss; 3

4 while(*p){

5 if(*p==c)cnt++; 6 p++; 7 }

8 return cnt;

【审题分析】

该程序功能是统计字符串中指定字符的个数。解题思路 是在循环过程中,对字符进行判断,如果符合题干要求,对 其个数进行统计。

【解题思路】

如果不是串尾就进入 while循环,在循环过程中利用 if 条件表达式判断当前字符是否为指定的字符,如果符合条

三、程序设计题

【答案】难度指数★★ 1 char b[N];

16

【解题思路】

(1)根据题干中求得除了头结点之外的结点数据域中的

memset(b, 0, N); 最大值,头指针 h,工作指针 p指向头结点的下一个结点, for(j=strlen(s)-1; j>=0; j--)b[i++]= 所以第一个标识下的“p=h;”指向头结点应该改为指向下一 s[j]; 个结点“p=h->next;”。 6 strcpy(s, b);

(2)工作指针 p,利用 p实现对链表的遍历,p表示指

【审题分析】 向链表的当前结点,所以指向下一个结点应该是“p=p-> 该程序功能是字符串中的内容逆置。把字符串中字符

next;”。

逆置,就是把字符串中的第一个元素和最后一个元素交换,

【考点链接】链表操作;函数功能。

第二个元素和倒数第二个元素交换,直到所有元素交换完

三、程序设计题 成为止。

【解题思路】 【答案】难度指数★★★★ 进入 fun函数,根据前面的分析: 1 int i,n=0,flag=1; //初始设置标识位 首先求得字符串的长度,然后通过循环进行字符交换。 flag=1 要注意的是,如果字符串长度是奇数,则最中间的元素在逆 2 char *p=str; //设置工作指针 置前后的位置是没有改变的。 3 while(*p) //取字符串大小

【考点链接】数组操作;指针操作;while语句。

4 {

5 n++; 6 p++; 7 }

8 for(i=0;i

9 //循环判断字符串 s是否为回文 10 if(str[i]==str[n-1-i]); 11 //设置比较位 j为 n-1-i 12 else

13 //若不符合条件,标识位设为 0,跳出循环 14 {

15 flag=0; 16 break; 17 }

18 return flag;

【审题分析】

该程序功能是判断字符串是否为回文。其中,回文是指 顺读和倒读都一样的字符串。解题过程首先利用 while循环 取得字符串的长度 n,然后循环判断正序第 i个字符和其对 应的逆序字符 n-1-i个是否相等,也就是判断是否是回文。

【解题思路】

进入 fun函数,根据前面的分析: 主要思路是:

(1)首先用整型变量 i表示所判断的字符串中前面对应 元素的下标。i初值为 0,n是字符串的长度,通过循环来求 得 n。

(2)然后,把下标为 i的字符与下标为“n-1-i”的字符 比较,如果相同,i加 1,继续进行一对一的字符比较。不 断重复此过程,直到 i≥n/2为止。在此过程中,如果下标为 i的字符与下标为“n-1-i”的字符不相同,则可以断定字符 串不是回文,立即退出函数。

(3)如果正常结束循环,就说明字符串符合回文条件。 【考点链接】数组操作;指针操作;函数传值。

2 3 4 5

int i=0, j;

第 77套试题答案及详解

一、程序填空题

【答案】难度指数★★★ (1)double(2)f1(3)f2 【审题分析】

本题中函数 fun的功能是用函数指针指向要调用的函 数,并进行调用,主要考察函数的指针的使用。存放函数的 入口地址的指针是指向函数的指针,简称函数的指针。

【解题思路】

第一空:由“f=__2__; /* point fountion f1 */”和“r1= f(a);”可知 f是一个函数的指针,且 f指向的函数的返回值 为 double型,函数的指针的定义方式是:类型标识符(*指针 变量名)(),故第一空处的函数的指针的定义为“double”。

第二空:“f=__2__; /* point fountion f1 */”和“r1=f(a);” 可知 f指向的函数只有一个参数 a,因此 f指向 f1函数,即 第二空处为“f1”。

第三空:“ f=__3__; /* point fountion f2 */”和

“r2=(*f)(a,b);”,f指向的函数有两个参数,因此 f是指向 f2 函数,故第三空处应为“f2”。

【考点链接】函数的指针。

二、程序修改题

【答案】 难度指数★★★★

(1)p=h->next; (2)p=p->next; 【审题分析】

(1)该题中函数功能是单向链表结点(不包括头结点) 数据域为偶数的值累加起来,并且作为函数值返回。对单向 链表进行遍历,并在遍历过程查找数据域为偶数的结点,并 将数据域为偶数的元素累加起来。

( 2)从已给定源程序的 main主函数开始入手, “head=creatlink(12);”语句生成随机数的链表,“ outlink(head , stdout);”输出输出该链表,“ even=fun(head);”语句调用函数 fun 求得链表中的数据域为偶数的值的累加和。

17

第 78套试题答案及详解

一、程序填空题

【答案】难度指数★★★

(1)k(2)len(3)ss[i][j] 【审题分析】

函数 fun的功能是求出形参 ss所指字符串数组中最长 字符串的长度,并其余字符串左边用字符*补齐,因此首先 找到长度最长的字符串,然后逐个对其他字符串的开始位置 添加“*”,直至长度等于最长字符串的长度。

【解题思路】 第一空:第一 for循环寻找最长的字符串,变量 n记 录字符串的长度,k记录最长字符串的下标位置。i=0时, 将 n赋值第一个字符串的长度,假设第一个字符串长度最 长,以后其他字符串和 n比较,如果比 n大,则把新的字 符串长度赋给 n,k记录新的字符串下标位置,因此第一空 处应为“k”。

第二空:“ss[i][m--]=ss[i][j];”是将字符串 ss[i][j]的字符 往后移动,腾出左边位置补“*”。字符串的长度为 len,字 符串的最后一个字符 ss[i][len-1]移动到 ss[i][n-1],ss[i][len-2] 移动到 ss[i][n-2],直到全部字符都往后移动 len位,因此第 二空处应为“len”。

第三空:此处的循环是把空处来的位置补上“*”,因此 第三空处应为“ss[i][j]”。

【考点链接】循环结构;数组。

8 s[i]='\\0'; 【审题分析】

该程序功能是删除字符串中指定的字符。解题过程,首 先利用循环在字符串中查找指定的字符,然后对其进行删除 操作。

【解题思路】 进入 fun函数,根据前面的分析:

(1)首先,设置一个指针变量指向字符串的头位置,并 使用循环,依次查找字符串中的指定字符。

(2)若找到指定字符,则将后面位置的第一个非指定字 符移到当前位置,并将其后的字符也依次前移。

(3)最后将处理的字符串输出。 【考点链接】指针操作。

第 79套试题答案及详解

一、程序填空题

【答案】 难度指数★★★

(1)h->next (2)p->next (3)>= 【审题分析】

本题中函数 fun的功能是将带头节点的单向链表结点数 据域中的数据从小到大排序,在 fun函数内采用的是选择法 排序。

选择排序法中的升序排序,首先从数组中挑选一个最小 的元素,把它和第一元素交换,接着从剩下的 n-1个元素中 再挑出一个最小的元素,把它和第二个元素交换,不断重复 以上过程,直到比较完最后两个元素。

【解题思路】 第一空:由审题分析可知,q从 h的下一个元素开始寻 找最小值,故第一空为“h->next”。

第二空:由审题分析可知,while循环是在剩下的元素 当中找最小值,剩下的结点是由 q指向的链表,q从 p的后 一个结点开始,故第二空处应为“p->next”。

第三空:“ if (p->data __3__ q->data)”是比较 p结点和 p 结点数据的大小,如果 p结点的数据比 q结点的数据大,那 么应该将 p结点和 q结点的数据进行交换,故第三空处应为 “>=”。

【考点链接】链表。

二、程序修改题

【答案】难度指数★★★ (1)result*=n--; (2)return result; 【审题分析】

本题中函数的功能是计算整数 n的阶乘。其中,阶乘的 计算公式分为参数 n是 1和大于 1两种情况,例如,1的阶 乘 1!=1;5的阶乘 5!=5×4×3×2×1。

【解题思路】

(1)第一个标识下 while循环过程实现 n的阶乘,根据 阶乘的算法 n!=n*(n-1)*…*1,题干中的语句“result *=--n;” 先对 n进行减 1操作,结果就少乘了 n,所以将“result *=--n;” 改为“result *=n--;”。

(2)根据 fun函数的定义,fun函数应该返回阶乘结果, 所以第二个标识下填空为“return result;”。

【考点链接】函数功能;函数返回值。

二、程序修改题

(1)p=h->next; (2)p=p->next; 【审题分析】

(1)该题中函数功能是求单向链表结点(不包括头结 点)数据域中的最大值。其中,单链表查找最大值及最小 值的方法主要是对单链表的遍历,并在遍历过程中将初始 化的最大值、最小值与链表中的每一个结点的数据域进行 比较。

( 2)从已给定源程序的 main主函数开始入手, “head=creatlink(12,100);”语句生成随机数的链表,“outlink (head,stdout);”输出输出该链表,“m=fun(head);”语句调用 函数 fun求得链表中的最大值。

三、程序设计题

【答案】 难度指数★★★ 1 char *p=s; 2 int i=0; 3

4 while(*p){

5 if(*p !=c)s[i++]=*p; 6 p++; 7 }

18

【解题思路】

(1)根据题干中求得除了头结点之外的结点数据域中的

最大值,头指针 h,工作指针 p指向头结点的下一个结点, 所以第一个标识下的“p=h;”指向头结点应该改为指向下一 个结点“p=h->next;”。

(2)工作指针 p,利用 p实现对链表的遍历,p表示指 向链表的当前结点,所以指向下一个结点应该是“p=p-> next;”。

【考点链接】链表操作;函数功能。

故第二空处应为“<”。

第三空:变量 k记录了最小字符串的下标位置,函数的 返回值是最短的字符串所在的行下标,故第三空处应为“k”。

【考点链接】字符串处理,排序。

二、程序修改题

【答案】难度指数★★

(1)if(('a'<=tt[i])&&(tt[i]<='z')) (2)tt[i]-=32; 【审题分析】

本题中函数的功能是将字符串中的小写字母改为对应 的大写字母。首先判断字母是否为小写字母,如果是小写字 母则进行转换。

【解题思路】 (1)第一个错误标识下的 if判断语句中的逻辑有误, 应该是与(&&)的关系,不是或(||)的关系,所以 if判断 语句改为“if(('a'<=tt[i])&&(tt[i]<='z'))”。

(2)第二个标识下小写字母转换为大写字母的转换算法 有误,小写转换为大写应该是减去 32,而不是加上 32,所 以“tt[i]+=32;”改为“tt[i]-=32;”。

【考点链接】大小写字符之间的转换。

三、程序设计题

【答案】 难度指数★★★★ 1 int i,j;

2 for(i=0;i

5 b[*n]=*(*(s+i)+j); 6 *n=*n+1; 7 }

【审题分析】

该程序功能是将 M行、N列的二维数组中的数据,按 行的顺序依次放到一维数组中。本题中首先要清楚数组元素 在通常情况下是按行存放的,而如果要实现按行存放,其对 应关系应为: s[0][0],s[0][1],s[0][2],…,s[0][M-1],s[1][0], s[1][1],…,s[N-1][M-1]。

【解题思路】

(1)利用两重循环,依次取矩阵中的元素。

(2)其中注意指针数组与数组指针的区别,其中数组指 针 s,它指向包含 4个元素的一维数组。其数据元素的表示 方式为:“*(*(s+i)+j)”。

【考点链接】指针操作。

三、程序设计题

【答案】 难度指数★★★ 1 int i,j;

2 int t=0; //初始化数组个数

3 for(i=2;i

数是否为素数 4 {

5 j=2;

6 while(j

8 if(i%j==0) //如果 i不是素数 9 {

10 xx[t]=i; 11 t++; 12 break; 13 } 14 j++; 15 }

16 *k=t; 17 }

【审题分析】

该程序功能是将所有大于 1小于整数 m的非素数存入 xx所指数组中。求素数的常用方法是:从 2到 m-1去除 m, 如果中间的任何数被整除,则不是素数。

【解题思路】 (1)根据求素数的方法判断数 i是否为素数。

(2)把不是素数的数留下来,其方法是:如果该数是素 数则不处理;如果不是素数则放到数组 xx中,并且把数组 的下标加 1,为下一个不是素数的数放在数组中做准备。

(3)返回个数,把 xx数组中已经写入的数的个数返回 即可,即把数组 xx的最大下标加 1返回即可。

【考点链接】数组操作;指针操作;函数传值。

第 80套试题答案及详解

一、程序填空题

【答案】 难度指数★★★ (1)M (2)<(3)k 【审题分析】

函数 fun的功能是求 ss所指字符串数组中长度最短的 字符串所在的行下标。求最短字符串所在的下标,一般假设 第一个字符串的长度最短 min,用 k记录最长字符串的下标 的话,开始时 min=strlen(ss[0]),k=0,然后逐个比较其他字 符串长度,如果字符串 ss[i]长度比 min小,则将 min赋值为 这个字符串长度,k=i,如此便可求得最短字符串和最短字 符串所在的下标位置。

【解题思路】 第一空:循环的目的是在 M个字符串中寻找长度最短 的字符串,因此循环变量 i从 0变化到 M-1,故第一空处应 为“M”。

第二空:*n记录最小字符串的长度,由审题分析可知, 字符串 ss[i]长度比 min小,则交换最小长度值和下标位置,

19

第 81套试题答案及详解

一、程序填空题

【答案】 难度指数★★★ (1)fp (2)==(3)fp 【审题分析】

函数 fun的功能是从指定文件中找出指定学号的学生数 据,读入此学生数据,对该生的分数进行修改,修改后存储 到原文件当中。

【解题思路】

第一空:“while (!feof(__1__))”是在文件没有达到文件 尾的情况不断读取文件内容,文件状态检测函数 feof的调 用形式为:feof(fp),其中 fp为文件指针,故第一空处应为 “fp”。

第二空:题干要求找到指定学号的学生数据,“ if (n.sno__2__sno)”是比较读取出来的 n学生的学号和指定的 学好 sno是否相等,故第二空处应为“==”。

第三空:此处是补充 fseek函数的参数,fseek的调用形 式是:fseek(fp, offset, position),其中第一个参数是文件型指 针,故第三空处应填文件型指针变量“fp”。

【考点链接】文件操作;函数功能。

【审题分析】

该程序功能是求出链表中的最大值。其中,对于链表中 最大值的主要算法是遍历链表中的每个节点,在访问过程中 对各节点进行比较,找出数据域的最大值。

【解题思路】 进入 fun函数,根据前面的分析:

(1)设置一个工作指针,指向头节点。设置一个变量存 放最大值,初值为头节点数据域的值。

(2)移动工作指针到后一个节点,并将数据域的值与 max比较,将较大的值存入 max。

(3)移动工作指针,指向下一个节点,直到指针指向链 表尾。

【考点链接】指针操作;do while循环语法。

第 82套试题答案及详解

一、程序填空题

【答案】 难度指数★★★

(1)*std (2)PERSON (3)std 【审题分析】

fun函数的功能是将形参指针所指结构体数组中的三个 元素按 num成员进行升序排列,在函数体内部,利用 3个 if语句来进行判断排序。

【解题思路】 第一空:fun函数的功能是将形参指针所指结构体数组 中的三个元素进行排序,可知 fun函数的参数是指针,由 “if(std[0].num>std[1].num)”可知形参名为 std,故第一空处 应为“void fun(PERSON *std)”。

第二空:temp变量用来进行交换时临时保存变量值, 由“temp=std[0];”可知 temp是 PERSON结构体变量,故第 二空处的 temp结构体定义应为“PERSON temp;”。

第三空:这里是调用 fun函数,fun函数的参数是结构 体变量指针,std是结构体数组,数组名相当于数组的首地 址,故第三空处应为“fun(std);”。 【考点链接】结构体;指针。

二、程序修改题

【答案】

难度指数★

(1)n=strlen(aa); (2)ch=aa[i];

【审题分析】本题中函数的功能是根据题干中的算法对 字符串进行排序。其中,插入法的基本算法是:先对字符串 中的头两个元素进行排序。然后把第三个字符插入到前两个 字符中,插入后前三个字符依然有序;再把第四个字符插入 到前三个字符中……

【解题思路】

(1)strlen是求字符串长度的函数,函数调用的形式是: strlen(字符串地址),故第一标识下应改成“n=strlen( aa );”。 (2)程序调试时会提示“c=aa[i];”中的 c未定义,insert 函数中定义的是变量 ch作为存放 aa字符串中字符的临时变 量,然后对其与其他字符进行比较。所以将“c=aa[i];”改 为“ch=aa[i];”。

【考点链接】插入排序法;变量应用。

二、程序修改题

【答案】 难度指数★★★ (1)int k, q, i;

(2)pt[i]=str[k][i]; 【审题分析】

本题中函数的功能是将 m(1≤m≤10)个字符串连接 起来,组成一个新串。解题思路对 m个字符串取长度,然 后对其长度值进行选择判断。本题函数的实现思路是以输入 的字符串个数为外循环,以每一个字符串为内循环,依次将 字符串中的字符赋值到指定的字符串。

【解题思路】 (1)第一标识下是整型变量 k、q和 i的定义,根据 C 语言中整型变量的定义方式,第一标识下应为“int k, q, i;”。

(2)第二个标识下的“pt[i]=str[k,i];”语句应该将 str中 的字符依次拷贝到 pt中,根据 C语言中对二维数组每一位 的取值,应该是 str[k][i],所以“ pt[i]=str[k,i];”改为

三、程序设计题

【答案】 难度指数★★★★ 1 double max=h->s; 2 STREC *p; 3 p=h->next; 4 while(p)

5 {if(p->s>max) 6 max=p->s; 7 p=p->next; 8 }

9 return max;

20


C语言51-100套试题答案及详解(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:和济医院污水处理调试运维方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: