文档库 最新最全的文档下载
当前位置:文档库 › C语言答案

C语言答案


1. 给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。……
本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
第一处:结构定义自变量,因此应填写STYPE。
第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp已经给出,这样,此处只能填写FILE。
每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以只能填写文件流变量fp。
2. 给定程序MODII1.C中函数fun的功能是:现将在字符串s中的字符按正序存放到t串中,然后把……解题思路:
第一处:变量sl错写成了s1.
第二处:新串t的字符串结束位置不正确,应该是两倍的sl距离。
3.a,b合并放到c,a=45,b=12,c=4152 解题思路:
本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
取a十位数字的方法:a/10
取a个位数字的方法:a%10
参考答案:
#include
void fun(int a, int b, long *c)
{ *c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10); }
第 二 套
1.给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中…… 解题思路:
本题要求是把键盘上输入的内容写到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
第一处:要求填写文件流的自变量名,在这个函数中,已有的语句fputs("\n",fw);分析可知:由于文件流变量fw在函数体没有定义过,所以本处应填*fw或fw[]。
第二处:通过while循环语句,把键盘上输入的内容,要写入到指定的文件中,键盘上输入的内容已存入字符串str变量中,因此,本处应填写str。
第三处:要把已存入文件中的内容,再从文件中读出且已存入字符串变量str中,最后在屏幕显示出来,因此,此处应填写str。
2..给定程序MODII1.C中函数fun的功能是:从低位开始取出长整形变量s中奇数位上的数,依次构成一个新数放在t中。…… 解题思路:
第一处:在函数fun中使用了*t,但在函数定义时没有使用*t,所以应改为:void fun(long s,long *t)。
第二处:每循环一次,sl的值就乘以10,所以应改为:sl=sl*10;。
3. a,b合并放到c,a=45,b=12,c=1524解题思路:
本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
取a十位数字的方法:a/10
取a个位数字的方法:a%10
参考答案:
#include
void fun(int a, int b, long *c)
{ *c=(b/10)*1000+(a%10)*100+(b%10)*10+(a

/10);}
第 三 套
1. 给定程序中函数fun的功能是:将自然数1~10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再……解题思路:
本题要求所求出的数写入到指定的文件中保存。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
第一处:int fprintf(FILE *stream, const char *format [,argument, …]); 因此本处只能填写文件流的变量fp。
第二处:由于文件打开写操作,所以必须要关闭,因此,只能填写关闭文件的函数fclose(fp)。
第三处:由于本题要把刚写入文件中的数据重新显示出来,读方式已经给出,但没有给出文件名,所以本处只能写文件名变量fname或者直接给出文件名"myfile3.dat"。
2. .给定程序MODII1.C中fun函数的功能是:将n个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。解题思路:
第一处:for循环的终止值应该第二处:使用临时变量p来保存最小值位置i,所以应改为:p=i;。
3.a,b合并放到c,a=45,b=12,c=2514 解题思路:
本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
取a十位数字的方法:a/10
取a个位数字的方法:a%10
参考答案:
#include
void fun(int a, int b, long *c)
{ *c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10);}
2009版上机模拟系统参考答案(有效期至2009年9月20日)
声明: 本资料内部使用不得做其他商业用途,否则追究法律责任,后果自负!
第 四套
1. 给定程序中函数的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中……复制成功时函数返回值为1,失败时返回值为0。在复制过程中……解题思路:
本题要求是把一个文件中的内容复制到另一个文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
第一处:要求打开一个读方式的源文件,因此可以填上"r"或"r+"。打开读文件操作的流是fs。
第二处:用while循环来判断源文件是否已读到文件结束符,int feof(FILE *stream),因此,此处只能填写fs。
第三处:把已经读取的字符写入目标文件中,打开写文件操作的流是ft,因此,此处只能填写ft。
2. 给定程序MODII1.C中函数fun的功能是:将长整形数中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍为高位,……
解题思路:解题思路:
第一处:判断相等的条件是==。
第二处:整除的符号是/。
3. a,b合并放到c,a=45,b=12,c=2514解题思路:
本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
取a十位数字的方法

:a/10
取a个位数字的方法:a%10
参考答案:
#include
void fun(int a, int b, long *c)
{ *c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);}
第 五 套
1. 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个……解题思路:
本题是要求在一个有序的链表中插入一个数,插入后各结点仍然是有序的。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
第一处:在函数fun的开始处,已经对结构指针s分配了内存,其中data是一个整型变量,实际要求填入一个整型数据。根据本题要求在一个链表插入一个整型数,该数已通过函数的形参x传入,因此应填x。
第二处:使用一个while循环找出要插入一个数的位置,在循环体中q实际上保留当前链表p位置的临时变量,如果x>p->data时,那么再移动链表指针到下一个结果,再进行判断是否符合条件,如果仍大于,则仍q保留链表p的位置。因此,此处应填p。
第三处:当找到结点位置后,就要插入这个数,完成插入过程。由于函数体中分配了结构指针s,s的next指针已经指向了p,所以,当前位置q的next指针就应该指向指针s完成链表的链接。因此,此处应填s。
2. 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个……解题思路:
第一处:由于在k定义时没有赋初值,所以k是一个随机数,根据试题要求,k应赋值为1。
第二处:整除的符号是/。
3. 求平均分,5门,函数的值为71.80解题思路:
本题是使用循环来计算平均值且结果由函数值返回。
参考答案:
#include
float fun ( float *a , int n )
{ int i;
float ave=0.0;
for(i=0; iave=ave/n;
return ave;
}
第 六 套
1. 给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据解题思路:
本题是对已经建立的链表,通过调用一次函数就输出链表尾部的数据。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
第一处:由于本题要求输出链表尾部的数据,函数是利用while循环语句找出链表尾部的指针并存入临时变量s中,那么每循环一次就要判断链表是否已结束位置,如果是,则退出循环,进行输出,由于是通过t指针变量进行操作的,因此,都要取t的next指针重新赋给t来实现,所以本处应填next。
第二处:输出最后一个结点的数据,所以应填t->data或(

*t).data。
第三处:输出出最后一个结点数据后,并把此结点删除了,程序要求释放内存,所以应填t。
2. 给定程序MODII1.C中函数fun的功能是:将数据串中的字符按逆序输出,但不改变字符串中的内容。解题思路:
第一处:形参a应定义为字符串指针。
第二处:语句中缺少逗号。
3.比较两个字符串的长度,返回较长的字符串,若长度相同返回第一个,beijing shanghai 解题思路:
本题是比较两个字符串的长度并按要求返回字符串。
我们给出的程序是使用for循环来判断两个字符串中哪一个比较长或相等,循环的终止值为两个字符串中是否字符串结束符,如果有,则退出循环体。接下来再判断两个字符串是否同时出现结束符,则返回第一个字符串s,如果不没有同时出现,则判断哪一个字符串先有结束符,则按要求返回指定的字符串。
参考答案:
#include
char *fun ( char *s, char *t)
{ int i;
char *p=s, *q=t;
for(i=0;*p && *q; i++) {
p++; q++;
}
if(*p == 0 && *q == 0) return s ;
if(*p) return s ;
else return t ;
}
第 七 套
1. 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。解题思路:
本题是考察考生对链表的操作,主要是解决删除链表中数据域值相同的结点。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
函数fun中使用两个临时结构指针变量p和q对链表进行操作。首先p指向链表开始的next指针,q指向p的next指针,再利用while循环语句来判断指针q是否NULL,如果q指针是指向NULL,那么函数结束返回。如果不是NULL,那么就要判断p和q中data值是否相同,如果值相同,则要删除该结点,然后继续判断下一结点值是相同,如果还相同,那么继续删除结点,直至不相同为止。如果两个结点的值不相同,那么p就指向q,q指向q的next指针再继续操作上述过程。
删除结点的方法是:先将p的next指针指向q的next指针,再释放q指针指向的内存,最后把q指针再指向p的next指针就可以删除一个链表中的结点了。
第一处:释放q指针所指的内存空间,应填q。
第二处:q指针指向p的next指针,重新完成链接,应填next。
第三处:两个结点的值不相同,那么q就指向q的next指针,应填next。
2.给定程序MODII1.C中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。 解题思路:
第一处:语句后缺少分号。
第二处:保存最小值的位置,所以应改为:p = i;。
3.比较两个字符串的长度,返回较

长的字符串,若长度相同返回第一个,beijing shanghai 解题思路:
本题是考察考生对某个数能被其他的数整除方式,并把符合条件的数存放在数组a中。
我们给出的程序是使用for循环语句以及取模的方式来解决这个问题的。
参考答案:
#include
#define M 100
void fun ( int m, int *a , int *n )
{ int i ;
*n=0 ;
for(i=7 ; i<=m; i++)
if((i % 7 == 0) || (i % 11 == 0)) a[(*n)++]=i ;
}
第 八 套
1. 给定程序中函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点 。找到后找到后通过函数值返回该结点在链表中所处的顺序号……函数返回0值。解题思路:
本题是在给定的链表中要求找出指定的值。
第一处:判断p是否结束,所以应填:NULL。
第二处:在函数fun中,使用n来计算结点的位置,当找到ch值,则返回结点的位置n,所以应填:return n。
第三处:函数调用,在主函数中已经给出了head和ch,所以应填:head,ch。
2. 给定程序MODII1.C中函数fun的功能是:删除p所指字符串中的所有空白字符(包括制表符、回车符及换行符)。解题思路:解题思路:
第一处:保留字for错写成For。
第二处:置字符串结束符错误,应该是:'\0'。
3. 比较两个字符串的长度,返回较长的字符串,若长度相同返回第一个,beijing shanghai解题思路:
本题是考察考生对字母按要求进行转换。其中大小字母的ASCII值相差32。
参考答案:
#include
#include
void fun ( char *ss )
{ int i ;
for(i = 1 ; i < strlen(*ss) ; i+=2) {
if(ss[i] >= 'a' && ss[i] <= 'z') ss[i] -= 32 ;
}
}
第 九 套
1. .给定程序中函数fun的功能是:统计带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。解题思路:
本题是要求统计出带有头结点的单向链表中结点的个数。
第一处:对n所指的存储单元进行初始化,所以应填:*n。
第二处:指向p的下一个结点,所以应填:next。
第三处:函数调用,在主函数中已经给出了head,所以应填:head。
2. 给定程序MODII1.C中函数fun的功能是:求出s所指字符串中最后一次出现的所指字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串…解题思路:
第一处:指向空指针错误,Null应NULL。
第二处:比较指针位置的值是否相等,所以应改为:if(*r==*p)。
3.比较两个字符串的长度,返回较长的字符串,若长度相同返回第一个,beijing shanghai 解题思路:
本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。
参考答案:
#include
#include
void

fun(char *s, char t[])
{ int i, j = 0 ;
for(i = 0 ; i < strlen(s) ; i += 2)
if(s[i] % 2 == 0) t[j++] = s[i] ;
t[j] = 0 ;
}
第 十 套
1. 给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,……解题思路:
本题是计算出带有头结点的单向链表中各结点数据域中值之和。
第一处:累加数据域中的值,所以应填:data。
第二处:指定p的下一个指针,所以应填:next。
第三处:函数调用,在主函数中已经给出了head,所以应填:head。
2. 给定程序MODII1.C中函数fun的功能是:将s字符串中出现的与t1所指字符串相同的字符串全部替换成t
2所指字符串,所形成的新串放在w所指的数组中。……解题思路:
第一处:判断字符串当前字符是否是字符串结束符,所以应改为:while(*r)。
第二处:语句后缺少分号。
3. 比较两个字符串的长度,返回较长的字符串,若长度相同返回第一个,beijing shanghai解题思路:
本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。
参考答案:
#include
#include
void fun(char *s, char t[])
{ int i, j = 0 ;
for(i = 1 ; i < strlen(s); i+=2) t[j++] = s[i] ;
t[j] = 0 ;
}
第 十一 套
1. 人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,……解题思路:
本题是要求从给定的人员数据中找出编号相同的记录数据。
第一处:从返回值来看,是返回一个结构型的值,所以应填:STU。
第二处:判断结构变量中的编号num是否相等,所以应填:stu[i].num。
第三处:返回编号相等的记录值,所以应填:std[i]。
2. . 给定程序MODII1.C中函数fun的功能是:从s所指字符串中,找出与t所指字符串相同的子串的个数作为函数值返回。……解题思路:
第一处:语句后缺少分号。
第二处:判断r的当前字符是否是字符串结束符,所以应改为:if(*r==0)。
3. 比较两个字符串的长度,返回较长的字符串,若长度相同返回第一个,beijing shanghai解题思路:
本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。
参考答案:
#include
#include
void fun(char *s, char t[])
{ int i, j = 0 ;
for(i = 0 ; i < strlen(s); i++) if(s[i] % 2) t[j++] = s[i] ;
t[j] = 0 ;
}

第 十二 套
1. 人员的记录由编号和出生年、月、日组成,n名人员的数据已在主函数中存入……

题思路:
本题是从给定的人员数据中找出年龄相同的记录存入k中,并返回符合条件的人数。
第一处:断结构变量中的编号year是否相等,所以应填:std[i].year。
第二处:把符合条件的记录依次存入实参k中,所以应填:std[i]。
第三处:返回符合满足条件的人数,所以应填:n。
2.给定程序MODI1.C的功能是:读入一整数k(2解题思路:
第一处:函数定义的行尾有多余的分号。
第二处:条件判断缺少圆括号。
3. 解题思路:
本题考察学生在一组记录中找出最高分。我们使用for循环语句来解决这个问题。
参考答案:
#include
#include
#define N 10
typedef struct ss
{ char num[10]; int s; } STU;
fun( STU a[], STU *s )
{
int i, max = a[0].s, j = 0;
for(i = 1 ; i < N ; i++)
if(max < a[i].s) {
j = i ;
max = a[i].s ;
}
*s = a[j] ;
}
第 十三 套
给定程序通过定义并赋值的方式,利用结构体变量存储一名学生的学号、姓名和3们功课的成绩……
1. 解题思路:
本题是利用结构体存储学生记录并由实参ss返回。
第一处:实参ss是一个结构型指针变量,所以应填:STU。
第二处:该学生的各科成绩都乘以一个系数a,所以应填:score[i]。
第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&std。
2.给定程序MODI1.C中函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回……
解题思路:
第一处:条件判断缺少圆括号。
第二处:判断相等的符号是==。
3. 解题思路:
本题是利用两重循环给二维数组左下三角元素中的值乘以n。
参考答案:
#include
#include
#define N 5
int fun ( int a[][N], int n )
{ int i, j;
for(i = 0 ; i < N ; i++)
for(j = 0 ; j <= i; j++)
a[i][j] *= n ;
}
第 十四 套
给定程序中,函数fun的功能是:将形参指针所指结构体数组的三个元素按sum成员进行升序排序……
1. 解题思路:
本题是要求对结构体数组中的三个元素按num成员升序排列。
第一处:由于在函数体fun中,已经使用了std变量,所以应填:*std。
第二处:由于temp是存放交换记录的中间变量,所以应填:PERSON。
第三处:函数的调用,所以应填:std。
2. 给定程序MODI1.C中函数fun的功能是:将m(1解题思路:
第一处:保留字int错写成Int。
第二处:字符数组的字符串书写格式错误。
3. 解题思路:
本题是利用两重循环给二维数组左下三角元素中的值全部置成0。

参考答案:
#include
#include
#define N 5
int fun ( int a[][N] )
{ int i, j;
for(i = 0 ; i < N ; i++)
for(j = 0 ; j <= i; j++)
a[i][j] = 0 ;
}
第 十五 套
给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大的数据作为函数值返回……
1. 解题思路:
本题是从结构体中找出年龄最大的记录。
第一处:给存放最大者max赋初值,所以应填:*std。
第二处:当前最大者的年龄和结构中所有的年龄进行比较,所以应填:std[i].age。
第三处:输出最大者的姓名和年龄,所以应填:https://www.wendangku.net/doc/5514322912.html,。
2.给定程序MODI1.C中函数fun的功能是:实现两个整数的交换。
解题思路:
第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为int *a,int *b。
第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*b;*b=*a;*a=t;。
3. 解题思路:
本题是求出二维数组每列中最小元素,并依次放入pp所指一维数组中。
参考答案:
#include
#define M 3
#define N 4
void fun ( int tt[M][N], int pp[N] )
{
int i,j, min, k ;
for(i = 0 ; i < N ; i++) {
min = tt[0][i] ; k = 0 ;
for(j = 1 ; j < M ; j++)
if(min > tt[j][i])
{ min=tt[j][i] ;
k = j ;
}
pp[i] = tt[k][i] ;
}
}
第 十六 套
程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息……
1. 解题思路:
本题是利用结构体变量存储了一名学生的信息。
第一处:tt变量在函数体fun已经使用,所以应填:tt。
第二处:利用循环分别输出学生的成绩数据,所以应填:tt.score[i]。
第三处:函数的调用,所以应填:std。
2.给定程序MODI1.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0] 中的数对调……
解题思路:
第一处:外循环每循环一次,把当前位置i赋值给m,所以应改为:m=i;。
第二处:通过内循环来找出最大的一个数的位置k,所以应改为:if(a[k]>a[m]) m=k;。
3. 解题思路:
本题是考察考生怎样获取一个符合要求的无符号整数。本题是应用if条件语句首先判断给出的数是几位数,再模相应的值,最后得出的余数就是结果。
参考源程序:c:\wexam\24990001\HLPSYS\参考答案\prog1.c
请此程序拷贝到考生文件夹中,然后运行这个程序就可以得到正确的结果。
参考答案:
#include
unsigned fun ( unsigned w )
{ if(w>10000) w %= 10000 ;
else if(w>1000) w %= 1000 ;
else if(w>100) w %= 100 ;
else if(w>10) w

%=10 ;
return w ;
}
第 十七 套
给定程序中,函数fun的功能是:对形参ss所指字符串数组中的M个字符串按长度由短到长进行排序……
1. 解题思路:
本题是要求按字符串的长短进行排序。
第一处:内循环赋初值,应填:i+1。
第二处:找出最短的一个长度,所以应填:m=j。
第三处:交换字符串,所以应填:t。
2..给定程序MODI1.C中函数fun的功能是:判断ch中的字符是否与str所指串中的某个字符相等……
解题思路:
第一处:第1个形参应该是字符串类型,所以应改为:void fun(char *str, char ch)。
第二处:应该是判断不相等,所以应改为:if(*str!=ch)。
第三次:置字符串结束符错误,所以应改为:str[1] = 0;。
3. 解题思路:
本题是考察考生如何对字符串中的字符进行逆序操作。给出的程序使用了一个临时变量b的字符串,使用for循环语句把原字符串的字符从尾部依次赋给临时变量b(从头开始)中,循环结束后,再把临时变量b的内容重新复制给原字符串变量即可。
参考答案:
#include
#include
#define N 81
fun ( char *s )
{ char b[N] ;
int i = 0, j ;
memset(b, 0, N) ;
for(j = strlen(s) - 1 ; j >= 0 ; j--) b[i++] = s[j] ;
strcpy(s, b) ;
}
第 十八 套
给定程序中,函数fun的功能是:对形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐……
1. 解题思路:
第一处:使用变量k来保存第几个字符串是最长的字符串,所以应填:k。
第二处:利用for循环把原字符串右移至最右边存放,字符串的长为len,所以应填:len。
第三处:左边用字符*补齐,所以应填:ss[i][j]。
2..给定程序MODI1.C中函数fun的功能是:计算整数n的阶乘。
解题思路:
第一处:--n是先减1,n--是后减1。本题应该先乘以n,再减1,才正确。
第二处:返回计算结果,所以应填:result。
3. 解题思路:
本题是考察考生怎样在字符串中删除指定的字符,结果仍存放在原字符串中。给出的程序是引用字符串指针p和while循环语句以及if条件判断语句进行处理的,新字符串的位置是由i来控制的,循环结束后,再给新字符串置字符串结束符,最后产生的新字符串形参s返回到主程序中。
参考答案:
#include
#include
int fun(char s[],char c)
{ char *p = s ; int i = 0 ;
while(*p) {
if(*p != c) s[i++] = *p ;
p++ ;
}
s[i] = 0 ;
}
第 十九 套
给定程序中,函数fun的功能是:对形参ss所指字符串数组中最长字符串的长度,其余字符串右边用字符*补齐……
1. 解题思路:
第一处:利用for循环语句取当前字符串的长度,所以应填:ss[

i]。
第二处:在字符串的右边填字符*,其开始位置是n+j,其中n是该字符串本身的长度,j是循环控制变量,所以应填:n+j。
第三处:字符串处理结束应置字符串结束符,其位置是n+j+1,所以应填:1。
2. .给定程序MODI1.C中函数fun的功能是:将p所指字符串中每个单词得最后一个字母改成大写……
解题思路:
 第一处:关键字int错写成INT。
 第二处:该行括号没有配对,所以只要加上一个右括号即可。
3. 解题思路:
本题是考察考生如何对字符串中的字符按降序进行排序。给出的程序是使用双重for循环以及冒泡法进行排序的,结果仍存放在原先的字符串上。
参考答案:
#include
#include
#include
int fun(char *s,int num)
{ char ch ;
int i, j ;
for(i = 1 ; i < 6 ; i++)
for(j = i + 1 ; j < 6 ; j++) {
if(*(s + i) < *(s + j)) {
ch = *(s + j) ;
*(s + j) = *(s +i) ;
*(s + i) = ch ;
}
}
}
第 二十 套
给定程序中,函数fun的功能是:求形参ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回……
1. 解题思路:
第一处:形参ss的定义,它是一个字符串数组的定义,其宽度为N,所以应填:N。
第二处:取第一个字符串的长度赋值给变量*n,所以应填:len。
第三处:每循环一次,判断当前字符串的长度是否大于*n,如果大于,则*n=len。
2..给定程序MODI1.C中函数fun的功能是:根据形参m,计算如下公式的值……
解题思路:
第一处:在此变量k没有定义过,再根据公式和for循环语句中所用的变量可知,这里的k实际上是i。
第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所以应填return t;。
3. 解题思路:
本题是统计一个字符串在另一个字符串中出现的次数。
程序流程如下:
1. 利用strstr函数,首先找到第一个出现的位置。
2. 利用while循环和strstr依次查找所有出现的位置,并进行统计,并把统计结果作为函数值返回。
strstr(const char *s1, const char *s2)是字符串s2在s1中出现的位置,如果找到则返回位置指针。
参考答案:
#include
#include
int fun(char *str,char *substr)
{ int cnt = 0 ;
char *p = str, *q ;
while(*p) {
q = strstr(p, substr) ;
if(q == NULL) break;
p = q + strlen(substr) ;
cnt++ ;
}
return cnt ;
}
第 二十一 套
给定程序中,函数fun的功能是:求形参ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回……
1. 解题思路:
第一处:字符串数组共有M个字符串,所以在循环中终止值应填:M。
第二处:由于本题是取长度

最短的字符串,*n总是保存长度最短值,所以应填:<。
第三处:其中k是保存长度最短的字符串所在的行下标,所以应填:k。
2..给定程序MODI1.C中函数fun的功能是:将tt所致字符串中的小写字母都改为对应的大写字母……
解题思路:
第一处:判断是小写字母,则条件应该是与的关系。
第二处:小写字母的ASCII值减去32正好是其大写字母。
3. 解题思路:
本题是考察考生如何判断一个数不是素数,如果所给出的数是非素数且小于指定的数,那么这些数应存放到指定的数组xx中保存,最后由形参xx返回。
在给出的程序中函数isP就是判断一个数是否是素数,若是非素数,则返回1,否则返回0。
本题是用for(i=2;i参考答案:
#include
int isP(int m)
{ int j, tag = 0 ;
for(j = 2 ; j < m && !tag ; j++)
if(m % j == 0) tag = 1 ;
return tag ;
}
void fun( int m, int *k, int xx[] )
{
int i, cnt = 0 ;
for(i = 2 ; i < m ; i++)
if(isP(i)) xx[cnt++] = i ;
*k = cnt ;
}
第 二十二 套
给定程序中,函数fun的功能是:将s所指的字符串中的所有数值字符移到所有非数字字符之后……
1. 解题思路:
t2是存放数字字符串,t1是存放非数字字符串。
第一处:t2存放数字字符串的位置是由j来控制的,每添加一个,j必须加1,所以应填:j++。
第二处:利用for循环把t1字符串添加到原字符串s中,所以应填:s[i]=t1[i]。
第三处:利用for循环把t2字符串添加到原字符串s的尾部,其中数字字符串的长度为j,所以应填:j。
2. 解题思路:
第一处:for循环语句中缺少分号。
第二处:应该把pstr+j位置上的值赋值给*(pstr+i)上,所以应改为:*(pstr+i)=*(pstr+j);。
3. 解题思路:
本题是考察考生怎样从字符串中找出指定字符的个数。使用while循环语句来字符串是否结束,如果没有结束,则判断当前字符是否是指定的字符,如果是指定的字符,则个数cnt加1,直至字符串结束为止,最后由函数返回。
参考答案:
#include
#include
#define M 81
int fun(char *ss, char c)
{ int cnt = 0 ;
char *p = ss ;
while(*p) {
if(*p == c) cnt++ ;
p++ ;
}
return cnt ;
}
第二十三套
1. 解题思路:
第一处:判断是数字,应该使用“与”,所以应填:&&。
第二处:判断字符串是否是字符串结束符,所以应填:'\0'。
第三处:如果当前字符是数字字符,则把当前字符以后的所有字符往后一个位置,所以应填:s[j]。
2. 解题思路:
第一处:使用for

循环计算公式,必须计算到m,所以应改为for(i=2; i<=m; i++)。
第二处:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改为y+=1./(i*i)。
3. 1 2 3 1 4 7 2 6 10
实现B=A+A',既矩阵A加上A的转置,存到矩阵B中 4 5 6 转置为2 5 8程序输出6 10 14
7 8 9 3 6 9 10 14 18 解题思路:
本题考察考生如何实现矩阵的转置,然后执行两个矩阵中的元素值相加生成一个新的矩阵。矩阵转置实现上就是原行元素值变为列元素值,原列元素值变为行元素值。
参考答案:
#include
void fun ( int a[3][3], int b[3][3])
{ int c[3][3] ;
int i, j ;
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 3 ; j++) {
c[i][j] = a[j][i] ; /* 矩阵的转置 */
b[i][j] = a[i][j] + c[i][j] ;
}
}
第 二十四 套
1. 解题思路:
第一处:在for循环中终止值要判断字符串是否结束符,所以应填:s[i]。
第二处:判断是否是数字,所以应填:'9'。
第三处:字符串中数字字符出现的次数n,并存放在形参t所指的变量中,所以应填:*t=n。
2. 解题思路:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。……
第一处:由于x是整型指针变量,所以地址不能赋值给整型变量,因此必须取x地址上的值,所以应改为t=*x;*x=y;。
第二处:已交换后的值存放在t中,所以返回值应为return(t);。
3. 解题思路:
本题是利用for循环语句以及取模%运算来得出符合条件的整数并存入a所指的数组。
参考答案:
#include
void fun (int *a, int *n)
{ int i ;
*n = 0 ;
for(i = 7 ; i < 1000 ; i++)
if(((i % 7) == 0 || (i % 11) == 0) && (i % 77) != 0) a[(*n)++] = i ;
}
第 二十五 套
1. 解题思路:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动……
第一处:首先判断字符串的长度是奇数还是偶数,如果是奇数,则k=n-1,所以应填:1。
第二处:取字符串最后一个奇数位的字符,并由变量c保存,所以应填:s[k]。
第三处:第1位奇数位用最一个奇数位字符替换,所以应填:c。
2. 解题思路:求 s=aa…aa-…-aaa-aa-a (此处aa…aa表示n个a,a和n的值在1到9之间)例如a=3,n=6,则以上表达式为:……
 第一处:根据for循环计算t的值可知,变量t的初值不正确,应为0。
 第二处:每次循环都是取t除以10的值,而不是取余数,所以应改t=t/10;。
3. 解题思路:
本题是考察考生在给定的字符串中统计出26个小写字母的次数并存入到指定

的数组中且由形参返回。其中数组下标的位置可以通过某一个字符的ASCII值减去97或直接减'a'也可以,就可以得出该字符出现次数存放的位置。例如:字符为b,那么位置为'b'-'a'=1,就是实际存放的位置。
参考答案:
#include
#include
void fun(char *tt, int pp[])
{ char *p = tt ;
int i ;
for(i = 0 ; i < 26 ; i++) pp[i] = 0 ;
while(*p) {
if(*p >= 'a' && *p <= 'z') pp[*p - 'a'] += 1 ;
p++ ;
}
}
第 二十六 套
1. 解题思路:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出存入形参p所指字符数组中……
第一处:取外循环的控制变量,所以应填:t=i。
第二处:内循环的起始变量,应该是i+2,所以应填:i。
第三处:新字符串处理完后应添加字符串结束符,所以应填:'\0'。
2. 解题思路:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数
第一处:要判断t的最后一项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)>=num)。
第二处:t是s除以n的值,而不是取余数,所以应改t=s/n;。
3. 解题思路:
本题是利用字符串拷贝和字符串连接来生成新的字符串。
参考答案:
#include
#include
#define LEN 20
void fun (char a[], char b[], int n)
{ strncpy(b, a, n) ;
b[n] = 0 ;
strcat(b, a + n + 1) ;
}
第 二十七 套
1. 解题思路:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符……
第一处:在for循环中终止值要判断字符串是否结束符,所以应填:'\0'。
第二处:n用于统计参数c后还有多少个字符,要对其进行初始化,所以应填:0。
第三处:要求插入相同的字符c,所以应填:c。
2. 解题思路:在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。给定程序MODI1.C中函数fun的功能是计算数组元数中值为正数的平均值……
第一处:由于sum是存放实数值,因此不能定义为整型,所以应改为double sum=0.0;或float sum=0.0;。
第二处:除的运算符是“/”。
3. 解题思路:
 本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,最后返回s。
参考答案:
#include
float fun(int n)
{ int i,j,t;
float s=0;
for(i=1;i<=n;i++) {
t=0;
for(j=1;j<=i;j++) t+=j;
s=s+1./t;
}
return s;
}
第 二十八 套
1. 解题思路:有N×N矩阵,根据给定的m(m<=N)值,将每行元数中的值均右移m个位置,左边置为0……
第一处:for循环变量的增量,所以应填:i++


第二处:由于右移m个位置,所以应填:m。
第三处:左边m列均置于0,所以for循环的终止值应为m。
2. 解题思路:计算并输出high以内的10个素数之和。high的值由主函数传给fun函数。……
第一处:括号没有匹配。
Error: While statement missing ) in function fun
在函数fun中While语句缺少)。
第二处:缺少分号。
Error: Break statement missing ; in function fun
在函数fun中break语句缺少;。
这种题型只要通过编译即可发现程序的错误所在。
3. 解题思路:
本题是根据给定的公式及条件来计算方程的一个实根。
参考答案:
#include
#include
float fun()
{ float x0, x1=0.0;
do {
x0=x1;
x1=cos(x0);
} while(fabs(x0-x1)>0.000001);
return x1;
}
第 二十九 套
1. 解题思路:将N×N矩阵中元数的值按列右移一个位置,右边被移出矩阵的元素绕回左边……
第一处:函数fun是对N×N矩阵进行操作,for循环的终止值为N。
第二处:把最后一列的元素值赋值给临时变量x保存用来交换,所以应填:N-1。
第三处:第1列元素值使用x替换,由于C语言的下标是从0开始的,所以应填:0。
2. 解题思路:计算并输出下列奇数的前N项之和SN,直到SN-1大于p为止,q的值通过形参传入……
第一处:如果两个整数类型相除,结果仍为整数,所以必须转换其中一个数的类型,所以应改为:s+=(float)(n+1)/n;。
第二处:返回结果错误,应改为:return t;。
3. 解题思路:
本题是考察考生用递推算法来求出斐波那契数列中每项的值。给出的程序就是用变量f、f0和f1来表示递推的过程,给变量f0和f1最初分别置数列中第1项和第2项的值0和1,然后进入循环,执行语句f=f0+f1;将所得和值存入f中,这就是数列的第3项,把f1的值移入f0中,将f的值移入f1中,为求数列的下一列作好准备;接着进入下一次循环,通过语句f=f0+f1求得数列的第4项,不断重复以上步骤,每重复一次就依次求得数列的下一项,直至某项满足要为止。
参考答案:
#include
#include
int fun( int t)
{ int f0 = 0, f1 = 1, f ;
do {
f = f0 + f1 ;
f0 = f1 ;
f1 = f ;
} while(f < t) ;
return f ;
}
第 三十 套
1. 解题思路:有N×N矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,……
第一处:把第1列上的数存放到第1行上,所以应填:0。
第二处:for循环的增量值,由于循环是从大到小递减,所以应填:j--。
第三处:把临时数组中的元素成为最后一列,所以应填:j。
2. 解题思路:计算 S=f(-n)+f(-n+1)+……+f(0)+f(1)+f(2

)+……+的值。……
第一处:由于返回值是实数型值,所以在函数名前加上double。
第二处:语句后缺少分号。
3. 解题思路:
本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,循环结束后再对s求平方根,结果仍存入s中,最后返回s。
参考答案:
#include
#include
double fun( int m )
{ double s = 0.0 ;
int i ;
for(i = 1 ; i <= m ; i++) s += log(1.0 * i) ;
s = sqrt(s) ;
return s ;
}
第 三十一 套
1. 解题思路:有N×N矩阵,以主对角线,对称元素相加并将结果存放在坐下三角元素中,右上三角元素置为0……
第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]。
第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:t[i][j]。
第三处:右上三角元素置为0,所以应填:t[j][i]。
2. 解题思路: 给定程序DOMI1.C中函数fun的功能是:计算函数F(x,y,z)
第一处:define定义错误,所以应改为:#define FU(m,n) ((m)/(n))。
第二处:return错写成Return,变量value错写成Value。
3. 解题思路:规定输入的字符串中之包含字母和*号。请编写函数fun它的功能是:
本题是考察字符串的操作。
1. 利用循环扫描出字符串左边第1个字符不是'*'的字符。
2. 再利用循环把以后的字符依次移动原字符串首地址开始存放。
3. 最后给字符串a加上结束符。
参考答案:
#include
void fun( char *a )
{ int j=0;
char *p = a ;
while(*p == '*') p++ ;
while(*p) {
a[j++] = *p ;
p++;
}
a[j]=0 ;
}
第 三十二 套
1. 解题思路:给定函数fun它的功能是:将N*N矩阵主对角线元素中的值与反向对角线对应位置
第一处:在函数体fun中,已经使用了t整型数组,所以应填:t[][N]。
第二处:要求填写for循环语句的初始值和终止值,所以应填:i=0;i第三处:交换变量的值,根据循环体中的语句可知,s是存放交换的中间变量,所以应填:s。
2. 解题思路:有N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:;利用折半查找
第一处:函数有返回值,不能定义为void,所以应改为:int fun(int a[],int m)。
第二处:if错定成If。
3. 解题思路:假定输入的字符串中只包含字母和*号。请编写函数fun它的功能是:除了字符串前导和尾部的*号之外……
本题是考察字符串的操作。
1. 利用循环扫描出p指针左边的字符是否是'*',如果不是'*',则依次把这些字符移动原字符串a首地址开始存放。
2. 把p指针所指的字符串也依次存放到字符串a中。
3. 最

后给字符串a加上结束符。
参考答案:
#include
void fun( char *a, char *p )
{ char *q=a;
int j=0;
while(*q && qif(*q != '*') a[j++] = *q ;
q++ ;
}
while(*p) a[j++]=*p++;
a[j]=0;
}
第 三十三 套
1.解题思路:给定程序中,函数fun的功能是:计算N*N矩阵主对角线元素和反向对角线元素之和……
第一处:变量sum是用来存放主对角线元素和反向对角线元素之和,要对其进行初始化,所以应填:sum=0。
第二处:对主对角线元素值累加,所以应填:t[i][i]。
第三处:对反向对角线元素值累加,所以应填:t[i][n-i-1]。
2. 解题思路:给定程序MODI1.C中函数fun和funx的功能是:用二分法求方程……
第一处:变量r应该定义为实数型double或浮点型float变量。
第二处:while必须先满足条件,才做循环体的内容,所以应改为:while(fabs(m-n)>0.001)。
3. 解题思路:假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外……
本题是考察字符串的操作。
1. 把r指针左边的字符仍存放字符串a首地址开始的位置上。
2. 把r指针和p指针中间的字符进行判断,其字符是否是'*',如果不是'*',则把这些字符放到第1步操作字符串a的后面。
3. 把p指针右边的字符放到第2步操作字符串a的后面。
4. 最后给字符串a加上结束符。
参考答案:
#include
void fun( char *a, char *h,char *p )
{ int j=0;
char *q=a;
while(*q && q < h) a[j++] = *q++ ;
while(*h && *p && h < p) {
if(*h != '*') a[j++] = *h ;
h++;
}
while(*p) a[j++] = *p++ ;
a[j] = 0 ;
}
第 三十四 套
1. 解题思路:函数fan的功能是:把形参a所指数组中的奇数按原顺序依次序放到a[0]……
第一处:判断a[i]是否是奇数,若是,则仍保留在原数组中a[j],所以应填:1。
第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:j++。
第三处:返回删除偶数后a所指数组中数据的元素j,所以应填:j。
2. 解题思路:给定程序MODI1.C中函数fan的功能是:求出两个非零正整数的最大公约数……
第一处:交换值的次序有问题,所以应改为:t=a;a=b;b=t;。
第二处:返回值错误,应改为:return(b);。
3. 解题思路:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的……
本题是考察字符串的操作。
1. 利用循环扫描字符串中所有的字符是否是'*',如果不是'*',则把这些字符存放字符串a首地址开始的位置上。
2. 最后给字符串a加上结束符。
参考答案:
#include
void fun( char *a )
{ int j =0 ;
char *p=a;
while(*p) {
if(*p != '*') a[j++]=*p ;
p

++ ;
}
a[j]=0;
}
第 三十五 套
1. 解题思路:把形参a所指数组中的偶数按原顺序依次存放到a[0]……
第一处:判断a[i]是否是偶数,若是,则仍保留在原数组中a[j],所以应填:a[i] % 2。
第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:a[j]。
第三处:返回删除奇数后a所指数组中数据的元素j,所以应填:j。
2. 解题思路:按一下递归公式求函数值。
第一处:形参n没有定义类型,所以应改为:fun (int n)。
第二处:判断相等的符号是==。
3. 解题思路:
本题是考察字符串的操作。
1. 使用while循环语句和字符串指针p扫描出尾部的*号。
2. 找出字符串最右边字母后出现'*'的第1位置。
3. 使用while循环来处理右边'*'是否大于n个,若大于,则取n个'*'。
4. 最后给字符串加上结束符。
参考答案:
#include
void fun( char *a,int n )
{ char *p=a ;
int j=0;
while(*p) p++; p--; /* 字符串的长度 */
while(*p == '*') p--; /* 字符串右的'*' */
p++;
while(jp++ ;
j++;
}
*p = 0 ;
}
第 三十六 套
1. 解题思路:把形参a所指数组中的最小值放在元素a[0]中,接着把形参a所指数组中的最大值放在a[1]元素中……
第一处:外循环每循环一次均把数组a当前位置的值,分别赋值给max和min变量,所以应填:a[i]。
第二处:判断max是否小于a[j],若小于,则把a[j]赋值给max,所以应填:a[j]。
第三处:判断min是否大于a[j],若大于,则把a[j]赋值给min,所以应填:a[j]。
2. 解题思路:用递归算法计算斐波拉契数列中第n项的值。从第一项起……
第一处:switch后有多余的分号。
第二处:case 1后没有返回语句,也应该为return 1;。所以应改为:case 1: return 1; case 2:return 1;。
3. 解题思路:
本题是求记录结构中学生课程成绩的平均值,其结果仍放在该记录结构中。
参考答案:
#include
#define N 8
typedef struct
{ char num[10];
double s[N];
double ave;
} STREC;
void fun(STREC *a)
{
int i ;
for(i = 0 ; i < N ; i++)
a->ave = a->ave + a->s[i] ;
a->ave /= N ;
}
2009版上机模拟系统参考答案(有效期至2009年9月20日)
声明: 本资料内部使用不得做其他商业用途,否则追究法律责任,后果自负!
第 三十七 套
1. 解题思路:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中……
第一处:形参a应定义指针整型变量,所以应填:*a。
第二处:外for循环每次增量应该加2。
第三处:内for循环的初始值应为:i+1。
2. 解题思路:按顺序给所指数组中的元素赋予从2开始的偶数,

然后在按顺序对每五个元素求一个平均值……
第一处:变量名书写错误,应为sum。
第二处:由于%的优先级比+优先,所以必须加上括号,因此改为:if((i+1)%5==0)。
3. 解题思路:
本题是利用循环计算出记录结构中学生成绩的平均值,再把低于平均值的记录存放到b所指的数组中。具体操作请看答案程序中的说明。
参考答案:
#include
#define N 8
typedef struct
{ char num[10];
double s;
} STREC;
double fun( STREC *a, STREC *b, int *n )
{ int i ;
double ave = 0.0 ;
*n = 0 ;
for(i = 0 ; i < N ; i++) ave = ave + a[i].s ;
ave /= N ; /* 计算平均值 */
for(i = 0 ; i < N ; i++)
if(a[i].s < ave) { /* 把低于平均值的记录存放到b所指的数组中 */
b[*n]=a[i] ;
(*n)++; /* 人数加1 */
}
return ave ; /* 返回平均值 */
}
第 三十八 套
1. 解题思路:将形参a所指数组中的前半部分元素中的值和后半部分于那是中的值对换。……
第一处:如果n是奇数,则中间的元素不动,所以应填:1。
第二处:使用for循环语句来交换数组元素的值,所以应填:i。
第三处:使用中间变量t来交换的,所以应填:t。
2. 解题思路:把主函数中输入的3个数,最大的放在a中,最小的放在c中……
第一处:在函数fun体中,k是一个浮点型变量,所以应改为:float k;。
第二处:三个数比较大小,第1个条件是第1个比第2个小,则交换。第3个条件是第2个比第3个小,则也交换。第2个条件是应该第1和第3个小,则交换就符合题意了,所以应改为:if(*a<*c)。
3. 解题思路:
本题是找出最高成绩,再把N名学生的成绩等于最高成绩的记录存入b所指的数组中。具体操作请看答案程序中的说明。
参考答案:
#include
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
int fun( STREC *a, STREC *b )
{ int i, max = a[0].s, n=0;
for(i = 1; i < N; i++)
if(max < a[i].s) max = a[i].s ; /* 找出最高成绩 */
for(i = 0; i < N; i++)
if(max==a[i].s) b[n++] = a[i] ; /* 找相等的最高成绩并存入数组b中 */
return n; /* 返回符合条件的人数 */
}
第 三十九 套
1. 解题思路:逆置数组元素中的值。例如:若a中所指数组这的数据依次为:1、2、3、4、5、6、7、8、9,……
第一处:利用for循环语句,对数组中的各元素进行逆置,所以终止值为n/2。
第二处:进行交换数组中元素的值,由于是依次是首和尾交换,所以应填:i。
第三处:使用中间变量t来交换的,所以应填:a[n-i-1]。
2. 解题思路:将一个有八进制数字字符组成的字符串转换为与其面值相等的十进制整数。……
第一和第二处:*p错写成*P,'0'错写成'o'。


3. 解题思路:
本题是从学生记录体中找出给定的学号。具体操作请看答案程序中的说明。
参考答案:
#include
#include
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
STREC fun( STREC *a, char *b )
{ STREC c ;
int i ;
c.num[0] = '\0' ; /* 置初始空串 */
c.s = -1 ; /* 置成绩为-1 */
for(i = 0 ; i < N ; i++)
if(strcmp(a[i].num, b)==0) { /* 判断学号是否相等 */
strcpy(c.num, a[i].num) ;
/* 相等,则对学号进行赋值 */
c.s=a[i].s; /* 相等,则对成绩进行赋值 */
break ; /* 退出循环体 */
}
return c ; /* 返回结构体变量 */
}
第 四十 套
1. 解题思路:函数fun的功能是进行数字字符转换。若形参ch这是数字字符‘0’——‘9’,……
第一处:要求返回处理好的字符,所以应填:char。
第二处:判断该字符是否是数字,所以应填:ch<='9'。
第三处:只要减去'0'的ASCII值,即可得到要求的结果,所以应填:'0'。
2. 解题思路:将p所是字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。……
第一处:把指针p所指的值赋值给b[k]中。
第二处:把空格字符赋值给b[k++]中,而不是一个空格的字符串。
3. 解题思路:
本题是计算链表结构中成绩的平均分。具体操作请看答案程序中的说明。
参考答案:
#include
#include
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double fun( STREC *h )
{ STREC *p=h->next; /* 由于头结点中没有存放数据 */
double av=0.0; /* 对计算成绩平均值的变量进行初始化 */
int n = 0 ;
while(p!=NULL) { /* 判断链表是否结束 */
av = av + p->s ; /* 对成绩进行累加 */
p=p->next; /* 到下一个结点位置 */
n++; /* 人数加1 */
}
av /= n ; /* 计算成绩平均值 */
return av ; /* 返回成绩平均值 */
}
STREC * creat( double *s)
{ STREC *h,*p,*q; int i=0;
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
while(i{ q=(STREC*)malloc(sizeof(STREC));
q->s=s[i]; i++; p->next=q; p=q;
}
p->next=0;
return h;
}
outlist( STREC *h)
{ STREC *p;
p=h->next; printf("head");
do
{ printf("->%4.1f",p->s);p=p->next;}
while(p!=0);
printf("\n\n");
}
第 四十一 套
1. 解题思路:函数fan的功能是进行字母转换。若形参ch中是小写英文字母,则转换成对应的大写字母……
第一处:判断形参ch是否是小写字母,所以应填:&&。
第二处:小写字母与大写字母的ASCII值相差为32,所以应填:'A'或65。
第三处:返回处理后的形参ch,所以应填:ch。

2. 解题思路:给一维数组a输入任意4个整数,并按下例的规律输出。例如输入1、2、3、4,程序运行后将输出以下方阵……
第一处:在函数fun体中,a是一个整型数组,所以形参a应定义为指针型整数变量。
第二处:变量书写错误,aa应为a。
3. 解题思路:
本题是考察考生怎样利用循环来求出一个数n的所有(除1和自身外)因子i并求出它们的和s作为函数值返回。判断因子的条件是:n % i == 0,(i是大于1且小于n中所有的正整数)。
参考答案:
#include
int fun(int n)
{ int s = 0, i ;
for(i = 2 ; i < n ; i++) if(n % i == 0) s +=i ;
return s ;}
第 四十二 套
1. fun的功能是:计算f(X)=1+X-……解题思路:
第一处:根据公式可知,变量f的初值为1。
第二处:根据公式可知,此处是正负号的变换,所以应填:-1。
第三处:计算的结果进行累加并赋值给变量f,所以应填:t。
2. 给定程序modLL.c中函数……解题思路:
第一处:外for循环的初始变量i的值应为1。
第二处:变量k写成了大写K了。
3.Sn=1+1/1!+1/2!+1/3!+……+1/n!,若输入15则输出s=2.718282。注意:要求n得值大于1但不大于100 解题思路:
本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,最后把s作为函数值返回。
参考答案:
#include
double fun(int n)
{ double s=1 ;
long t=1;
int i;
for(i=1; i<=n; i++) {
t=t*i; /* 计算阶乘 */
s+=1./t; /* 计算每项的值并累加至变量s中 */
}
return s; /* 返回多项式的值 */
}
第 四十三 套
1. 函数fun的功能是:计算……解题思路:
第一处:根据公式可知,变量t的值为x。
第二处:根据公式可知,此处应该除以n,所以应填:n。
第三处:根据试题中条件的要求,所以应填:fabs(t)。
2.给定程序modll.c中函数fun的功能是:求整数x的y次方的低3位值 解题思路:
第一处:错误在for循环语句上,根据试题要求,终止条件应该是i<=y。
第二处:要取低3位的值时,应模1000取余数,而不是整除1000取商。
3.请编一个函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括1与n自身)之和。规定n不大于1000。若856则输出sum=763 解题思路:
本题是根据给定的公式进行计算。具体操作请看答案程序中的说明。
参考答案:
#include
#include
double fun(double x)
{ int n=1; /* 循环计数*/
double sn=1; /* 累计数*/
double xn=1,xn1=0; /*x的n值,以及x的n-1值;*/
while(fabs(xn-xn1)>=0.000001)/*绝对值是否满足条件*/
{ xn=xn*x*(0.5-n+1)/n; /*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/

相关文档