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;i3a->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;i3//小于字符串长度进行字符循环判断
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)该题中函数功能是二分法求方程根。
其中,二分法
的求根过程,是将含根区间平均分为两个小区间,然后判断
哪个区间是含根区间。
在此基础上,将这里的小含根区间进
一步划分为两个更小的区间