C语言51100套试题答案及详解.docx

上传人:b****6 文档编号:4295696 上传时间:2022-11-29 格式:DOCX 页数:161 大小:219.49KB
下载 相关 举报
C语言51100套试题答案及详解.docx_第1页
第1页 / 共161页
C语言51100套试题答案及详解.docx_第2页
第2页 / 共161页
C语言51100套试题答案及详解.docx_第3页
第3页 / 共161页
C语言51100套试题答案及详解.docx_第4页
第4页 / 共161页
C语言51100套试题答案及详解.docx_第5页
第5页 / 共161页
点击查看更多>>
下载资源
资源描述

C语言51100套试题答案及详解.docx

《C语言51100套试题答案及详解.docx》由会员分享,可在线阅读,更多相关《C语言51100套试题答案及详解.docx(161页珍藏版)》请在冰豆网上搜索。

C语言51100套试题答案及详解.docx

C语言51100套试题答案及详解

 

2

 

doubleave=0.0;

第51套试题答案及详解

一、程序填空题

3

4

5

6

*n=0;

for(i=0;i

ave/=N;/*计算平均值*/

for(i=0;i

【答案】

难度指数★★★

7

if(a[i].s

(1)*a

(2)2

(3)i+1

记录存放到b所指的数组中*/

【审题分析】

本题中函数的功能是将数组中的元素下标为偶数的元

素按照从大到小排序,下标为奇数的元素按照从小到大排

序,相当于2个排序过程。

在fun函数中,采用选择排序

法进行排序,分别用max和min存储每次寻找的最大值和

最小值,px和pn记录每次查找到的最大值和最小值的下

标位置。

【解题思路】

第一空:

主函数内fun函数的调用“fun(b,N);”,其中b

为整型数组名,故fun函数的第一参数为整型指针,又根据

“max=a[j]”可知第一个参数名为a,故第一空处为“*a”。

第二空:

根据题意a所指数组中的最大值放在a[0]中,

接着求出a所指数组中的最小值放在a[1]中;再把a所指数

组元素中的次大值放在a[2]中,把a数组元素中的次小值放

在a[3]中,升序排序和降序排序的下标变化是每次在前一次

的基础上+2,即a[0]、a[2]、a[4]…降序排序,a[1]、a[3]、

8b[*n]=a[i];

9(*n)++;/*人数加1*/

10}

11returnave;/*返回平均值*/

【审题分析】

该程序功能是把低于平均分的学生数据放在b所指的

数组中,低于平均分的学生人数通过形参n传回,平均分通

过函数值返回。

【解题思路】

(1)首先,通过循环求总分,然后求得平均分。

(2)在循环中,进行平均分与每个成绩进行比较,并将

满足条件的数据存入数组及对其进行累加。

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

第52套试题答案及详解

一、程序填空题

a[5]…升序排序,故第二空应为“2”。

【答案】

难度指数★★★

第三空:

选择排序法中的升序排序,首先从数组中挑选

(1)n/2

(2)i

(3)a[n-i-1]

一个最小的元素,把它和第一元素交换,接着从剩下的n-1

个元素中再挑出一个最小的元素,把它和第二个元素交换,

不断重复以上过程,直到比较完最后两个元素。

故内层循环

变量j应该从i+1开始,因此第三空处应为“i+1”。

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

二、程序修改题

【审题分析】

本题中函数fun的功能是将数组中的元素倒置,即第一

个元素和最后一个元素交换,第二个元素和倒数第二个元素

交换,依此类推,总共交换n/2次,n为数组的长度。

【解题思路】

第一空:

由审题分析可知,总共交换n/2次,故循环的

终止条件为i等于n/2,故第一空处应为“n/2”。

【答案】

难度指数★

第二空:

a[0]和a[n-1]交换,a[1]和a[n-2]交换…,因此

(1)sum=0.0;

(2)if((i+1)%5==0)

【审题分析】

本题函数的功能是对每五个元素求一个平均值。

首先要

依顺序读取每五个元素,并对这五个元素取平均值。

【解题思路】

a[i]和a[n-i-1]交换,故第二空处应为“i”。

第三空:

“t=a[i];a[i]=a[n-1-i];”所以第三空处是把t值

赋值a[n-1-i],故第三空处应为“a[n-1-i]”。

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

二、程序修改题

(1)在第一标识下“sun=0.0;”,根据题意,这是给sum

赋值,而sun没有定义编译时会提示错误,应改为

【答案】

(1)n=*p-'0';

难度指数★

(2)n=n*8+*p-'0';

“sum=0.0;”。

(2)错误标识下的if判断语句是依顺序取五个字符,if

中的逻辑表达式语法有误,由于1%5恒等于1,所以i+1%5

也就等价于i+1了,所以将“if(i+1%5==0)”改为“if((i+1)%5==

0)”,此处主要注意的是运算符的优先级。

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

三、程序设计题

【审题分析】

(1)该题中函数功能是实现八进制到十进制的转换。

中,八进制与十进制之间的转换关系是:

八进制就是逢8

进1。

八进制数采用0~7这8个数来表达一个数。

八进制

数第1位的权值为8的0次方,第2位权值为8的1次方,

第3位权值为8的2次方,等等。

(2)从已给定源程序的main主函数开始入手,首先通

过if语句判断串是否过长,是否符合题干要求;然后循环

【答案】

1inti;

难度指数★★★

判断串中的每一位是否都在0~7之间,是否符合八进制要

求,最后调用fun(s)实现八进制到十进制的转换。

1

 

【解题思路】

(1)第一个标识下面:

语句“n=*p-'o';”中的'o'不是数

字零,而是字母'o',根据前面的分析因此改为:

“n=*p-'0';”。

(2)第二个标识下面:

语句“n=n*8+*P-'o'”,首先进行

(1)相同的修改,变量P没有定义,根据题意要求这里

 

因此第二空处为“k”。

第三空:

此处是将字符串长度不超过k的字符串ss[i]

拷贝到ss[j++]中,故第三空处为“ss[i]”。

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

二、程序修改题

应该是“*p-'0'”,所以此句改为:

“n=n*8+*p-'0';”。

【考点链接】字符;数制。

【答案】

(1)intk=0;

难度指数★★★

(2)while(*p||*q)

三、程序设计题

【答案】难度指数★★

1STRECc;

2inti;

3c.num[0]='\0';/*置初始空串*/

4c.s=-1;/*置成绩为-1*/

5for(i=0;i

6if(strcmp(a[i].num,b)==0){/*判

断学号是否相等*/

7strcpy(c.num,a[i].num);/*相

等,则对学号进行赋值*/

8c.s=a[i].s;/*相等,则对成绩进行

赋值*/

9break;/*退出循环体*/

10}

11returnc;/*返回结构体变量*/

【审题分析】

该程序功能是逐个比较两数组对应字符的ASCII值大

小。

从已给定源程序的main主函数开始入手,调用函数

“fun(a,b,c);”,对字符串a、b进行比较,生成字符串c。

【解题思路】

(1)第一个标识下面的“intk=1;”在题目中要求将字

符放在数组c,如果数组中有n个元素,应该从c[0]到c[n-1]。

所以,应将k的初始化定义改为从0开始,即“intk=0;”。

(2)第二个标识下面的判断条件,是根据题目要求逐个

比较两个数组对应字符的ASCII值的大小,所以判断条件

应该是直到两个字符数组所有元素比较完毕,而不是数组对

应元素不相等。

其中,该题主要考查变量的初始化,逻辑关系。

【考点链接】函数逻辑。

三、程序设计题

【审题分析】

【答案】

难度指数★★★

该程序功能是函数返回指定学号的学生数据,指定的学

号在主函数中输入。

解题思路是在循环过程中,使用if判

断表达式,将输入的学号与所有的学号进行比较,如果找到

该学号,将其赋值到指定变量,否则将空格赋值到指定变量,

表明没有查找到该学号。

【解题思路】

在for循环中,利用C语言自带字符串比较函数strcmp,

对输入的学号与所有的学号进行比较,以求出指定学号。

【考点链接】结构体;函数传值。

第53套试题答案及详解

一、程序填空题

1inti=0;

2char*p=a;

3while(*p&&*p=='*')

4{

5a[i]=*p;

6i++;

7p++;

8}

9while(*p)

10{

11if(*p!

='*')

12{

13a[i]=*p;

14i++;

15}

【答案】

难度指数★★★

16p++;

(1)N

(2)k

(3)ss[i]

17}

【审题分析】

本题中函数fun的功能是在形参ss所指字符串数组中,

删除所有串长超过k的字符串,函数返回所剩字符串的个

数。

【解题思路】

第一空:

for(i=0;i<__1__;i++)”补充循环的结束条件,

fun的参数(*ss)[M]是指向N行M列的字符串数组,循环是

逐行查找字符串的长度是否超过k,因此循环次数是N次,

故第一空处应为“N”。

第二空:

if(len<=__2__)strcpy(ss[j++],__3__);”可知在

循环当中是将长度没有超过k的字符串保存在ss所指的字

符串数组的前面,j记录满足长度不超过k的字符的个数,

2

18a[i]='\0';

【审题分析】

该程序功能是除了字符串前导的“*”号之外,将串中

其他“*”号全部删除。

本题的解题过程首先确定由串起始

位置开始的第一个非“*”位置,然后对由第一个非“*”开

始的字符到串尾的字符进行判断,如果不是“*”的字符拷

贝到字符串。

【解题思路】

(1)首先,使用一个指针p指向串的起始位置,然后对

指针p指向的字符进行判断,并且如果是“*”,将其拷贝到

字符串,这样确定了由头开始的第一个非“*”的位置。

(2)然后,在循环过程中对由第一个非“*”字符起始

 

到串尾的字符进行判断,如果不是“*”就将其拷贝到字符

串a,否则跳过。

(3)最后,在新生成的字符串尾加'\0'。

【考点链接】指针操作。

第54套试题答案及详解

一、程序填空题

 

5p++;

6}

7a[j]='\0';

【审题分析】

该程序功能是删除字符串中所有的*号。

解题思路是在

while循环过程中,利用if判断表达式判断每一个字符是否

为“*”号,如果不是将其拷贝到字符串,否则跳过,这样

就实现了函数功能。

【解题思路】

【答案】

难度指数★★★

(1)首先利用工作指针指向字符串,当指针不指向串尾

(1)1

(2)j++

(3)j

时,就对字符串进行循环判断。

【审题分析】

函数fun的功能是把形参a所指数组中的奇数按原顺序

依次存放到a中,把偶数从数组中删除,奇数和偶数的判断

可用取余的方法来实现,a[i]%2等于0那么a[i]是偶数,否

则是奇数。

【解题思路】

第一空:

根据“a[j]=a[i];”可知,a[i]是奇数,变量j记

录奇数的个数,故第一空处是判断a[i]是否是奇数,故第一

空处应为“1”。

第二空:

变量j记录奇数的个数,故第二空处j计数应

当加1,因此第二空处应为“j++”或“j=j+1”。

第三空:

fun函数的返回值是奇数个数,故第三空处应

为“j”。

【考点链接】函数逻辑。

二、程序修改题

【答案】难度指数★★★

(1)t=a;a=b;b=t;

(2)return(b);

【审题分析】

(1)本题中函数的功能是求出两个非零正整数的最大公

约数。

其中,最大公约数是指能最大约去给出的几个数字的

数字,例如15和30能最大约去的数字是15,所以15就是

它们的最大公约数。

(2)从源程序的main主函数开始入手,通过键盘输入

两个正整数,语句“a=fun(num1,num2);”调用fun函数求得

它们的最大公约数。

【解题思路】

(1)根据算法分析,首先要确保a、b两个数中a是较

大数,b是较小数,如果不是,则交换a和b。

但是第一个

标识下,交换a和b两个数的算法有误,所以应将“t=a;b=a;

a=t;”改为“t=a;a=b;b=t;”。

(2)算法到循环结束,最后余数为0的时候,b中所存

的数即为最大公约数,也就是函数要返回的值。

因此,第二

个标识下面的“return(a);”改为“return(b);”。

【考点链接】函数实现的逻辑关系。

三、程序设计题

【答案】难度指数★★★

1intj=0;

2char*p=a;

3while(*p){

4if(*p!

='*')a[j++]=*p;

(2)在循环中利用if判断表达式,判断是字符是否为

“*”,如果不是“*”将其拷贝到字符串,否则跳过“*”

字符。

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

符“'\0'”。

【考点链接】指针操作。

第55套试题答案及详解

一、程序填空题

【答案】难度指数★★★

(1)j=3

(2)i(3)j

【审题分析】

函数fun的功能是统计所有小于等于n(n>2)的素数的个

数,素数的个数作为函数值返回,判断一个整数n是否是素

数。

素数是指能被1和本身整除的正整数(>1),所以判别

n是否为素数,只要用2、3、…、n-1这些数逐个去除n,

观察余数是否为0即可,只要有一次相除余数为0,n就不

是素数,否则n为素数。

【解题思路】

第一空:

n>2,由“printf("\nTheprimenumberbetween3

to%d\n",n);”可知,从3开始寻找素数,故第一空处应为

“j=3”。

第二空:

由审题分析可知,判断i是否是素数用2、3、…、

i-1这些数逐个去除i即可,故第二空处应为“i”。

第三空:

由“count++;printf(count%15?

"%5d":

"\n%5d",

i);”可知找到一个素数i了,在i是素数的时候,变量j从2

到i-1都不能被i整除,退出for循环的是j的值已经变成i

了,故判断j是否大于等于i便可知i是不是素数,所以第

三空应为“j”。

【考点链接】函数功能。

二、程序修改题

【答案】难度指数★★

(1)sum=0;j=0;

(2)if(sum%4==2)

【审题分析】

本题中函数的功能是计算前n(4

在累加过程中把那些被4除后余2的当前累加值放入数组

中,符合此条件的累加值的个数作为函数值返回主函数。

【解题思路】

(1)根据题意第一标识下“sum=j==0;”是给sum和j

3

 

赋初值0,故应改成“sum=0;j=0;”。

(2)第二个标识下的if语句是根据题干要求,累加和

被4除后余2,而原题是将2赋值给sum%4。

所以,第二个

标识下“if(sum%4=2)”应该改为“if(sum%4==2)”。

【考点链接】变量初始化;if条件语句;逻辑表达式。

三、程序设计题

【答案】难度指数★★

1inti;

2doublesum=0.0;

3if(n>1&&n<=100){

4for(i=1;i<=n;i++)

5sum+=1.0/(2*i-1)-1.0/(2*i);

6}

7returnsum;

【审题分析】

该程序功能是计算并输出多项式值。

根据题干中给出的

数列,首先推出每一项的表达式,然后再对多项式进行累加

求和。

【解题思路】

(1)根据题干中给出的数列,推出每一项是(1.0/(2*i-

1)-1.0/(2*i))。

(2)在循环中求得每一项,然后对其进行累加求和。

【考点链接】逻辑关系;运算符。

第56套试题答案及详解

一、程序填空题

 

【审题分析】

本题中函数的功能是用递归算法计算斐波拉契级数数

列中第n项的值。

本题主要是对于switch-case语法的介绍。

【解题思路】

(1)第一个标识下的switch后用括号括起来的表达式

的标准语法后面是没有“;”的,所以“switch(g);”应该改

为“switch(g)”。

(2)第二个标识下的case加常量表达式的后面用冒号

连接选择语句,所以“case1;”改为“case1:

”。

“case1:

和“case2:

”都是返回1,应该写两个“return1”。

【考点链接】switch分支语句。

三、程序设计题

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

1inti;

2for(i=0;i

3a->ave=a->ave+a->s[i];

4a->ave/=N;

【审题分析】

该程序功能是计算结构体中某一成员的平均值。

这类题

主要考查是对结构体的操作,关于平均分数的求解过程首先

统计成员的总分,然后计算平均分。

【解题思路】

(1)本题中给出的题干中定义了结构体变量STREC用

来存储学生的记录。

(2)利用for循环求得总分,然后求得平均分,最后将

平均分放入记录ave中。

其中,结构体成员的引用形式可以

为a.ave、a.s[i]等。

【答案】

难度指数★★★

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

(1)a[i]

【审题分析】

(2)a[j]

(3)a[j]

第57套试题答案及详解

本题中函数的功能是将数组中的元素下标位置为偶数

的元素按照从小到大排序,下标为奇数位置的元素按照从大

一、程序填空题

到小排序,相当于2个排序过程。

在fun函数中,采用选择

【答案】

难度指数★★★

排序法进行排序,分别用max和min存储每次寻找的最大

(1)filename

(2)fp

(3)fp

值和最小值,px和pn记录每次查找到的最大值和最小值的

下标位置。

【解题思路】

第一空:

根据“max=min=___1___;px=pn=i;”可知,

px和pn初始化为i,max和min初始化为a[i],假定第一个

元素为最大值、最小值,然后逐个和其他的元素比较找出最

大值和最小值,因此第一空应为“a[i]”。

第二空:

根据“max=a[j];px=j;”可知,max保存了a[j]

的值,说明max比元素a[j]小,故第二空处应为“a[j]”。

第三空:

根据“min=a[j];pn=j;”可知,min保存了a[j]

的值,说明min比元素a[j]大,故第三空处应为“a[j]”。

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

二、程序修改题

【审题分析】

本题中函数fun的功能是重写形参filename所指文件中

最后一个学生的数据,即用新的学生数据覆盖该学生原来的

数据,本题主要考察文件的读写。

【解题思路】

第一空:

“fp=fopen(__1__,"rb+");”补充fopen的参数,

fopen的调用形式是:

fp=fopen(文件名,文件使用方式),因

此第一空处应填文件名“filename”。

第二空:

此处是补充fseek函数的参数,fseek的调用形

式是:

fseek(fp,offset,position),其中第一个参数是文件型指

针,故第二空处应填文件型指针变量“fp”。

第三空:

fwrite的调用形式是(buffer,size,count,fp),最后

一个参数是文件型指针,故第三空处应填“fp”,将新的学

【答案】

难度指数★★

生数据写在最后一个学生数据位置。

(1)switch(g)

(2)case1:

return1;case2:

return1;

 

4

【考点链接】结构图;文件操作。

 

二、程序修改题

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

(1)p=(NODE*)malloc(sizeof(NODE));

(2)returnh;

【审题分析】

该题中函数功能是创建带头结点的单向链表。

从已给定

源程序的main主函数开始入手,首先通过“head=

Creatlink(8,22);”语句调用Creatlink函数生成单向链表,然

后“outlink(head);”输出该链表。

【解题思路】

(1)第一标识下“p=(NODE)malloc(sizeof(NODE));”,

 

【解题思路】

第一空:

由“returnsum;”可知sum变量记录了主对角

线元素和反向对角线元素之和,第一空处是在使用sum变

量之前对其初始化,因此第一空处应为“sum=0;”

第二空:

由第二个循环内“sum+=t[i][n-i-___3___];”可

知,第一个循环是主对角元素和,第二个循环求反向对角线

元素之和,因此第二空处应为“t[i][i]”。

第三空:

第二个循环求反向对角线元素之和,反向对角

元素为t[i][n-i-1],故第三空应为“1”。

【考点链接】数组;逻辑关系。

二、程序修改题

maclloc函数的返回类型是void*类型,表示未确定类型的指

针,因此需要指针类型转换,而“(NODE)”不是指针类型,

【答案】

(1)doubler;

难度指数★★

故第一标识下应改成“p=(NODE*)malloc(sizeof(NODE));”。

(2)第二个标识下,最后将单链表返回,应该是返回头

指针h指向的链表,而不是其中的一个节点p,所以“return

p;”应该改为“returnh;”。

【考点链接】函数功能。

三、程序设计题

【答案】难度指数★

1inti,n=0;//字符统计初始值设置为0

2for(i=0;i

3//小于字符串长度进行字符循环判断

4{

5if(s[i]>='a'&&s[i]<='z'&&s[i+1]

==''||s[i+1]=='\0')//单词判断条件

6n++;//单词统计计数器加1

7}

8returnn;//返回统计值

【审题分析】

该程序功能是统计一行字符串中单词的个数,作为函数

值返回。

单词之间以空格为分割,所以对单词个数的统计可

以理解为对空格字符的统计,其中最后一个单词以字符串的

结尾符为分割。

【解题思路】

(2)while(fabs(n-m)>0.001)

【审题分析】

(1)该题中函数功能是二分法求方程根。

其中,二分法

的求根过程,是将含根区间平均分为两个小区间,然后判断

哪个区间是含根区间。

在此基础上,将这里的小含根区间进

一步划分为两个更小的区间

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1