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

2019-08-17 12:04

“pt[i]=str[k][i];”。

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

三、程序设计题

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

2 for(i=0; i

该程序功能是使数组左下半三角元素的值全部置成 0。其中左下半三角元素的下标特点是列下标小于或等于行 下标。

【解题思路】

进入 fun函数,根据前面的分析:

(1)对二维数组常用双重循环结构来处理:外层循环控 制二维数组的行处理,内层循环控制二维数组的列处理。

(2)左下半三角元素的下标特点是列下标小于或等于行 下标,即 j<=i。

(3)依次访问二维数组,把符合以上条件的元素的值 赋 0。

该题是对矩阵操作的考查。 【考点链接】二维数组。

判断,原题中“m=0;”语句将 m值设置为 0,在循环中 m 值始终是 0,不会改变,根据“for(i=0;i<2;i++)”语句中的 循环条件,“m=0;”改为“m=i;”。

(2)如果“if(a[k]>a[m])”,a[k]比 a[m]大,m记录下下 标值 k,内层循环结束的时候 a[m]值就是本次循环找到的最 大值(如果 m=0,a[m]是数组中的最大值;如果 m=1,a[m] 数组中的次最大值),即 m记录最大值的下标值,因此第二 标识下应该是“if(a[k]>a[m]) m=k;”。

【考点链接】函数定义语法;函数功能。

三、程序设计题

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

1 unsigned t,s=0,s1=1,p=0; 2 t=w; //将无符号数 w赋值给 t

3 while(t>10) //只对大于一位的无符号

数进行操作,否则返回 0 4 {

5 if(t/10)

6 p=t; //截取一位

7 s=s+p*s1; //组成新数 s

8 s1=s1*10; //权数升级,例如级数

10,升级为 100 9 t=t/10; //删除一位 10 }

11 return s;

【审题分析】

该程序功能是求出无符号数 w的后 n-1位的数。其中, 拆分无符号数 w,用表达式“t”可以得到个位数;用 “t=n/10; t”可以得到十位数;依次类推,可以得到其他 位上的数;当 t/10的值为 0时,就可以得出 w的位数。 【解题思路】

进入 fun函数,根据前面的分析:

利用 while循环语句,根据对拆分无符号数的分析取得 每位上的数。如果要截取的数 t大于 10,就说明 t不只有个 位,进入 while循环。每次截取一位 p,然后将 p乘以相应 的权数 s1,加上原有的计算结果 s,形成的新的数,然后将 t中截取的这位删除。其中,截取 t的第一位,那么权数就 是 1,第二位对应的权数就是 10,以此类推。 【考点链接】while;运算操作。

第 83套试题答案及详解

一、程序填空题

【答案】难度指数★★★

(1)tt(2)tt.score[i](3)std 【审题分析】

函数 fun的功能是输出结构体变量的学生的信息,主要 考察结构体成员变量的访问。

【解题思路】

第一空:由“printf(\tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday. day);”可知,tt是 STU结构体变量,故函数 fun的参数是“STU tt”,即第一空处应为“void show(STU tt)”。

第二空:此处是循环输出 score数组中的元素值,访问 score元素的方法是“tt.score[i]”,故第二空处应为“printf (\”。

第三空:调用 fun函数,fun函数的参数是 STU结构体 变量,故第三空处应为“show(std);”。

【考点链接】结构体。

第 84套试题答案及详解

一、程序填空题

【答案】 难度指数★★★

(1)t,s (2)s[i](3)0或'\\0' 【审题分析】

本题中函数 fun的功能是把形参 s所指字符串中最右边 的 n个字符复制到形参 t所指字符数组中,形成一个新串, 若 s所指字符串的长度小于 n,则将整个字符串复制到形参 t所指字符数组中。在 fun函数中,分两种情况,如果 s所 指字符串的长度小于 n,则直接拷贝 s字符串到 t字符串; 反之则将 s所指字符串中最右边的 n个字符逐个复制到形参 t所指字符数组中。

二、程序修改题

【答案】 难度指数★★★

(1)m=i; (2)if(a[k]>a[m])m=k; 【审题分析】

本题中函数的功能是求出数组中最大数和次最大数。解 题思路首先求出数组中最大数和次最大数,然后将最大数和 次最大数分别放到数组的第一位和第二位。

【解题思路】

(1)第二个标识符下 for循环逐个对 m个数据进行选择

21

【解题思路】

第一空:“if(n>=len) strcpy(__1__);”如果 s所指字符串 的长度小于 n,那么直接拷贝 s字符串到 t字符串,使用字 符拷贝函数 strcpy,所以第一空处应为“t,s”。

第二空:“ for(i=len-n; i<=len-1; i++) t[j++]=__2__;”将 s所指的字符的最右边 n个字符拷贝到 t所指的字符串中, 循环变量 i从 len-n开始,即 s[len-n]是最右边 n个字符的一 个字符,i逐渐增大,s字符串逐渐右移,故第二空处应为 “s[i]”。

第三空:字符串以“'\\0'”结束,因此第三空为“0”或 “'\\0'”。

【考点链接】指针;函数功能。

到整数的个数,不断循环此过程,直到 i的值等于 m。

【考点链接】if条件语句;for循环语句。

第 85套试题答案及详解

一、程序填空题

【答案】难度指数★★★

(1)STU(2)std[i].num(3)std[i] 【审题分析】

函数 fun的功能是找出指定编号人员的数据作为函数值 返回,编号是字符串数组,字符串的比较可使用 strcmp函 数。要找到指定的编号,需要利用循环搜索整个结构体数组。

【解题思路】

二、程序修改题

【答案】 难度指数★★★ 第一空:由“STU p; p=fun(std,n);”,可知 fun函数的 (1)if (i%k==0) (2)if (k>=i) 返回值是 STU结构体,因此第一空处应为“STU fun(STU 【审题分析】 *std, char *num)”。 本题中函数 fun的功能是找出一个大于形参 m且紧随 m 第二空:此处是用 strcmp函数比较两个字符串是否相 的素数,从 m+1开始寻找素数,找到这个素数就是紧随 m 同,参数 std是指向结构体数组的指针,故第二空处应为 且大于 m的素数。 “if( strcmp(std[i].num,num)==0 )”。

素数是指只能被 1和自身除尽的正整数(>1),所以判 第三空:如果“if(strcmp(std[i].num,num)==0)”成立, 别 n是否为素数,只要用 2~n/2这些数逐个去除 n,判断余 则返回值就是 std[i]结构体。 数是否为 0即可。只要有一次余数为 0,n就不是素数,否 【考点链接】结构体数组。 则 n为素数。

二、程序修改题

【解题思路】

【答案】 难度指数★★★ (1)“if (i%k !=0) break;”说明 k是 i的因子的情况,i

(1)r++; p++; (2)if(*r=='\\0') 肯定不是素数可直接跳出循环,因此第一标识下应改成“if

【审题分析】 (i%k==0)”。

(1)该题中函数功能是查找字符串中某子串的个数。其 (2)“if (k

向字符串中的每个字符。内循环中,判断 r所指字符串与 p 结束的时候 k=i,说明 k>=i时 i是素数,故第二标识下应改

所指字符开始的串是否完全匹配;若不能匹配,由 break退 为“if (k>=i)”。

出循环;若 r指向串结束标志,退出循环,则表示匹配。 【考点链接】函数功能。

(2)从已给定源程序的 main主函数开始入手,从键盘 三、程序设计题

获得输入的字符串 s, t;然后通过“m=fun(s,t);”语句调用 fun

【答案】难度指数★★★

函数。

1 int i;

【解题思路】

2 *n=0;

(1)C语言中,语句应该以“;”结束,在第二个标识

3 for(i=1; i<=x; i++)

处,“p++”语句没有以“;”结束,因此第一个标识处应该

4 if((x%i==0)&&(i%2))pp[(*n)++]=i; 是“r++; p++;”。 【审题分析】 (2)根据审题分析,要判断指针 r是否指向串尾来结束 (1)功能是:求出能整除形参 x且不是偶数的各整数,

内循环,而判断语句应该是“if(*r=='\\0')”。

并按从小到大的顺序放在 pp所指的数组中。

【考点链接】指针操作。

它的解题思路,可以分解为以下几步:判断是否能整除

三、程序设计题 形参 x→判断是否是偶数→按从小到大的顺序存放到指定

的数组。 【答案】 难度指数★★ (2)从已给部分源程序的 main主函数开始入手,核心 函数“fun(x, aa, &n);”中的参数由题目可知,aa存放找到的 各整数,n为要求的整数的个数。

【解题思路】

进入 fun函数,根据前面的分析:

首先,初始化变量*n;定义 i,作为循环变量。

然后,每判断一次 i的值是否能整除形参 x,且 i不为 偶数,满足题干条件的话存储到 pp所指数组中,*n记录找

1 int i, j=0;

2 for(i=0; i

t[j++]=s[i]; 3 t[j]=0;

【审题分析】 该程序功能是将 s所指字符串中 ASCII值为偶数的字符 删除,串中剩余字符形成一个新串放存 t所指的数组中。解 题过程利用 if判断表达式选择 ASClI值为奇数的字符,然

22

后将符合条件的字符放入指定的字符串 s,这样就实现了函

数功能。

【解题思路】

(1)判断一个字符串中的某一字符 ASCII值是否为奇 数,可用“str[i]%2!=0”来判断。

(2)对串 s中各个字符逐个进行考查,ASCII值为奇数 的字符就顺序放在新串 t中,否则就不存放。

(3)所有字符处理完后,记得在新串 s的末尾加上结束 符“'\\0'”。

【考点链接】数组操作。

【解题思路】

(1)第一个标识下面的“IsPrime(int n);”在程序中 显然是一个函数,因此应将后面的分号去掉。

(2)第二个标识下面的 if语句后面缺少括号,因此, if !( n%i)应改为 if(!(n%i))。

该题主要考查标点符号、运算符、基本定义。 【考点链接】if条件语句;函数定义。

三、程序设计题

【答案】 难度指数★★★ 1 int i, max=a[0].s, j=0; 2 for(i=1; i5 max=a[i].s; 6 }

7 *s=a[j];

【审题分析】

该程序功能是求最高分数的学生。本题是关于求解结构 体中某些成员的最大值,首先将第一个值设定为最大值,并 在循环中将其他所有值与该值进行比较,求得最大值。然后 将最大值与所有值进行比较,求得所有的最大值。

【解题思路】

(1)首先指定第一个成绩为最高分数。

(2)再使用一个 for循环把所有的成绩进行比较,找出 最高的分数来。

【考点链接】数组操作;结构体。

第 86套试题答案及详解

一、程序填空题

【答案】 难度指数★★★

(1)std[i].year (2)std[i] (3)n 【审题分析】

fun函数的功能是在结构体数组 std中找出指定出生年 份的人员,将其数据放在形参 k所指的数组中。出生年份是 整型变量,可以直接比较。利用循环搜索整个 std数组,逐 个找到满足条件的 STU结构体。

【解题思路】 第一空:比较结构体的出生年份是否等于 year,std是 结构体指针,指向结构体数组的首地址,因此访问一个结构 体的 year成员是 std[i].year,因此第一空处应为 “if(std[i].year==year)”。

第二空:这里是将找到的数据放在形参 k所指的数组 中,k是指针变量,k指向结构体数组的首地址,std[i]是结 构体的地址,因此等号左边也应该是地址,故第二空处应为 “k[n++]=std[i];”。

第三空:fun函数的返回值是满足指定条件的人数 n, 故第三空处是“return (n);”。

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

第 87套试题答案及详解

一、程序填空题

【答案】难度指数★★★

(1)STU(2)score[i](3)&std 【审题分析】

fun函数的功能是将该学生的各科成绩都乘以一个系数 a,在 fun函数体内利用了循环对每科成绩都乘以系数 a。

【解题思路】

第一空:由“void modify(___1___ *ss,float a)”可知函 数的第一个参数是个指针,又函数必须完成结构体各科成绩 数据成员都乘以一个系数 a,因此传入的参数是结构体指针, 即第一空处应为“void modify(STU *ss,float a)”。

第二空:对结构体各科成绩数据成员都乘以一个系数 a, 因此第二空处应为“ss->score[i] *=a;”。

第三空:modify函数的第一个参数是指针,故调用该 函数时第一个参数应该是变量 std的地址“&std”。

【考点链接】结构体;指针。

二、程序修改题

【答案】 难度指数★★ (1)IsPrime(int n) (2)if(!(n%i)) 【审题分析】

(1)整数 n的素数因子为整除 n的所有素数,但不含 n 本身。

素数是只能被 1和本身整除的正整数(>1),所以判别 n是否为素数,只要用 2、3、…、n-1这些数逐个去除 n, 观察余数是否为 0即可,只要有一次相除余数为 0,n就不 是素数,否则 n为素数。

因此,求整数 n的素数因子,要从求整数 n的因子和判 断该因子是否为素数的两方面来看。

(2)从已给定源程序的 main主函数开始入手,核心部 分是循环判断 if((!(k%j))&&(IsPrime(j))),“!(k%j)”为判断 j 是否是 k的因子,IsPrime自定义函数的功能是判断 j是否 为素数,&&与逻辑是指当两个判断条件都为真的时候,j 即为 k的素因子。

二、程序修改题

【答案】 难度指数★★★

(1)if (k>0) (2)else if(k==0) 【审题分析】

本题中函数的功能是计算阶乘,其中,阶乘的计算公式

23

分为参数 k是 0和大于 0的两种情况,例如,0的阶乘 0! =1;5的阶乘 5!=5×4×3×2×1。

【解题思路】

(1)第一个标识下的 if语句的条件表达式,根据 C语 言的基本语法条件,表达式应该用括号括起来,所以将“if k>0”改为“if(k>0)”。

(2)第二个标识下“else if ( k=0 )”判断 k是否等于 0, 在 C语言中,“==”表示等于,而“=”表示赋值,故第二 个标识处应为“else if ( k==0 )”。

【考点链接】if条件语句。

二、程序修改题

【答案】难度指数★

(1)for(i=0,t=0; p[i]; i++) (2)c[t]='\\0'; 【审题分析】

本题中函数的功能是删除字符串 s中的所有空白字符。 首先在字符串 s中,确定空白字符,然后对其执行删除操作。

【解题思路】

(1)第一个标识下“For (i=0,t=0; p[i]; i++)”语句是 for 循环语句,而 For不是 C语言的关键字,所示“For (i=0,t=0; p[i]; i++)”应改为“for (i=0,t=0; p[i]; i++)”。

(2)第二个标识下的“c[t]=\”语句是在新生成的串 后面加尾符标志,在 C语言中规定使用单引号把一个字符 括起来作为字符常量,所以“c[t]=\”应改为“c[t]='\\0';”。

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

三、程序设计题

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

2 for(i=0; i

【审题分析】

该程序功能是使数组左下三角元素中的值乘以 n。本题 中首先要确定左下角半角元素的特点,然后对元素逐个进行

三、程序设计题

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

乘以 n的操作。其中,左下角的元素是行下标大于等于列下 2 for(i=1; i='a'&& ss[i]<='z')ss[i]-=32;

【解题思路】 4 }

( 1)左下半角的元素是行下标大于等于列下标,即 【审题分析】

该程序功能是将字符串中所有下标为奇数位置上的字 “i>=j”,包括对角线。

(2)依次访问二维数组,把符合条件的元素的值乘以 n。 母转换为大写。其中,同一英文字母的大写和小写的 ASCII 【考点链接】二维数组。 码值相差 32,因此,要将小写字母转换为大写字母,只要

将其对应的 ASCII码值减去 32即可。

【解题思路】 第 88套试题答案及详解

(1)首先取得字符串中下标为奇数的字符。 (2)判断奇数位置的字符是否为小写字母。 一、程序填空题

(3)若(2)中的判断结果是小写字母,则对其进行

【答案】 难度指数★★★ 转换。 (1)0或 NULL (2)n (3)head,ch 【考点链接】数组操作;指针操作。 【审题分析】

函数 fun的功能是查找数据域中值为 ch的结点,在实 第 89套试题答案及详解 现方式上可采用循环来搜索链表当中的每一个结点,比较结 点的数据域是否等于 ch。

【解题思路】

第一空:这里是补充循环结束条件,链表是单向有限的, 最后一个结点的指针域指向 NULL,因此可以用这个来作为 循环结束条件,在 p指向的结点的指针域不是 NULL时表明 还有下一个结点,因此第一空处应该是“while(p!=NULL)”。 第二空:在循环当中 n用来记录顺序号,如果“ if (p->data==ch)”成立,则已经找到数据域中值为 ch的结点, 返回顺序号,即“return n;”。

第三空:fun函数的调用形式是:fun( SLIST *h, char ch),第一个参数是头结点地址,第二个参数是需要寻找的 ch值,因此第三空处应该是“k=fun(head,ch);”。

【考点链接】链表;指针。

一、程序填空题

【答案】

(1)t[][N] 【审题分析】

难度指数★★★ (2)i=0;i

(3)s

函数 fun的功能是将 N×N矩阵主对角线元素中的值与 反向对角线对应位置上元素中的值进行交换,在 N×N的矩 阵 t中,i标识行下标,对角线元素为 t[i][i],反向对角元素 为 t[i][N-i-1]。

【解题思路】

第一空:在主函数中 fun函数的调用形式是“fun(t,N);”, t是二维数组名,故 fun函数的第一个参数为指针,因此第 一空处应为“t[][N]”。

第二空:fun函数的第二个参数 n指明了矩阵的大小为 n,对角线元素与反向对角线元素有 n个,故循环有 n次, 因此变量 i从 0开始,到 n-1结束,因此第一空处应为

24

“i=0;i

第三空:循环体内部是对角线元素与反向对角线元素的 交换,“ s=t[i][i];”s保存了对角元素 t[i][i],因此第三处应填 “s”。

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

二、程序修改题

【答案】 难度指数★★★ (1)int fun(int a[],int m) (2)else if(m>a[mid]) 【审题分析】

(1)该题中函数功能是利用折半查找算法查找整数 m 在数组中的位置。其中,折半查找法是在有序数组中进行的, 过程是先将待找的数和数组中间的元素进行比较,若待找的 数大于数组中间元素的值,就在数组的后一半继续查找,若 待找的数小于数组中间的值,就在数组的前一半继续查找, 然后在取新区间的中间元素进行比较,不断重复以上过程, 直到找到待找的元素为止。

(2)从已给定源程序的 main主函数开始入手,从键盘 输入获得要查找的值 m“scanf(\”,调用函数 fun 来实现折半查找。

【解题思路】

(1)根据主函数中“k=fun(a,m);”,知道函数 fun应该 是返回 int型的函数,所以第一个标识下面定义的“void fun(int a[],int m)”应该改为“int fun(int a[],int m)”。

(2)第二个标识下的“else If(m > a[mid])”是判断 m是 否比 a[mid]大,在 while循环中采用的是 if-else if-else语句, 显然“else If”当中“If”应当小写,故第二标识下“else If(m > a[mid])”应改为“else if(m>a[mid])”。

【考点链接】函数定义;折半查找。

删除后,将尾部的“*”字符往前移动即可。

(3)确定了字符数组的最后一个字符非“*”后,调用 fun函数,在 fun函数中,将原串中由起始位置的字符开始 到最后一个非“*”逐个查询该字符是否是“*”字符,如果

是则删除,并将后面的字符往前移动;然后将 t之后的字符 移动到前面,最后在字符串的后面添加“'\\0'”即可。

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

第 90套试题答案及详解

一、程序填空题

【答案】 难度指数★★★ (1)data (2)next(3)head 【审题分析】

函数 fun的功能是计算出链表中各结点数据域中值之 和,由于链表单向,利用循环从头结点开始搜索直到最后 一个结点,每找到一个结点就把结点的数据域上的数据累 加起来。

【解题思路】 第一空:循环“while(p)”遍历整个链表,在循环体中, s是累加变量,每个结点的数据域上的数据都累加在 s上, 因此第一空处应为“s+=p->data;”。

第二空:p是循环变量,p不断指向下一个结点,故第 二空处应为“p=p->next;”。

第三空:fun函数的声明为:int fun( SLIST *h),参数是 SLIST结构体指针,表示头结点地址,因此第三空处的函数 调用应为“printf(\”。

【考点链接】链表;指针。

二、程序修改题

【答案】难度指数★★★

(1)while(*r) (2)*a=*r; a++; r++; 【审题分析】

该程序功能是将字符串中的某个子串全部替换成某个 子串。从已给定源程序的 main主函数开始入手,语句“fun( s, t1, t2, w);”调用 fun函数,通过 while循环首先比较两个子 串是否相同,然后进行替换,实现题目要求。

【解题思路】 (1)函数通过 while语句比较 r所指字符串是否和 p所 指的子串相同,若有相同,会一直循环到*r是'\\0'才退出循 环。所以第二个标识下的“while(r)”改为“while(*r)”。

(2)C语言中,语句应该以“;”结束,在第二个标识 处,“r++”语句没有以“;”结束,因此第二个标识处应该 是“*a=*r; a++; r++;”。

【考点链接】函数逻辑;指针操作。

三、程序设计题

【答案】 难度指数★★★ 1 char *q=a; 2 int j=0;

3 while(*q&&q

4 if(*q !='*')a[j++]=*q; 5 q++; 6 }

7 while(*p)a[j++]=*p++; 8 a[j]='\\0';

【审题分析】

该程序功能是除了尾部的*号之外,将字符串中其他“*” 号全部删除。其中,实现删除指定元素的功能,一般是使用 循环语句,通过指针变量在字符串中前后的移动,判断其是 否为要删除的元素。若是,则进行相应的操作。还要注意的 是,删除字符后,要将其后的字符依次移动。

【解题思路】 (1)首先,主函数中使指针移到字符串的最后一个字符, 对字符串由串尾开始进行操作。

(2)然后,指针由尾开始向头移动,查找第一个非“*” 号字符,指针 t指向后一个非“*”,即从最后一个非“*”, 字符开始的字符都不需要删除,将前面的其他“*”号全部

三、程序设计题

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

2 for(i=1; i

25


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

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

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

马上注册会员

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