二级C语言上机试题汇编
※※※※※※※※※※※※
第01套:
给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。
给定源程序:
#include
void fun(char *s)
{ int i, j, n;
for(i=0; s[i]!='\0'; i++)
if(s[i]>='0' ___1___ s[i]<='9') { n=0;
while(s[i+1+n]!= ___2___) n++;
for(j=i+n+1; j>i; j--)
s[j+1]= ___3___;
s[j+1]='*';
i=i+1;
}
}
解题思路:
第一处:&&。第二处:'\0'。第三处:s[j]。
*************************给定程序MODI1.C中函数fun的功能是:根据整型形参m,计算如下公式的值。
1 1 1 1
y = 1 + ----- + ----- + ----- + …… + -----
2*2 3*3 4*4 m*m
例如,若m 中的值为: 5,则应输出:1.463611。
给定源程序:
#include
double fun ( int m )
{ double y = 1.0 ;
int i;
for(i = 2 ; i < m ; i++)
y += 1 / (i * i) ;
return( y ) ;
}
解题思路:
第一处:for(i=2; i<=m; i++)。第二处:y+=1./(i*i)。
************************* 请编写函数fun, 函数的功能是:实现B=A+A', 即把矩阵A加上A的转置, 存放在矩阵B中。计算结果在main 函数中输出。例如,输入下面的矩阵:其转置矩阵为:
1 2 3 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9
程序输出:
2 6 10
6 10 14
10 14 18
参考答案:
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] ;
}
}
※※※※※※※※※※※※
第02套:
给定程序中,函数fun的功能
是:找出100~999之间(含
100和999)所有整数中各位
上数字之和为x(x为一正整
数)的整数,然后输出;符合
条件的整数个数作为函数值
返回。例如,当x值为5时,
100~999之间各位上数字之
和为5的整数有:104、113、
122、131、140、203、212、
221、230、302、311、320、
401、410、500。共有15个。
当x值为27时,各位数字之
和为27的整数是:999。只有
1个。
给定源程序:
#include
fun(int x)
{ int n, s1, s2, s3, t;
n=0;
t=100;
while(t<=__1__){
s1=t%10; s2=(__2__)%10;
s3=t/100;
if(s1+s2+s3==__3__)
{ printf("%d ",t);
n++;
}
t++;
解题思路:
第一处:999。第二处:t/10。
第三处:x。
*************************
给定程序MODI1.C中函数
fun的功能是:从低位开始取
出长整型变量s中偶数位上的
数,依次构成一个新数放在t
中。高位仍在高位,低位仍在
低位。例如,当s中的数为:
7654321时,t中的数为:642。
给定源程序:
#include
void fun (long s, long t)
{ long sl=10;
s /= 10;
*t = s % 10;
while ( s < 0)
{ s = s/100;
*t = s%10*sl + *t;
sl = sl * 10;
}
解题思路:
第一处:long *t第二处:
while(s>0)。
*************************
学生的记录由学号和成绩组
成,N名学生的数据已在主函
数中放入结构体数组s中,请
编写函数fun,它的功能是:
按分数的高低排列学生的记
录,高分在前。
参考答案:
#include
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
int fun( STREC a[] )
{
STREC tmp;
int i,j;
for(i = 0; i < N; i++)
for(j = i+1; j < N; j++)
if(a[i].s < a[j].s) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
※※※※※※※※※※※※
第03套:
给定程序中,函数fun的功能
是:找出100至x(x≤999)
之间各位上的数字之和为15
的所有整数,然后输出;符合
条件的整数个数作为函数值
返回。例如,当n值为500时,
各位数字之和为15的整数
有:159、168、177、186、195、
249、258、267、276、285、
294、339、348、357、366、
375、384、393、429、438、
447、456、465、474、483、
492。共有26个。
给定源程序:
#include
fun(int x)
{ int n, s1, s2, s3, t;
n=__1__;
t=100;
while(t<=__2__)
{s1=t%10; s2=(t/10)%10;
s3=t/100;
if(s1+s2+s3==15)
{ printf("%d ",t);
n++;
}
__3__;
}
解题思路:
第一处:0。第二处:x。第
三处:t++。
*************************
给定程序MODI1.C中函数
fun的功能是:先将s所指字
符串中的字符按逆序存放到t
所指字符串中,然后把s所指
串中的字符按正序连接到t所
指串的后面。例如:当s所指
的字符串为:"ABCDE"时,则
t所指的字符串应为:
"EDCBAABCDE"。
给定源程序:
#include
#include
void fun (char *s, char *t)
{
int i;
sl = strlen(s);
for (i=0; i t[i] = s[sl-i]; for (i=0; i \TAB t[sl+i] = s[i]; t[2*sl] = '\0'; } 解题思路: 第一处:int i,s1;第二处:t[i] = s[sl-i-1];。 ************************* 函数fun的功能是:将a、b 中的两个两位正整数合并形 成一个新的整数放在c中。合 并的方式是:将a中的十位和 个位数依次放在变量c的百位 和个位上,b中的十位和个位 数依次放在变量c的千位和十 位上。例如,当a=45,b=12。 调用该函数后,c=1425。 参考答案: void fun(int a, int b, long *c) { *c=(b/10)*1000+(a/10)*100+( b%10)*10+(a%10); } ※※※※※※※※※※※※ 第04套: 函数fun的功能是:从三个形 参a,b,c中找出中间的那个 数,作为函数值返回。 例如,当a=3, b=5, c=4时,中 数为4。 给定源程序: #include int fun(int a, int b, int c) { int t; t = (a>b) ? (b>c? b :(a>c?c:___1___)) : ((a>c)?___2___ : ((b>c)?c:___3___)); return t; } 解题思路: 第一处:a。第二处:a。第 三处:b。 ************************* 给定程序MODI1.C中函数 fun的功能是: 首先将大写字 母转换为对应小写字母;若小 写字母为a~u,则将其转换为 其后的第5个字母;若小写字 母为v~z, 使其值减21。转换 后的小写字母作为函数值返 回。例如,若形参是字母A,则 转换为小写字母f; 若形参是 字母W,则转换为小写字母b。 给定源程序: #include #include char fun(char c) { if( c>='A' && c<='Z') C=C+32; if(c>='a' && c<='u') c=c-5; else if(c>='v'&&c<='z') c=c-21; return c; } 解题思路: 第一处:变量c错写成大写C 了。第二处:c=c+5;。 ************************* 请编写函数fun, 其功能是: 计算并输出例如, 在主函数中从键盘给n输入20后,输出为:s=534.188884。注意: 要求n的值大于1但不大于100。参考答案: double fun(int n) { int i; double fac=1.0; double sum=1.0; for(i=2;i<=n;i++) { fac+=sqrt(i); sum+=fac; } return sum; } ※※※※※※※※※※※※ 第05套: 给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。 给定源程序: #include #include #define N 5 typedef struct { int num; char name[10]; char tel[10]; }STYPE; void check(); int fun(___1___ *std) { ___2___ *fp; int i; if((fp=fopen("myfile5.dat","wb "))==NULL) return(0); printf("\nOutput data to file !\n"); for(i=0; i fwrite(&std[i], sizeof(STYPE), 1, ___3___); fclose(fp); return (1); } 解题思路: 第一处:STYPE。第二处:FILE。每三处:填写文件流变量fp。 ************************* 给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。例如:当s中的字符串为:"ABCDE"时,则t中的字符串应为: "ABCDEEDCBA"。 给定源程序: #include #include void fun (char *s, char *t) { int i, sl; sl = strlen(s); for( i=0; i<=s1; i ++) t[i] = s[i]; for (i=0; i \TAB t[sl+i] = s[sl-i-1]; t[sl] = '\0'; } 解题思路: 第一处:变量sl错写成了s1。 第二处:t[2sl] = '\0'; ************************* 函数fun的功能是:将两个两 位数的正整数a、b合并形成 一个整数放在c中。合并的方 式是:将a数的十位和个位数 依次放在c数的千位和十位 上,b数的十位和个位数依 次放在c数的百位和个位上。 例如,当a=45,b=12时,调 用该函数后,c=4152。 参考答案: void fun(int a, int b, long *c) { *c=(a/10)*1000+(b/10)*100+( a%10)*10+(b%10); } ※※※※※※※※※※※※ 第06套: 甲乙丙丁四人同时开始放鞭 炮,甲每隔t1秒放一次,乙 每隔t2秒放一次, 丙每隔t3 秒放一次,丁每隔t4秒放一 次,每人各放n次。函数fun 的功能是根据形参提供的值, 求出总共听到多少次鞭炮声 作为函数值返回。注意,当几 个鞭炮同时炸响,只算一次响 声,第一次响 给定源程序: #include #define OK(i, t, n) ((___1___%t==0) && (i/t int fun(int t1, int t2, int t3, int t4, int n) { int count, t , maxt=t1; if (maxt < t2) maxt = t2; if (maxt < t3) maxt = t3; if (maxt < t4) maxt = t4; count=1; /* 给count赋初值 */ for(t=1; t< maxt*(n-1); ___2___) { if(OK(t, t1, n) || OK(t, t2, n)|| OK(t, t3, n) || OK(t, t4, n) ) count++; } return ___3___; } 解题思路: 第一处:i。第二处:t++。 第三处:count。 ************************* 给定程序MODI1.C中函数 fun的功能是: 根据输入的三 个边长(整型值), 判断能否构 成三角形; 构成的是等边三 角形, 还是等腰三角形。若能 构成等边三角形函数返回3, 若能构成等腰三角形函数返 回2, 若能构成一般三角形函 数返回1, 若不能构成三角形 函数返回0。 给定源程序: #include #include void fun(int a,int b,int c) { if(a+b>c && b+c>a && a+c>b) { if(a==b && b==c) return 3; else if(a==b||b==c||a==c) return 2; else retrun 1 } else return 0; } 解题思路: 第一处:int fun(int a,int b,int c)。第二处:语句后缺少分 号。 ************************* 请编写函数fun, 其功能是: 计算并输出3到n之间(含3 和n)所有素数的平方根之和。 例如, 在主函数中从键盘给n 输入100后,输出为: sum=148.874270。注意: 要求 n的值大于2但不大于100。 参考答案: double fun(int n) { int i,j=0; double s=0; for (i=3; i<=n; i++) { for (j=2; j if (i%j == 0) break; if (j == i) s=s+sqrt(i); } return s; } ※※※※※※※※※※※※ 第07套: 函数fun的功能是:统计长整 数n的各个位上出现数字1、 2、3的次数,并通过外部(全局) 变量c1,c2,c3返回主函数。 例如:当n=123114350时,结 果应该为: c1=3 c2=1 c3=2。 给定源程序: #include int c1,c2,c3; void fun(long n) { c1 = c2 = c3 = 0; while (n) { switch(___1___) { case 1: c1++;___2___; case 2: c2++;___3___; case 3: c3++; } n /= 10; } 解题思路: 第一处:n%10。第二处: break。第三处:同第二处。 ************************* 给定程序MODI1.C中函数 fun的功能是: 统计一个无符 号整数中各位数字值为零的 个数, 通过形参传回主函数; 并把该整数中各位上最大的 数字值作为函数值返回。例如, 若输入无符号整数30800, 则 数字值为零的个数为3, 各位 上数字值最大的是8。 给定源程序: #include int fun(unsigned n, int *zero) { int count=0,max=0,t; do { t=n%10; if(t=0) count++; if(max n=n/10; }while(n); zero=count; return max; } 解题思路: 第一处:条件相等符号为==。 第二处:*zero=count;。 ************************* 请编写函数fun, 其功能是: 计算并输出下列多项式的值: 1 1 1 S = 1 + ──+ ───+ … + ───── 1*2 1*2*3 1*2*3* (50) 例如, 在主函数中从键盘给n 输入50后,输出 为:s=1.718282。注意: 要求n 的值大于1但不大于100。 参考答案: double fun(int n) { double s=0, t=1; int i ; for(i=1; i<=n; i++) { t *= i; s += 1./t; } return s; } ※※※※※※※※※※※※ 第08套: 函数fun的功能是:把形参a 所指数组中的最大值放在a[0] 中,接着求出a所指数组中的 最小值放在a[1]中;再把a所 指数组元素中的次大值放在 a[2]中,把a数组元素中的次 小值放在a[3]中;其余以此类 推。例如:若a所指数组中的数 据最初排列为:1、4、2、3、 9、6、5、8、7,则按规则移 动后,数据排列为:9、1、8、 2、7、 3、6、 4、5。形参n中存放a所指数组中数据的个数。 给定源程序: #include #define N 9 void fun(int ___1___, int n) { int i, j, max, min, px, pn, t; for (i=0; i px = pn = i; for (j=___3___; j { if (max < a[j]) { max = a[j]; px = j; } if (min > a[j]) 解题思路: 第一处:*a。第二处:2。第三处:i+1。 ************************* 给定程序MODI1.C中函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。 给定源程序: #include #define SIZE 20 fun(double *s, double *w) { int k,i; double sum; for(k=2,i=0;i { s[i]=k; k+=2; } sun=0.0; for(k=0,i=0;i { sum+=s[i]; if(i+1%5==0) { w[k]=sum/5; sum=0; k++; } } return k; } 解题思路: 第一处:sum。第二处:if((i+1)%5==0)。 *************************学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。参考答案: #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[*n]=a[i] ; (*n)++; } return ave ; } ※※※※※※※※※※※※ 第09套: 给定程序中,函数fun的功能 是:求出形参ss所指字符串数 组中最长字符串的长度,其余 字符串左边用字符*补齐,使 其与最长的字符串等长。字符 串数组中共有M个字符串, 且串长 给定源程序: #include #include if(i==0) n=len; if(len>n) { n=len; ___1___=i; } } for(i=0; i if (i!=k) { m=n; len=strlen(ss[i]); for(j=___2___; j>=0; j--) ss[i][m--]=ss[i][j]; for(j=0; j ___3___='*'; } } 解题思路: 第一处:k。第二处:len。 第三处:ss[i][j]。 ************************* 给定程序MODI1.C中函数 fun的功能是: 计算整数n的 阶乘 给定源程序: #include double fun(int n) { double result=1.0; while (n>1 && n<170) result*=--n; return _____; } main() { 解题思路: 第一处:--n是先减1,n--是 后减1。本题应该先乘以n, 再减1,才正确。第二处: result。 ************************* 编写函数fun,函数的功能是: 从s所指的字符串中删除给定 的字符。同一字母的大、小写 按不同字符处理。若程序执行 时输入字符串为: turbo c and borland c++从键盘上输入字 符:n, 则输出后变为: turbo c ad borlad c++如果输入的字符 在字符串中不存在, 则字符 串照原样输出。 参考答案: int fun(char s[],char c) { char *p = s ; int i = 0 ; while(*p) { if(*p != c) s[i++] = *p ; p++ ; } s[i] = 0 ; } ※※※※※※※※※※※※ 第10套: 函数fun的功能是:统计所有 小于等于n(n>2)的素数的个 数,素数的个数作为函数值返 回。 给定源程序: #include int fun(int n) { int i,j, count=0; printf("\nThe prime number between 3 to %d\n", n); for (i=3; i<=n; i++) { for (___1___; j if (___2___%j == 0) break; if (___3___>=i) { count++; printf( count%15? "%5d":"\n%5d",i); } 解题思路: 第一处:2。第二处:i。第 三处:j。 ************************* 数列中,第一项值为3, 后一项 都比前一项的值增5;给定程 序MODI1.C中函数fun的功 能是: 计算前n(4 累加和;每累加一次把被4除 后余2的当前累加值放入数 组中, 符合此条件的累加值 的个数作为函数值返回主函 数。例如, 当n的值为20时, 该数列为 3,8,13,18,23,28,……,93,98。符 合此条件的累加值应为 42,126,366,570,1010。 给定源程序: #include #define N 20 int fun(int n,int *a) { int i,j,k,sum; sum=j==0; for(k=3,i=0;i { sum=sum+k; if(sum%4=2) a[j++]=sum; } return j; } 解题思路: 第一处:sum=j=0;。第二处: 条件相等符号为==。 ************************* 请编写函数fun, 其功能是: 计算并输出下列多项式的值: 例如, 在主函数中从键盘给n 输入8后, 输出为: s=0.662872。注意: 要求n的 值大于1但不大于100。 参考答案: double fun(int n) { int i; double sum=0.0; if (n>1 && n<=100) { for(i=1; i<=n; i++) sum+=1.0/(2*i-1)-1.0/(2*i); } return sum; } ※※※※※※※※※※※※ 第11套: 给定程序中,函数fun的功能 是将带头结点的单向链表逆 置。即若原链表中从头至尾结 点数据域依次为:2、4、6、8、 10,逆置后,从头至尾结点数 据域依次为: 10、8、6、4、2。 给定源程序: #include #include void fun(NODE *h) { NODE *p, *q, *r; p = h->__1__; if (p==__2__) return; q = p->next; p->next = NULL; while (q) { r = q->next; q->next = p; p = q; q = __3__; } h->next = p; } 解题思路: 第一处:h->next。第二处: 0。第三处:r。 ************************* 给定程序MODI1.C中函数 fun的功能是: 计算s所指字 符串中含有t所指字符串的数 目, 并作为函数值返回。 给定源程序: #include #include #define N 80 while ( *s ) { p=s; r=p; while(*r) if(*r==*p) { r++; p++; } else break; if(*r= 0) n++; s++; } return n; } 解题思路: 第一处: r=t;。第二处: if(*r==0)。 ************************* 请编写函数fun, 函数的功能是: 将放在字符串数组中的M个字符串(每串的长度不超过N), 按顺序合并组成一个新的字符串。函数fun中给出的语句仅供参考。例如, 字符串数组中的M个字符串为AAAA BBBBBBB CC 则合并后的字符串的内容应是: AAAABBBBBBBCC。 参考答案: #include #define M 3 #define N 20 void fun(char a[M][N], char *b) { /* 以下代码仅供参考*/ int i; *b=0; for(i = 0 ; i < M ; i++) strcat(b, a[i]) ; } ※※※※※※※※※※※※ 第12套: 给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。 给定源程序: #include #include #define N 5 typedef struct node { int data; struct node *next; } NODE; __1__ * fun(NODE *h) { NODE *p, *q, *r; p = h; if (p == NULL) return NULL; q = p->next; p->next = NULL; while (q) { r = q->__2__; q->next = p; p = q; q = __3__ ; } return p; } 解题思路: 第一处:NODE *。第二处:next。第三处:r。 ************************* 给定程序MODI1.C中函数fun的功能是: 将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t 所指数组中(规定第一个字符放在第0位中)。例如, 字符串中的数据为: AABBCCDDEEFF,则输出应当是:ABBCDDEFF。给定源程序: #include #include #define N 80 void fun(char *s, char t[]) { int i, j=0; for(i=0; i if(i%2 && s[i]%2==0) t[j++]=s[i]; t[i]='\0'; } 解题思路: 第一处: if(i%2 || s[i]%2==0)。 第二处: t[j]=0;。 ************************* 请编写函数fun, 函数的功能 是: 将M行N列的二维数组 中的数据, 按列的顺序依次 放到一维数组中。函数fun中 给出的语句仅供参考。 例如, 二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应是: 33 44 55 33 44 55 33 44 55 33 44 55。 参考答案: void fun(int (*s)[10], int *b, int *n, int mm, int nn) { /* 以下代码仅供参考*/ int i,j,np=0; /* np用作b数组 下标*/ for(i = 0 ; i < nn ; i++) for(j = 0 ; j < mm ; j++) { b[np] = s[j][i] ; np = i * mm + j + 1; } *n=np; } ※※※※※※※※※※※※ 第13套: 给定程序中,函数fun的功能 是将带头节点的单向链表结 点数据域中的数据从小到大 排序。即若原链表结点数据域 从头至尾的数据为:10、4、2、 8、6,排序后链表结点数据域 从头至尾的数据为:2、4、6、 8、10。 给定源程序: #include #include #define N 6 { NODE *p, *q; int t; p = __1__ ; while (p) { q = __2__ ; while (q) { if (p->data __3__ q->data) { t = p->data; p->data = q->data; q->data = t; } q = q->next; } p = p->next; } } 解题思路: 第一处:h->next。第二处: p->next。第三处:>(或>=)。 ************************* 给定程序MODI1.C是建立一 个带头结点的单向链表, 并 用随机函数为各结点数据域 赋值。函数fun的作用是求出 单向链表结点(不包括头结点) 数据域中的最大值,并且作为 函数值返回。 给定源程序: #include #include typedef struct aa { int data; struct aa *next; } NODE; fun ( NODE *h ) { int max=-1; NODE *p; p=h ; while(p) { if(p->data>max ) max=p->data; p=h->next ; } return max; } 解题思路: 第一处: p=h->next;。第二处: p=p->next, ************************* 请编写函数fun, 函数的功能 是: 将M行N列的二维数组 中的数据,按行的顺序依次放 到一维数组中, 一维数组中 数据的个数存放在形参n所 指的存储单元中。 例如, 二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应是: 33 33 33 33 44 44 44 44 55 55 55 55。 参考答案: void fun(int (*s)[10], int *b, int *n, int mm, int nn) { int i, j, k ; for(i = 0 ; i < mm ; i++) for(j = 0 ; j < nn ; j++) { k = i * nn + j ; b[k] = s[i][j] ; } *n = mm * nn ; } main() { int w[10][10] = {{33,33,33,33},{44,44,44,44}, {55,55,55,55}},i,j ; int a[100] = {0}, n = 0 ; printf("The matrix:\n") ; for(i = 0 ; i < 3 ; i++) { for(j = 0 ; j < 4 ; j++) printf("%3d",w[i][j]) ; printf("\n") ; } fun(w, a, &n, 3, 4) ; printf("The A array:\n") ; for(i = 0 ; i < n ; i++) printf("%3d",a[i]);printf("\n\n") ; NONO() ; } ※※※※※※※※※※※※ 第14套: 给定程序中, 函数fun的功能 是用函数指针指向要调用的 函数,并进行调用。规定在 __2__处使f指向函数f1,在 __3__处使f指向函数f2。当 调用正确时,程序输出: x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000 给定源程序: #include double f1(double x) { return x*x; } double f2(double x, double y) { return x*y; } double fun(double a, double b) { __1__ (*f)(); double r1, r2; f = __2__ ; /* point fountion f1 */ r1 = f(a); f = __3__ ; /* point fountion f2 */ r2 = (*f)(a, b); return r1 + r2; } 解题思路: 第一处:double。第二处: f1。第三处:f2。 ************************* 给定程序MODI1.C是建立一 个带头结点的单向链表,并用 随机函数为各结点赋值。函数 fun的功能是将单向链表结点 (不包括头结点)数据域为偶数 的值累加起来, 并且作为函 数值返回。 给定源程序: #include #include { int sum = 0 ; NODE *p; p=h; while(p) { if(p->data%2==0) sum +=p->data; p=h->next; } return sum; } 解题思路: 第一处:p=h->next; 第二处: p=p->next; ************************* 请编写函数fun, 函数的功能 是: 判断字符串是否为回文? 若是, 函数返回1,主函数中 输出: YES, 否则返回0, 主函 数中输出NO。回文是指顺读 和倒读都一样的字符串。 例如, 字符串LEVEL是回文, 而字符串123312就不是回文。 参考答案: int fun(char *str) { int i, j = strlen(str) ; for(i = 0 ; i < j / 2 ; i++) if(str[i] != str[j - i - 1]) return 0 ; return 1 ; } main() { char s[N] ; printf("Enter a string: ") ; gets(s) ; printf("\n\n") ; puts(s) ; if(fun(s)) printf(" YES\n") ; else printf(" NO\n") ; NONO() ; } ※※※※※※※※※※※※ 第15套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun 的功能是从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖原数据,其它学生数据不变;若找不到,则什么都不做。给定源程序: #include #define N 5 void fun(char *filename, long sno) { FILE *fp; STU n; int i; fp = fopen(filename,"rb+"); while (!feof(__1__)) { fread(&n, sizeof(STU), 1, fp); if (n.sno__2__sno) break; } if (!feof(fp)) { for (i=0; i<3; i++) n.score[i] += 3; fseek(__3__, -1L*sizeof(STU), SEEK_CUR); fwrite(&n, sizeof(STU), 1, fp); } fclose(fp); } 解题思路: 第一处:fp。第二处:==。第三处:fp。 ************************* 给定程序MODI1.C中函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序。然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入 到前三个字符中,……。待排 序的字符串已在主函数中赋 予。 给定源程序: #include #include #define N 80 void insert(char *aa) { int i,j,n; char ch; n=strlen[ aa ]; for( i=1; i c=aa[i]; j=i-1; while ((j>=0) && ( ch { aa[j+1]=aa[j]; j--; } aa[j+1]=ch; } } 解题思路: 第一处: n=strlen(aa) ;。第二处: ch=aa[i];。 ************************* N名学生的成绩已在主函数 中放入一个带头节点的链表 结构中,h指向链表的头节点。 请编写函数fun,它的功能是: 找出学生的最高分,由函数值 返回。 参考答案: double fun( STREC *h ) { double max=h->s; STREC *p; p=h->next; while(p) { if(p->s>max ) max=p->s; p=p->next; } return max; } 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(S TREC)); 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("->%2.0f",p->s);p=p-> next;} while(p!=0); printf("\n\n"); } ※※※※※※※※※※※※ 第16套: 给定程序中,函数fun的功能 是:求出形参ss所指字符串数 组中最长字符串的长度,将其 余字符串右边用字符*补齐, 使其与最长的字符串等长。ss 所指字符串数组中共有M个 字符串,且串长 给定源程序: #include #include #define M 5 #define N 20 } for(i=0; i n=strlen(___1___); for(j=0; j ss[i][ ___2___]='*'; ss[i][n+j+ ___3___]='\0'; } } 解题思路: 第一处:ss[i]。第二处:n+j。 第三处:1。 ************************* 给定程序MODI1.C中fun 函 数的功能是:将p所指字符串 中每个单词的最后一个字母 改成大写。(这里的“单词” 是指由空格隔开的字符串)。 例如, 若输入"I am a student to take the examination.",则应 输出"I aM A studenT tO takE thE examination."。 给定源程序: #include #include void fun( char *p ) { int k = 0; for( ; *p; p++ ) if( k ) { if( p == ' ' ) { k = 0; * (p-1) = toupper( *( p - 1 ) ) } } else k = 1; } 解题思路: 第一处:关键字int错写成 INT。第二处:只要加上一个 右括号即可。 ************************* 请编写函数fun, 对长度为7 个字符的字符串, 除首、尾字 符外,将其余5个字符按 ASCII码降序排列。例如,原 来的字符串为CEAedca,排 序后输出为CedcEAa 。 参考答案: 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 ; } } } ※※※※※※※※※※※※ 第17套: 程序通过定义学生结构体数 组,存储了若干名学生的学 号、姓名和3门课的成绩。函 数fun的功能是将存放学生数 据的结构体数组,按照姓名的 字典序(从小到大)排序。 给定源程序: #include #include struct student { long sno; char name[10]; float score[3]; }; void fun(struct student a[], int n) { __1__ t; int i, j; for (i=0; i<__2__; i++) for (j=i+1; j if (strcmp(__3__) > 0) { t = a[i]; a[i] = a[j]; a[j] = t; } } 解题思路: 第一处:struct student。第 二处:n-1。第三处: a[i].name,a[j].name。 ************************* 给定程序MODI1.C中函数 fun的功能是:在p所指字符 串中找出ASCII码值最大的 字符,将其放在第一个位置 上;并将该字符前的原字符向 后顺序移动。例如,调用fun 函数之前给字符串输入: ABCDeFGH,调用后字符串中 的内容为:eABCDFGH。 给定源程序: #include fun( char *p ) { char max,*q; int i=0; max=p[i]; while( p[i]!=0 ) { if( max \TAB { max=p[i]; \TAB q=p+i \TAB } i++; } wihle( q>p ) { *q=*(q-1); q--; } p[0]=max; } 解题思路: 第一处:q=p+i;。第二处: 保留字while写错,所应改为: while(q>p)。 ************************* 学生的记录由学号和成绩组 成,N名学生的数据已在主函数中放入结构体数组s中, 请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。例如,输入的分数是60 69, 则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。 参考答案: int fun( STREC *a,STREC *b,int l, int h ) { int i,j = 0 ; for(i = 0 ; i < N ; i++) if(a[i].s >= l && a[i].s <= h) b[j++] = a[i] ; return j ; } ※※※※※※※※※※※※ 第18套: 给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。 给定源程序: #include #include #include for(i=0; i { if(((s[i]>='a')&&(s[i]<='z'))||( (s[i]>='A')&&(s[i]<='Z'))) { t[j]=__1__; j++;} else { p[k]=s[i]; k++; } } for(i=0; i<__2__; i++) t[j+i]=p[i]; t[j+k]= __3__; return t; } 解题思路第一处:s[i]。第二处:k。第三处:'\0'。************************* 给定程序MODI1.C中函数fun 的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为:"abcdabfabc",t1所指子串中的内容为:"ab",t2所指子串中的内容为:"99"时,结果,在w所指的数组中的内容应为:"abcdabf99c"。 给定源程序: #include #include int fun (char *s, char *t1, char *t2 , char *w) { int i; char *p , *r, *a; strcpy( w, s ); while ( w ) { p = w; r = t1; while ( *r ) IF ( *r == *p ) { r++; p++; } else break; if ( *r == '\0' ) a = w; w++; } r = t2; while ( *r ){ *a = *r; a++; r++; } } 解题思路: 第一处:while(*w)。第二处: if错写成If。 ************************* 函数fun的功能是:将s所指 字符串中ASCII值为奇数的 字符删除,串中剩余字符形成 一个新串放在t所指的数组 中。例如,若s所指字符串中 的内容为: "ABCDEFG12345",其中字符 A的ASCII码值为奇数、…、 字符1的ASCII码值也为奇 数、…都应当删除,其它依 此类推。最后t所指的数组中 的内容应是:"BDF24"。 参考答案: void fun(char *s, char t[]) { int i, j = 0 ; for(i = 0 ; i < strlen(s); i++) if(s[i] % 2==0) t[j++] = s[i] ; t[j] = 0 ; } ※※※※※※※※※※※※ 第19套: 程序通过定义学生结构体变 量,存储了学生的学号、姓名 和3门课的成绩。函数fun的 功能是将形参a所指结构体变 量s中的数据进行修改,并把a 中地址作为函数值返回主函 数,在主函数中输出修改后的 数据。例如:a所指变量s中 的学号、姓名、和三门课的成 绩依次是:10001、" ZhangSan "、95、80、88,修改后输出t 中的数据应为:10002、"LiSi "、96、81、89。 给定源程序: #include #include struct student { long sno; char name[10]; float score[3]; }; __1__ fun(struct student *a) { int i; a->sno = 10002; strcpy(a->name, "LiSi"); for (i=0; i<3; i++) __2__ += 1; return __3__ ; } 解题思路: 第一处:struct student *。第 二处:a->score[i]。第三处: a。 ************************* 给定程序MODI1.C中函数 fun的功能是:从N个字符串 中找出最长的那个串,并将其 地址作为函数值返回。各字符 串在主函数中输入,并放入一 个字符串数组中。 给定源程序: #include #include #define N 5 #define M 81 fun(char (*sq)[M]) { int i; char *sp; sp=sq[0]; for(i=0;i if(strlen( sp) sp=sq[i] ; return sq; } 解题思路: 第一处: char *fun(char (*sq)[M])。第二处: return sp;。 ************************* 函数fun的功能是:将a、b 中的两个两位正整数合并形 成一个新的整数放在c中。合 并的方式是:将a中的十位和 个位数依次放在变量c的百位 和个位上,b中的十位和个位 数依次放在变量c的十位和千 位上。例如,当a=45,b=12。 调用该函数后,c=2415。 参考答案: void fun(int a, int b, long *c) { *c = (b%10)*1000+(a/10)*100+(b/1 0)*10+a%10; } ※※※※※※※※※※※※ 第20套: 给定程序中,函数fun的功能 是:计算形参x所指数组中N 个数的平均值(规定所有数均 为正数),将所指数组中小于 平均值的数据移至数组的前 部,大于等于平均值的数据移 至x所指数组的后部,平均值 作为函数值返回,在主函数中 输出平均值和移动后的数据。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值 为:30.500000 移动后的输出为:30 6 17 15 26 46 32 40 45 48 给定源程序: #include #include #define N 10 double fun(double *x) { int i, j; double av, y[N]; av=0; for(i=0; i for(i=j=0; i if( x[i] y[j]=x[i]; x[i]=-1; __2__;} i=0; while(i { if( x[i]!= -1 ) y[j++]=x[i]; __3__; } for(i=0; i return av; } 解题思路: 第一处:N。第二处:j++。 第三处:i++ ************************* 给定程序MODI1.C中函数 fun 的功能是:统计字符串中 各元音字母(即:A、E、I、 O、U)的个数。注意:字母 不分大、小写。例如:若输入: THIs is a boot,则输出应该是: 1、0、 2、2、0。 给定源程序: #include fun ( char *s, int num[5] ) { int k, i=5; for ( k = 0; k num[i]=0; for (; *s; s++) { i = -1; switch ( s ) { case 'a': case 'A': {i=0; break;} case 'e': case 'E': {i=1; break;} case 'i': case 'I': {i=2; break;} case 'o': case 'O': {i=3; break;} case 'u': case 'U': {i=4; break;} } 解题思路: 第一处:num[k]=0;。第二 处:switch(*s)。 ************************* 请编写函数fun,函数的功能 是求出二维数组周边元素之 和,作为函数值返回。二维数 组中的值在主函数中赋予。例 如:二维数组中的值为1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为61。 参考答案: int fun ( int a[M][N] ) { int tot = 0, i, j ; for(i = 0 ; i < N ; i++) { tot += a[0][i] ; tot += a[M-1][i] ; } for(i = 1 ; i < M - 1 ; i++) { tot += a[i][0] ; tot += a[i][N-1] ; } return tot ; } ※※※※※※※※※※※※ 第21套: 给定程序中,函数fun的功能是:计算形参x所指数组中N 个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000移动后的输出为:46 32 40 45 48 30 6 17 15 26 给定源程序: #include #include #define N 10 double fun(double *x) { int i, j; double s, av, y[N]; s=0; for(i=0; i av=__1__; for(i=j=0; i if( x[i]>av ){ y[__2__]=x[i]; x[i]=-1;} for(i=0; i if( x[i]!= __3__) y[j++]=x[i]; for(i=0; i } 解题思路: 第一处:s/N。第二处:j++。第三处:-1。 ************************* 给定程序MODI1.C的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。例如,若输入:I am a student to take the examination.,则应输出:I Am A Student To Take The Examination.。 给定源程序: #include #include include upfst ( char p ) { int k=0; for ( ; *p; p++ ) if ( k ) { if ( *p == ' ' ) k = 0; } else if ( *p != ' ' ) { k = 1; *p = toupper( *p ); } } 解题思路: 第一处:在include前漏写了#。第二处:upfst(char *p)。 *************************程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。例如:a 数组中的值为 |0 1 2 7 9| |1 9 7 4 5| a = |2 3 8 3 1| |4 5 6 8 2| |5 9 1 4 1| 则返回主程序后s的值应为: 3.375。 参考答案: double fun ( int w[][N] ) { int i, j, n=0; double sum=0; for ( i =0; i sum+=w[0][i]+w[N-1][i]; n+=2; } for ( i =1; i sum +=w[i][0]+w[i][N-1]; n+=2; } return sum/n; } ※※※※※※※※※※※※ 第22套: 给定程序中,函数fun的功能 是:将自然数1~10以及它们 的平方根写到名为myfile3.txt 的文本文件中,然后再顺序读 出显示在屏幕上。 给定源程序: #include #include int fun(char *fname ) { FILE *fp; int i,n; float x; if((fp=fopen(fname, "w"))==NULL) return 0; for(i=1;i<=10;i++) fprintf(___1___,"%d %f\n",i,sq rt((double)i)); printf("\nSucceed!!\n"); ___2___; printf("\nThe data in file :\n"); if((fp=fopen(___3___,"r"))==N ULL) return 0; fscanf(fp,"%d%f",&n,&x); 解题思路: 第一处:fp。第二处: fclose(fp)。第三处: "myfile3.dat"。 ************************* 给定程序MODI1.C中fun函 数的功能是:将n个无序整数 从小到大排序。请改正程序中 的错误,使它能得出正确的结 果。 给定源程序: #include #include fun ( int n, int *a ) { int i, j, p, t; for ( j = 0; j { p = j; for ( i=j+1; i if ( a[p]>a[i] ) t=i; if ( p!=j ) { t = a[j]; a[j] = a[p]; a[p] = t; } 解题思路: 第一处:for循环的终止值应 该 p=i;。 ************************* 函数fun的功能是: 将两个两 位数的正整数a、b合并形成 一个整数放在c中。合并的方 式是: 将a数的十位和个位数 依次放在c数的个位和百位上, b数的十位和个位数依次放在 c数的十位和千位上。例如, 当a=45, b=12时, 调用该函数 后, c=2514。 参考答案: void fun(int a, int b, long *c) { *c=(b%10)*1000+(a%10)*100 +(b/10)*10+(a/10); } ※※※※※※※※※※※※ 第23套: 给定程序中,函数fun的功能 是:找出N×N矩阵中每列元 素中的最大值,并按顺序依次 存放于形参b所指的一维数 组中。 给定源程序: #include #define N 4 void fun(int (*a)[N], int *b) { int i,j; for(i=0; i b[i]= __1__; for(j=1; j if(b[i] __2__ a[j][i]) b[i]=a[j][i]; } } main() { int x[N][N]={ {12,5,8,7},{6,1,9,3 },{1,2,3,4},{2,8,4,3} },y[N],i,j; printf("\nThe matrix :\n"); for(i=0;i { for(j=0;j printf("%4d",x[i][j]); printf("\n"); } fun(__3__); printf("\nThe result is:"); for(i=0; i printf("%3d",y[i]); printf("\n"); } 解题思路: 第一处:a[0][i]。第二处:<。 第三处:x,y。 ************************* 给定程序MODI1.C中函数 fun的功能是: 交换主函数中 两个变量的值。例如:若变量a 中的值原为8,b中的值为3。 程序运行后a中的值为3, b中 的值为8。 给定源程序: #include int fun(int x,int y) { int t; t=x;x=y;y=t; } main() { int a,b; a=8;b=3; fun(&a,&b); printf("%d, %d\n",a,b); } 解题思路: 第一处:int *x,int *y。第二 处:t=*x;*x=*y;*y=t;。 ************************* 编写函数fun, 函数的功能是 求出小于或等于lim的所有素 数并放在aa数组中,函数返回 所求出的素数的个数。函数 fun中给出的语句仅供参考。 参考答案: int fun(int lim, int aa[MAX]) { /* 以下代码仅供参考*/ int i,j,k=0; for(i=2;i<=lim;i++) { for(j = 2 ; j <= (i/2) ; j++) if(i % j == 0) break; if(j > (i/2)) aa[k++] = i; } return k; } ※※※※※※※※※※※※ 第24套: 程序通过定义学生结构体变 量,存储了学生的学号、姓名 和3门课的成绩。函数fun的 功能是将形参a中的数据进行 修改,把修改后的数据作为函 数值返回主函数进行输出。 例如:传给形参a的数据中, 学号、姓名、和三门课的成绩 依次是:10001、"ZhangSan"、 95、80、88,修改后的数据应 为:10002、"LiSi"、96、81、 89。 给定源程序: #include #include struct student { long sno; char name[10]; float score[3]; }; __1__ fun(struct student a) { int i; a.sno = 10002; strcpy(__2__, "LiSi"); for (i=0; i<3; i++) __3__+= 1; return a; } 解题思路: 第一处:struct student。第 二处: https://www.wendangku.net/doc/de6283967.html,。第三处: a.score[i]。 ************************* 假定整数数列中的数不重复, 并存放在数组中。给定程序 MODI1.C中函数fun的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。 给定源程序: #include #define N 20 fun(int *a,int n,int x) { int p=0,i; a[n]=x; while( x!=a[p] ) \TAB p=p+1; if(P==n) return -1; else { for(i=p;i \TAB a[i+1]=a[i]; return n-1; } } 解题思路: 第一处: 条件语句中的小写p 错写成大写P了。第二处: a[i]=a[i+1];。 ************************* 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中, 请编写函数fun,它的功能是:把分数最低的学生数据放在b 所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。参考答案: int fun( STREC *a, STREC *b ) { int i, j = 0, min=a[0].s ; for(i = 0 ; i < N; i++) { if(min > a[i].s) { j = 0 ; b[j++] = a[i] ; min = a[i].s ; } else if(min == a[i].s) b[j++] = a[i] ; } return j ; } ※※※※※※※※※※※※第25套: 人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun 的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。 给定源程序: #include #include #define N 8 typedef struct { char num[10]; int year,month,day ; }STU; ___1___ fun(STU *std, char *num) { int i; STU a={"",9999,99,99}; for (i=0; i if( strcmp(___2___,num)==0 ) return (___3___); return a; } 解题思路: 第一处:STU。第二处: stu[i].num。第三处:std[i]。 ************************* 给定程序MODI1.C中函数 fun的功能是:从s所指字符 串中,找出与t所指字符串相 同的子串的个数作为函数值 返回。例如,当s所指字符串 中的内容为:"abcdabfab",t 所指字符串的内容为:"ab", 则函数返回整数3。 给定源程序: #include #include int fun (char *s, char *t) { int n; char *p , *r; n = 0; while ( *s ) { p = s; r = t; while ( *r ) if ( *r == *p ) { r++; p++ } else break; if ( r == '\0' ) n++; s++; } return n; } main() { 解题思路: 第一处:语句后缺少分号。第 二处:if(*r==0)。 ************************* 函数fun的功能是:将s所指 字符串中ASCII值为偶数的 字符删除,串中剩余字符形成 一个新串放在t所指的数组 中。例如,若s所指字符串中 的内容为: "ABCDEFG12345",其中字符 B的ASCII码值为偶数、…、 字符2的ASCII码值为偶 数、…都应当删除,其它依此 类推。最后t所指的数组中的 内容应是:"ACEG135"。 参考答案: 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 ; } ※※※※※※※※※※※※ 第26套: 给定程序中已建立一个带有 头结点的单向链表,链表中的 各结点按数据域递增有序链 接。函数fun的功能是:删除 链表中数据域值相同的结点, 使之只保留一个。 给定源程序: #include #include #define N 8 { q=p->next; while(q!=NULL) { if (p->data==q->data) { p->next=q->next; free(___1___); q=p->___2___; } else { p=q; q=q->___3___; } } } } 解题思路: 第一处:填q。第二处:填 next。第三处:填next。 ************************* 给定程序MODI1.C中函数 fun的功能是:用选择法对数 组中的n个元素按从小到大 的顺序进行排序。 给定源程序: #include #define N 20 void fun(int a[], int n) { int i, j, t, p; for (j = 0 ;j < n-1 ;j++) { p = j for (i = j;i < n; i++) if(a[i] < a[p]) p = j; t = a[p] ; a[p] = a[j] ; a[j] = t; } } 解题思路: 第一处:语句后缺少分号。第 二处:p = i;。 ************************* 请编写一个函数fun,它的功 能是:求出1到m之间(含m) 能被7或11整除的所有整数 放在数组a中,通过n返回这 些数的个数。例如,若传送给 m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49 参考答案: #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 ; } ※※※※※※※※※※※※ 第27套: 给定程序中,函数fun的功能 是:计算下式前n项的和作为 函数值返回。例如,当形参n 的值为10时,函数返回: 9.612558。 给定源程序: #include double fun(int n) { int i; double s, t; s=__1__; for(i=1; i<=__2__; i++) { t=2.0*i; s=s+(2.0*i-1)*(2.0*i+1)/__3__ ; } return s; } 第一处:0。第二处:n。第 三处:t*t。 ************************* 给定程序MODI1.C中函数 fun 的功能是:统计substr所 指子字符串在str所指字符串 中出现的次数。例如,若字符 串为aaas lkaaas,子字符串为 as,则应输出2。 给定源程序: #include fun (char *str,char *substr) { int i,j,k,num=0; for(i = 0, str[i], i++) for(j=i,k=0;substr[k]==str[j];k+ +,j++) If(substr[k+1]=='\0') { num++; break; } return num; } 解题思路: 第一处:循环for语句中应有 分号。第二处:if错写成If。 ************************* 请编写一个函数fun,它的功 能是:根据以下公式求鸬闹 (要求满足精度0.0005, 即某 项小于0.0005时停止迭代): 1 1 2 1 2 3 1 2 3 4 1 2讌譶─ = 1+─+─—+────+── ────+……+───── ─── 2 3 3×5 3×5×7 3×5×7×9 3×5×…×(2n+1)程序 运行后,如果输入精度 0.0005,则程序输出为3.14…。 参考答案: double fun ( double eps) { double s=1,t=1./3; int n=1; while(t>=eps){ s+=t; n++; t=t*n/(2.0*n+1); } return (s*2.0); } main( ) { double x; printf("Input eps:") ; scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x)); NONO(); } ※※※※※※※※※※※※ 第28套: 给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。 给定源程序: #include void fun(char *s, int *t) { int i, n; n=0; for(i=0; ___1___ !=NULL; i++) if(s[i]>='0'&&s[i]<= ___2___ ) n++; ___3___ ; } 解题思路: 第一处:s[i]。第二处:'9'。第三处:*t=n。 ************************* 给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a 中的值原为8,b中的值原为3, 程序运行后 a 中的值为3,b中的值为8。给定源程序: #include int fun(int *x,int y) { int t ; t = x ; x = y ; return(y) ; } main() 解题思路: 第一处:t=*x;*x=y;。第二处:return(t);。 ************************* 请编写函数fun,它的功能是: 求出 1 到1000 之间能被7 或11整除、但不能同时被7 和11 整除的所有整数并将它们放在a所指的数组中,通过n 返回这些数的个数。 参考答案: 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 ; } ※※※※※※※※※※※※ 第29套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。例如: b所指变量t中的学号、 姓名、和三门课的成绩依次是: 10002、"ZhangQi"、93、85、 87,修改后输出t中的数据应 为:10004、" LiJie "、93、85、 87。 给定源程序: #include #include struct student { long sno; char name[10]; float score[3]; }; void fun( struct student *b) { int i; b__1__ = 10004; strcpy(b__2__, "LiJie"); } main() { struct student t={10002,"ZhangQi", 93, 85, 87}; int i; printf("\n\nThe original data :\n"); printf("\nNo: %ld Name: %s\nScores: ",t.sno, https://www.wendangku.net/doc/de6283967.html,); for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); printf("\n"); fun(__3__); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",t.sno, https://www.wendangku.net/doc/de6283967.html,); for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); printf("\n"); } 解题思路: 第一处:->no。第二处: ->name。第三处:&t。 ************************* 给定程序MODI1.C中函数 fun的功能是:应用递归算法 求形参a的平方根。求平方根 的迭代公式如下: 1 a x1 = ─( x0 + ─) 2 x0 例如,a为2时,平方根值为: 1.414214。 给定源程序: #include #include double fun(double a, dounle x0) { double x1, y; x1=(x0+ a/x0)/2.0; i f( fabs(x1-xo)>0.00001 ) \TAB y=fun(a,x1); else y=x1; return y; } 解题思路: 第一处: 第二个变量定义的 保留字double写错。第二处: 变量x0错写成xo了。 ************************* 学生的记录由学号和成绩组 成,N名学生的数据已在主函 数中放入结构体数组s中, 请 编写函数fun,它的功能是: 把高于等于平均分的学生数 据放在b所指的数组中,高于 等于平均分的学生人数通过 形参n传回,平均分通过函数 值返回。 参考答案: double fun( STREC *a, STREC *b, int *n ) { double t=0 ; int i ; *n = 0 ; for(i = 0 ; i < N ; i++) t = t + a[i].s ; t = t / N ; for(i = 0 ; i < N ; i++) if(a[i].s > t) b[(*n)++] = a[i] ; return t ; } ※※※※※※※※※※※※ 第30套: 程序通过定义学生结构体变 量,存储了学生的学号、姓名 和3门课的成绩。函数fun的 功能是将形参a所指结构体变 量中的数据赋给函数中的结 构体变量b,并修改b中的学 号和姓名,最后输出修改后的 数据。例如:a所指变量中的 学号、姓名、和三门课的成绩 依次是:10001、"ZhangSan"、 95、80、88,则修改后输出b 中的数据应为:10002、"LiSi"、 95、80、88。 给定源程序: #include #include struct student { long sno; char name[10]; float score[3]; }; void fun(struct student a) { struct student b; int i; b = __1__; b.sno = 10002; strcpy(__2__, "LiSi"); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",b.sno, https://www.wendangku.net/doc/de6283967.html,); for (i=0; i<3; i++) printf("%6.2f ", b.__3__); printf("\n"); } 解题思路: 第一处:a。第二处:https://www.wendangku.net/doc/de6283967.html,。 第三处:score[i]。 ************************* 给定程序MODI1.C中函数 fun的功能是:从s所指字符 串中删除所有小写字母c。请 改正程序中的错误,使它能计 算出正确的结果。 #include void fun( char *s ) { int i,j; for(i=j=0; s[i]!='\0'; i++) if(s[i]!='c') \TAB s[j]=s[i]; s[i]='\0'; } 解题思路: 第一处: s[j++]=s[i];。第二处: s[j]=0;。 假定输入的字符串中只包含 字母和*号。请编写函数fun, 它的功能是:将字符串中的前 导*号全部移到字符串的尾 部。函数fun中给出的语句仅 供参考。例如,字符串中的内 容为: *******A*BC*DEF*G****, 移动后,字符串中的内容应当 是: A*BC*DEF*G***********。 在编写函数时, 不得使用C语 言提供的字符串函数。 参考答案: void fun( char *a ) { char *p,*q; int n=0; p=a; while(*p=='*') {n++; p++;} q=a; while(*p) { *q=*p; p++;q++; } for(;n>0;n--) / *q++='*'; *q='\0'; } ※※※※※※※※※※※※ 第31套: 给定程序中,函数fun的功能 是:对形参s所指字符串中下 标为奇数的字符按ASCII码 大小递增排序,并将排序后下 标为奇数的字符取出,存入形 参p所指字符数组中,形成一 个新串。例如,形参s所指的 字符串为:baawrskjghzlicda, 执行后p所指字符数组中的 字符串应为:aachjlsw。 给定源程序: #include void fun(char *s, char *p) { int i, j, n, x, t; n=0; for(i=0; s[i]!='\0'; i++) n++; for(i=1; i ___1___; for(j=___2___+2 ; j if(s[t]>s[j]) t=j; if(t!=i) { x=s[i]; s[i]=s[t]; s[t]=x; } } for(i=1,j=0; i p[j]=___3___; } 解题思路: 第一处:t=i。第二处:i。第三处:'\0'。 ************************* 给定程序MODI1.C中函数fun 的功能是:用下面的公式求鸬慕 浦担 钡最后一项的绝对值小于指定的数(参数num )为止: 1 1 1 ┄┄≈1 - ┄┄+ ┄┄- ┄┄+ ... 4 3 5 7 例如, 程序运行后, 输入0.0001, 则程序输出3.1414。给定源程序: #include #include float fun ( float num ) { int s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s = 1 ; while(t >= num) { pi = pi + t ; n = n + 2 ; s = -s ; t = s % n ; } pi = pi * 4 ; return pi ; } 解题思路: 第一处:while(fabs(t)>=num)。第二处:t=s/n;。 ************************* 请编写一个函数void fun (char a[],char b[],int n),其功能是:删除一个字符串中指定下标的字符。其中, a指向原字符串, 删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串: World,然后输入3,则调用该函数后的结果为: Word。 参考答案: void fun (char a[], char b[], int n) { strncpy(b, a, n) ; b[n] = 0 ; strcat(b, a + n + 1) ; } ※※※※※※※※※※※※第32套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。 给定源程序:#include #include #define N 5 #define M 10 void fun(char (*ss) __1__, int k) { int i=0 ; while(i< __2__) { ss[i][k]=__3__; i++; } } 解题思路: 第一处:M。第二处:N。 第三处:0(或'\0')。 ************************* 给定程序MODI1.C中函数 fun的功能是:根据以下公式 求鹬担 ⒆魑 返回。 例如,给指定精度的变量eps 输入0.0005时,应当输出 Pi=3.140578。 1 1 2 1 2 3 1 2 3 4─=1+ ─+ ─×─+ ─ ×─×─+ ─×─×─×─ +……2 3 3 5 3 5 7 3 5 7 9 给定源程序: #include #include double fun(double eps) { double s,t; int n=1; s=0.0; t=0; while( t>eps) { s+=t; t=t * n/(2*n+1); n++; } return(s); } 解题思路: 第一处: t应为1。第二处:返 回时应原有s的基础上乘以2 作为返回值。 ************************* 假定输入的字符串中只包含 字母和*号。请编写函数fun, 它的功能是:使字符串的前导 *号不得多于n个;若多于n 个,则删除多余的*号; 若少 于或等于n个,则什么也不做, 字符串中间和尾部的*号不删 除。函数fun中给出的语句仅 供参考。例如,字符串中的内 容为: *******A*BC*DEF*G****, 若n的值为4,删除后,字符 串中的内容应当是: ****A*BC*DEF*G****;若n 的值为8,则字符串中的内容 仍为: *******A*BC*DEF*G****。n 的值在主函数中输入。在编 写函数时,不得使用C语言提 供的字符串函数。 参考答案: void fun( char *a, int n ) { int i=0,j,k=0; while(a[k]=='*') k++; /* k为统 计*字符个数*/ if(k>n) { i=n;j=k; for(; a[j] !=0 ; j++) a[i++]=a[j]; a[i] = 0; } } ※※※※※※※※※※※※ 第33套: 给定程序的功能是:调用函数 fun将指定源文件中的内容复 制到指定的目标文件中,复制 成功时函数返回值为1,失败 时返回值为0。在复制的过程 中,把复制的内容输出到终端 屏幕。主函数中源文件名放在 变量sfname中,目标文件名 放在变量tfname中。 给定源程序: #include #include int fun(char *source, char *target) { FILE *fs,*ft; char ch; if((fs=fopen(source, ___1___))==NULL) return 0; if((ft=fopen(target, "w"))==NULL) return 0; printf("\nThe data in file :\n"); ch=fgetc(fs); while(!feof(___2___)) { putchar( ch ); fputc(ch,___3___); ch=fgetc(fs); } fclose(fs); fclose(ft); printf("\n\n"); return 1; } 解题思路: 第一处:fs。第二处:fs。 第三处:ft。 ************************* 给定程序MODI1.C中函数 fun的功能是:将长整型数中 每一位上为偶数的数依次取 出,构成一个新数放在t中。 高位仍在高位,低位仍在低 位。例如,当s中的数为: 87653142时,t中的数为: 8642。 给定源程序: #include void fun (long s, long *t) { int d; long sl=1; *t = 0; while ( s > 0) { d = s%10; if (d%2=0) { *t=d* sl+ *t; sl *= 10; } s \= 10; } } 解题思路: 第一处:==。第二处:整除 的符号是/。 ************************* 函数fun的功能是:将两个两 位数的正整数a、b合并形成 一个整数放在c中。合并的方 式是:将a数的十位和个位数 依次放在c数的十位和千位 上,b数的十位和个位数依 次放在c数的百位和个位上。 例如,当a=45,b=12时,调 用该函数后,c=5142。 参考答案: void fun(int a, int b, long *c) { *c=(a%10)*1000+(b/10)*100+ (a/10)*10+(b%10); } ※※※※※※※※※※※※ 第34套: 用筛选法可得到2~n (n<10000)之间的所有素数, 方法是:首先从素数2开始, 将所有2的倍数的数从数表 中删去(把数表中相应位置的 值置成0);接着从数表中找下 一个非0数,并从数表中删去 该数的所有倍数;依此类推, 直到所找的下一个数等于n 为止。这样会得到一个序列: 2,3,5,7,11,13,17,19, 23,……函数fun用筛选法找 出所有小于等于n的素数,并 统计素数的个数作为函数值 返回。 给定源程序: #include int fun(int n) { int a[10000], i,j, count=0; for (i=2; i<=n; i++) a[i] = i; i = 2; while (i for (j=a[i]*2; j<=n; j+=___1___) a[j] = 0; i++; while (___2___==0) i++; } printf("\nThe prime number between 2 to %d\n", n); for (i=2; i<=n; i++) if (a[i]!=___3___) { count++; printf( count%15?"%5d":"\n% 5d",a[i]); } return count; } 解题思路: 第一处:a[i]。第二处:a[i]。 第三处:0。 ************************* 给定程序MODI1.C中函数 fun的功能是: 为一个偶数寻 找两个素数, 这两个素数之 和等于该偶数,并将这两个素 数通过形参指针传回主函数。给定源程序: #include #include void fun(int a,int *b,int *c) { int i,j,d,y; for(i=3;i<=a/2;i=i+2) { Y=1; for(j=2;j<=sqrt((double)i);j++) if(i%j==0) y=0; if(y==1) { d==a-i; for(j=2;j<=sqrt((double)d);j++) if(d%j==0) y=0; if(y==1) { *b=i; *c=d; } 解题思路: 第一处:变量y错写成Y。第二处:给变量d进行赋值,所以应改为:d=a-i;。 ************************* 请编写函数fun, 它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后, 输出为: s=0.583333。注意: 要求n 的值不大于100。 参考答案: double fun(int n) { int i; double sum=0.0; for(i=1; i<=n; i++) if(i%5 == 0 || i%9 == 0) sum+=1.0/i; return sum; } ※※※※※※※※※※※※第35套: 给定程序中,函数fun的功能是建立一个N×N的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,…依次类推。例如,若N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 给定源程序: #include #define N 7 void fun(int (*a) __1__) { int i,j,k,m; if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i for(j= __2__ ; j a[i][j]=a[N-i-1][j]=i+1; for(k=i+1; k a[k][i]=a[k][N-i-1]= __3__; } } 解题思路: 第一处:[N]。第二处:j的起始变量值应i。第三处:也 应该填写i+1。 ************************* 给定程序MODI1.C中函数 fun 的功能是: 将十进制正整 数m转换成k(2≤k≤9)进制 数, 并按高位到低位顺序输 出。例如,若输入8和2,则应 输出1000(即十进制数8转换 成二进制表示是1000)。 给定源程序: #include #include void fun( int m, int k ) { int aa[20], i; for( i = 0; m; i++ ) { aa[i] = m/k; m /= k; } for( ; i; i-- ) printf( "%d", aa[ i ] ); } 解题思路: 第一处:aa[i]=m%k;。第二 处:printf("%d",aa[i-1]);。 ************************* 编写一个函数,从num个字符 串中找出最长的一个字符串, 并通过形参指针max传回该 串地址。 参考答案: fun(char(*a)[81],int num,char **max) { int i,k=0,maxlen; maxlen=strlen(a[k]); for(i=1;i { if(strlen(a[i]) > maxlen) { maxlen = strlen(a[i]) ; k = i ; } } *max=a[k]; } ※※※※※※※※※※※※ 第36套: 给定程序中,函数fun的功能 是:统计出带有头结点的单向 链表中结点的个数,存放在形 参n所指的存储单元中。 给定源程序: #include #include #define N 8 void fun( SLIST *h, int *n) { SLIST *p; ___1___=0; p=h->next; while(p) { (*n)++; p=p->___2___; } } main() { SLIST *head; int a[N]={12,87,45,32,91,16,20,48 }, num; head=creatlist(a); outlist(head); fun(___3___, &num); printf("\nnumber=%d\n",num); } 解题思路: 第一处:*n。第二处:next。 第三处:head。 ************************* 给定程序MODI1.C中函数 fun的功能是:求出s所指字 符串中最后一次出现的t所指 子字符串的地址,通过函数值 返回,在主函数中输出从此地 址开始的字符串;若未找到, 则函数值为NULL。例如,当 字符串中的内容为: "abcdabfabcdx",t中的内容 为:"ab"时,输出结果应是: abcdx。当字符串中的内容为: "abcdabfabcdx",t中的内容 为:"abd"时,则程序输出未 找到信息:not be found!。 给定源程序: #include #include char * fun (char *s, char *t ) { char *p , *r, *a; a = Null; while ( *s ) { p = s; r = t; while ( *r ) if ( r == p ) { r++; p++; } else break; if ( *r == '\0' ) a = s; s++; } return a ; } 解题思路: 第一处:Null应NULL。第 二处:if(*r==*p)。 ************************* 函数fun的功能是:将s所指 字符串中除了下标为偶数、同 时ASCII值也为偶数的字符 外,其余的全都删除;串中剩 余字符所形成的一个新串放 在t所指的数组中。例如,若 s所指字符串中的内容为: "ABCDEFG123456",其中字 符A的ASCII码值为奇数, 因此应当删除;其中字符B的 ASCII码值为偶数,但在数组 中的下标为奇数,因此也应当 删除;而字符2的ASCII码值 为偶数,所在数组中的下标也 为偶数,因此不应当删除,其 它依此类推。最后t所指的数 组中的内容应是:"246"。 参考答案: 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 ; } ※※※※※※※※※※※※ 第37套: 给定程序中,函数fun的功能 是:在形参ss所指字符串数组 中,查找含有形参substr所指 子串的所有字符串并输出,若 没找到则输出相应信息。ss所 指字符串数组中共有N个字 符串,且串长小于M。程序中 库函数strstr(s1, s2)的功能是 在s1串中查找s2子串,若没 有,函数值为0,若有,为非 0。 给定源程序: #include #include #define N 5 #define M 15 void fun(char (*ss)[M], char *substr) { int i,find=0; for(i=0; i< __1__ ; i++) if( strstr(ss[i], __2__) != NULL ) { find=1; puts(ss[i]); printf("\n"); } if (find==__3__) printf("\nDon't found!\n"); } 解题思路: 第一处:N。第二处:substr。 第三处:0。 ************************* 给定程序MODI1.C中函数 fun的功能是:求三个数的最 小公倍数。例如,给主函数中 的变量x1、x2、x3分别输入 15 11 2,则输出结果应当是: 330。 给定源程序: #include fun(int x, y, z ) { int j,t ,n ,m; j = 1 ; t=j%x; m=j%y ; n=j%z; while(t!=0||m!=0||n!=0) { j = j+1; t=j%x; m=j%y; n=j%z; } return i; } main( ) { int x1,x2,x3,j ; printf("Input x1 x2 x3: "); scanf("%d%d%d",&x1,&x2,& x3); printf("x1=%d, x2=%d, x3=%d \n",x1,x2,x3); j=fun(x1,x2,x3); printf("The minimal common multiple is : %d\n",j); } 解题思路: 第一处: fun(int x,int y, int z)。第二处: 应返回j的值。 ************************* 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度, 形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:A*BC*DEF*G。 参考答案: void fun( char *a, int n,int h,int e ) { char *p=a ; int j=0,len=0; while(*p) {p++; len++;} while(j a[j]=a[h+j]; j++; } a[j]=0; } ※※※※※※※※※※※※ 第38套: 函数fun的功能是:把形参a 所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7,返回值为5。 给定源程序: #include #define N 9 int fun(int a[], int n) { int i,j; j = 0; for (i=0; i if (a[i]%2==___1___) { a[j] = a[i]; ___2___; } return ___3___; } 解题思路: 第一处:1。第二处:j++。第三处:j。 ************************* 给定程序MODI1.C中函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输出的最大公约数为27。给定源程序: #include int fun(int a,int b) { int r,t; if(a t=a; b=a; a=t; } r=a%b; while(r!=0) { a=b; b=r; r=a%b; } return(a); } 解题思路: 第一处:t=a;a=b;b=t;。第二 处:return(b);。 ************************* 假定输入的字符串中只包含 字母和*号。请编写函数fun, 它的功能是:删除字符串中所 有的*号。在编写函数时,不 得使用C语言提供的字符串 函数。例如,字符串中的内容 为: ****A*BC*DEF*G*******, 删除后,字符串中的内容应当 是:ABCDEFG。 参考答案: void fun( char *a ) { int j =0 ; char *p=a; while(*p) { if(*p != '*') a[j++]=*p ; p++ ; } a[j]=0; } ※※※※※※※※※※※※ 第39套: 给定程序中,函数fun的功能 是:在形参ss所指字符串数组 中,删除所有串长超过k的字 符串,函数返回所剩字符串的 个数。ss所指字符串数组中共 有N个字符串,且串长小于 M。 给定源程序: #include #include #define N 5 #define M 10 int fun(char (*ss)[M], int k) { int i,j=0,len; for(i=0; i< __1__ ; i++) { len=strlen(ss[i]); if(len<= __2__) strcpy(ss[j++],__3__); } return j; } 解题思路: 第一处:N。第二处:k。第 三处:ss[i]。 ************************* 给定程序MODI1.C中函数 fun的功能是:逐个比较p、q 所指两个字符串对应位置中 的字符,把ASCII值大或相等 的字符依次存放到c所指数组 中,形成一个新的字符串。 例如,若主函数中a字符串为: aBCDeFgH,主函数中b字符 串为:ABcd,则c中的字符 串应为:aBcdeFgH。 给定源程序: #include #include void fun(char *p ,char *q, char *c) { int k = 1; while( *p != *q ) { if( *p<*q ) c[k]=*q; else c[k]=*p; if(*p) p++; if(*q) q++; k++; } } 解题思路: 第一处: k 值应为0。第二处: while( *p || *q ), ************************* 假定输入的字符串中只包含 字母和*号。请编写函数fun, 它的功能是:除了字符串前导 的*号之外,将串中其它*号全 部删除。在编写函数时,不得 使用C语言提供的字符串函 数。函数fun中给出的语句仅 供参考。例如,字符串中的内 容为: ****A*BC*DEF*G*******, 删除后, 字符串中的内容应 当是:****ABCDEFG。 参考答案: void fun( char *a ) { /* 以下代码仅供参考*/ int i=0,k; while(a[i]=='*') i++; k=i; while(a[i]!='\0') { if(a[i] != '*') a[k++]=a[i]; i++; } a[k]='\0'; } ※※※※※※※※※※※※ 第40套: 给定程序中已建立一个带有 头结点的单向链表,链表中的 各结点按结点数据域中的数 据递增有序链接。函数fun的 功能是:把形参x的值放入一 个新结点并插入到链表中,插 入后各结点数据域的值仍保 持递增有序。 给定源程序: #include #include #define N 8 typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *h, int x) { SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST)); s->data=___1___; q=h; p=h->next; while(p!=NULL && x>p->data) { q=___2___; p=p->next; } s->next=p; q->next=___3___; } 解题思路: 第一处:x。第二处:p。第 三处:s。 ************************* 给定程序MODI1.C中函数 fun的功能是:计算正整数 num的各位上的数字之积。例 如,若输入:252,则输出应 该是:20。若输入:202,则 输出应该是:0。 给定源程序: #include long fun (long num) { long k; do { k*=num%10 ; num\=10 ; } while(num) ; return (k) ; } 解题思路: 第一处:k应赋值为1。第 二处:整除的符号是/。 ************************* 请编写一个函数fun,它的功 能是:计算n门课程的平均 分,计算结果作为函数值返 回。例如:若有5门课程的成 绩是:90.5, 72, 80, 61.5, 55则 函数的值为:71.80。注 参考答案: float fun ( float *a , int n ) { int i; float ave=0.0; for(i=0; i ave=ave+a[i] ; ave=ave/n; return ave; } ※※※※※※※※※※※※ 第41套: 给定程序中,函数fun的功能 是:计算x所指数组中N个数 的平均值(规定所有数均为正 数),平均值通过形参返回主 函数,将小于平均值且最接近 平均值的数作为函数值返回, 在主函数中输出。例如,有 10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000 主函数中输出:m=30.0 给定源程序: #include #define N 10 double fun(double x[],double *av) { int i,j; double d,s; s=0; for(i=0; i d=32767; for(i=0; i if(x[i]<*av && *av - x[i]<=d){ d=*av-x[i]; j=__2__;} return __3__; } 解题思路: 第一处:*av。第二处:i。第三处:x[j]。 ************************* 给定程序MODI1.C中函数fun的功能是:根据整型形参n,计算如下公式的值。例如,若n=10,则应输出:0.617977。 给定源程序: #include int fun ( int n ) { float A=1; int i; for (i=2; i A = 1.0/(1+A); return A ; } 解题思路: 第一处:float fun(int n)。第二处:for的终止条件应是i<=n。 *************************程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m 。例如:若m的值为2,a 数组中的值为| 1 9 7 | | 2 18 14| a = | 2 3 8 | 则返回主程序后a 数组中的值应为| 2 6 16| | 4 5 6 | | 4 5 12| 参考答案: int fun ( int a[][N], int m ) { int i, j; for(i = 0 ; i < N ; i++) for(j = i ; j < N ; j++) a[i][j] *= m ; } ※※※※※※※※※※※※ 第42套: 给定程序中,函数fun的功能是: 将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。 给定源程序: #include void fun(char *s) { int i, j=0, k=0; char t1[80], t2[80]; for(i=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') { t2[j]=s[i]; ___1___; } else t1[k++]=s[i]; t2[j]=0; t1[k]=0; for(i=0; i for(i=0; i<___3___; i++) s[k+i]=t2[i]; } 解题思路: 第一处:j++。第二处: s[i]=t1[i]。第三处j。 ************************* 给定程序MODI1.C中函数 fun 的功能是:用冒泡法对6 个字符串按由小到大的顺序 进行排序。 给定源程序: #include #include #define MAXLINE 20 fun ( char *pstr[6]) { int i, j ; char *p ; for (i = 0 ; i < 5 ; i++ ) { for (j = i + 1, j < 6, j++) { if(strcmp(*(pstr + i), *(pstr + j)) > 0) { p = *(pstr + i) ; *(pstr + i) = pstr + j ; *(pstr + j) = p ; } } 解题思路: 第一处:for循环语句中缺少 分号。第二处: *(pstr+i)=*(pstr+j);。 ************************* 请编写函数fun,它的功能是: 求出ss所指字符串中指定字 符的个数,并返回此值。例如, 若输入字符串: 123412132,输 入字符为: 1,则输出:3。 参考答案: int fun(char *ss, char c) { int cnt = 0 ; char *p = ss ; while(*p) { if(*p == c) cnt++ ; p++ ; } return cnt ; } ※※※※※※※※※※※※ 第43套: 给定程序中,函数fun的功能 是:在形参ss所指字符串数 组中查找与形参t所指字符串 相同的串,找到后返回该串在 字符串数组中的位置(下标 值),未找到则返回-1。ss所 指字符串数组中共有N个内 容不同的字符串,且串长小于 M。 给定源程序: #include #include #define N 5 #define M 8 int fun(char (*ss)[M],char *t) { int i; for(i=0; i< __1__ ; i++) if(strcmp(ss[i],t)==0 ) return __2__ ; return -1; } main() { char ch[N][M]={"if","while","switc h","int","for"},t[M]; int n,i; printf("\nThe original string\n\n"); for(i=0;i printf("\n"); printf("\nEnter a string for search: "); gets(t); n=fun(ch,t); if(n== __3__) printf("\nDon't found!\n"); else printf("\nThe position is %d .\n",n); } 解题思路: 第一处:N。第二处:i。第 三处:-1。 ************************* 给定程序MODI1.C中函数 fun的功能是:从整数1到55 之间,选出能被3整除、且有 一位上的数是5的那些数,并 把这些数放在b所指的数组 中,这些数的个数作为函数值 返回。规定,函数中a1放个 位数,a2放十位数。 给定源程序: #include fun( int *b ) { int k,a1,a2,i=0; for(k=10; k<=55; k++) { a2=k/1O; a1=k-a2*10; if((k%3==0 && a2==5)||(k%3==0 && a1==5)) { b[i]=k; i++; } } return k; } 解题思路: 第一处: a2=k/10;。第二处: return i;。 ************************* 假定输入的字符串中只包含 字母和*号。请编写函数fun, 它的功能是:将字符串尾部的 *号全部删除,前面和中间的* 号不删除。例如,字符串中的 内容为: ****A*BC*DEF*G*******, 删除后,字符串中的内容应当 是:****A*BC*DEF*G。在编 写函数时,不得使用C语言提 供的字符串函数。 参考答案: void fun( char *a ) { char *p = a ; while(*p) p++ ; p-- ; while(*p == '*') p-- ; p++ ; *p = 0 ; } ※※※※※※※※※※※※ 第44套: 函数fun的功能是进行数字字 符转换。若形参ch中是数字 字符'0'~'9', 则'0'转换成'9','1' 转换成'8','2'转换成'7',……, '9'转换成'0';若是其它字符则 保持不变;并将转换后的结果 作为函数值返回。 给定源程序: #include ___1___ fun(char ch) { if (ch>='0' && ___2___) return '9'- (ch-___3___); return ch ; } 解题思路: 第一处:char。第二处: ch<='9'。第三处:'0'。 ************************* 给定程序MODI1.C中函数 fun的功能是:将p所指字符 串中的所有字符复制到b中, 要求每复制三个字符之后插 入一个空格。例如,在调用fun 函数之前给a输入字符串: ABCDEFGHIJK,调用函数之 后,字符数组b中的内容则 为:ABC DEF GHI JK。 给定源程序: #include void fun(char *p, char *b) { int i, k=0; while(*p) { i=1; while( i<=3 && *p ) { b[k]=p; k++; p++; i++; } if(*p) { b[k++]=" "; } } b[k]='\0'; } 解题思路: 第一处:把指针p所指的值赋 值给b[k]中。第二处: b[k++]=0 ************************* N名学生的成绩已在主函数 中放入一个带头节点的链表 结构中,h指向链表的头节点。 请编写函数fun,它的功能是: 求出平均分,由函数值返回。 例如,若学生的成绩是:85, 76,69,85,91,72,64,87, 则平均分应当是:78.625。 参考答案: #include #include 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++; } av /= n ; return av ; } ※※※※※※※※※※※※ 第45套: 函数fun的功能是:把形参a 所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a所指数组中的数据为:4、2、6、8,返回值为4。 给定源程序: #include #define N 9 int fun(int a[], int n) { int i,j; j = 0; for (i=0; i if (___1___== 0) { ___2___ = a[i]; j++; } return ___3___; } 解题思路: 第一处:a[i] % 2。第二处:a[j]。第三处:j。 ************************* 给定程序MODI1.C中函数fun的功能是:按以下递归公式求函数值。┌10 (n=1) fun(n)=┥ └fun(n-1)+2 (n>1) 例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。 给定源程序: #include fun ( n ) { int c; if(n=1) c = 10 ; else c= fun(n-1)+2; return(c); } 解题思路: 第一处:fun (int n)。第二处:==。 ************************* 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n 个,则删除多余的*号;若少于 或等于n个,则什么也不做, 字符串中间和前面的*号不删 除。例如,字符串中的内容为: ****A*BC*DEF*G*******, 若n的值为4,删除后,字符 串中的内容应当是: ****A*BC*DEF*G****;若n 的值为7,则字符串中的内容 仍为: ****A*BC*DEF*G*******。n 的值在主函数中输入。在编写 函数时,不得使用C语言提供 的字符串函数。 参考答案: void fun( char *a,int n ) { char *p=a ; int j=0; while(*p) p++; p--; while(*p == '*') p--; p++; while(j p++ ; j++; } *p = 0 ; } ※※※※※※※※※※※※ 第46套: 给定程序中,函数fun的功能 是:利用指针数组对形参ss 所指字符串数组中的字符串 按由长到短的顺序排序,并输 出排序结果。ss所指字符串数 组中共有N个字符串,且串长 小于M。 给定源程序: #include #include #define N 5 #define M 8 void fun(char (*ss)[M]) { char *ps[N],*tp; int i,j,k; for(i=0; i for(i=0; i k= __1__ ; for(j=i+1; j if(strlen(ps[k]) < strlen(__2__) ) k=j; tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ; } printf("\nThe string after sorting by length:\n\n"); for(i=0; i } 解题思路: 第一处:i。第二处:ps[j]。 第三处:tp。 ************************* ************************* * 已知一个数列从第0项开始 的前三项分别为0,0,1,以 后的各项都是其相邻的前三 项之和。给定程序MODI1.C 中函数fun的功能是:计算并 输出该数列前n项的平方根 之和。n的值通过形参传入。 例如,当n=10时,程序的输 出结果应为:23.197745。 给定源程序: #include #include fun(int n) { double sum, s0, s1, s2, s; int k; sum = 1.0; if (n <= 2) sum = 0.0; s0 = 0.0; s1 = 0.0; s2 = 1.0; for (k = 4; k <= n; k++) { s = s0 + s1 + s2; sum += sqrt(s); s0 = s1; s1 = s2; s2 = s; } return sum } main ( ) { int n; printf("Input N="); scanf("%d", &n); printf("%f\n", fun(n) ); } 解题思路: 第一处:此行前加上double 或float。第二处:该行缺少 分号。 ************************* 编写函数fun,它的功能是计 算下列级数和,和值由函数值 返回。例如,当n = 10,x= 0.3时,函数值为1.349859。 参考答案: #include #include long jc(int n) { long s = 1 ; int i ; for(i = 1 ; i <= n ; i++) s *= i ; return s ; } double fun(double x , int n) { double s = 1.0, y = x ; int i ; for(i = 1 ; i <= n ; i++) { s += y / (double)jc(i) ; y *= x ; } return s ; } ※※※※※※※※※※※※ 第47套: 给定程序中,函数fun的功能 是:找出形参s所指字符串中 出现频率最高的字母(不区分 大小写),并统计出其出现的 次数。例如,形参s所指的字 符串为:abcAbsmaxless,程序 执行后的输出结果为:letter 'a' : 3 times letter 's' : 3 times 给定源程序: #include #include #include void fun(char *s) { int k[26]={0},n,i,max=0; char ch; while(*s) { if( isalpha(*s) ) { ch=tolower(__1__); n=ch-'a'; k[n]+= __2__ ; } s++; if(max } printf("\nAfter count :\n"); for(i=0; i<26;i++) if (k[i]==max) printf("\nletter \'%c\' : %d times\n",i+'a',k[i]); 解题思路: 第一处:*s。第二处:1。 第三处:k[n]。 ************************* 给定程序MODI1.C中函数 fun 的功能是:求S的值。例 如,当k为10时,函数值应 为:1.533852。 给定源程序: #include #include void fun( int k ) { int n; float s, w, p, q; n = 1; s = 1.0; while ( n <= k ) { w = 2.0 * n; p = w - 1.0; q = w + 1.0; s = s * w *w/p/q; n++; } return s } 解题思路: 第一处:此行前加上double 或float。第二处:缺少分号。 ************************* 编写函数fun,它的功能是: 计算并输出下列级数和: 1 1 1 S = ──+ ──+ …+ ─ ── 1×2 2×3 n(n+1) 例如,当n = 10时,函数值为: 0.909091。 参考答案: double fun( int n ) { double s = 0.0 ; int i ; for(i = 1 ; i <= n ; i++) s = s + 1.0 / (i * (i + 1)) ; return s ; } ※※※※※※※※※※※※ 第48套: 给定程序中,函数fun的功能 是:将形参s所指字符串中的 数字字符转换成对应的数值, 计算出这些数值的累加和作 为函数值返回。例如,形参s 所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。 给定源程序: #include #include #include int fun(char *s) { int sum=0; while(*s) { if( isdigit(*s) ) sum+= *s- __1__ ; __2__; } return __3__ ; } 解题思路: 第一处:48。第二处:s++。第三处:sum。 ************************* 给定程序MODI1.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。 给定源程序: #include int fun( int k ) { int m=0, mc=0, j ; while ((k >= 2) && (mc < 10)) { if ((k%13 = 0) || (k%17 = 0)) { m = m+ k; mc++; } k--; } return m; _____ main ( ) { printf("%d\n", fun (500)); } 解题思路: 第一处:判断相等的条件是== 第二处:"{"和"}"没有配对,所以在横线处加上"}"。 ************************* 编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。例如若n为1000时,程序输出应为:s = 153.909064。注意: 部分源程序在文件PROG1.C 文件中。 参考答案: double fun( int n) { double sum=0.0; int i; for(i=21; i<=n; i++) if((i % 3==0) && (i % 7==0)) sum+=i; return sqrt(sum) ; } ※※※※※※※※※※※※第49套: 给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于97的字符 存入形参t所指字符数组中, 形成一个新串,并统计出符合 条件的字符个数作为函数值 返回。例如,形参s所指的字 符串为:Abc@1x56*,程序执 行后t所指字符数组中的字符 串应为:A@156*。 给定源程序: #include int fun(char *s, char *t) { int n=0; while(*s) { if(*s < 97) { *(t+n)= __1__ ; n++; } __2__ ; } *(t+n)=0; return __3__ ; } 解题思路: 第一处:*s。第二处:s++。 第三处:n。 ************************* 给定程序MODI1.C中函数 fun 的功能是:由形参给定n 个实数,输出平均值,并统计 在平均值以上(含平均值)的实 数个数。例如,n=8时,输入: 193.199,195.673,195.757,196. 051,196.092,196.596, 196.579,196.763所得平均值 为:195.838745,在平均值以上 的实数个数应为:5 给定源程序: #include int fun(float x[], int n) { int j, c=0, float xa=0.0; for (j=0; j xa += x[j]/n; printf("ave =%f\n",xa); for (j=0; j if (x[j] => xa) c++; return c; } 解题思路: 第一处:int j, c=0; float xa=0.;。第二处:>=。 ************************* 编写函数fun,其功能是:根 据以下公式求P的值,结果由 函数值带回。m与n为两个正 整数且要求m > n。m! P = ─── n!(m-n)! 参考答案: #include long jc(int m) { long s=1; int i ; for(i=1;i<=m;i++) s=s*i ; return s; } float fun(int m, int n) { float p; p=1.0*jc(m)/jc(n)/jc(m-n) ; return p; } ※※※※※※※※※※※※ 第50套: 给定程序中,函数fun的功能 是:有N×N矩阵,以主对角线 为对称线,对称元素相加并将 结果存放在左下三角元素中, 右上三角元素置为0。例如, 若N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9 计算结果为 1 0 0 6 5 0 10 14 9 给定源程序: #include #define N 4 void fun(int (*t)___1___ ) { int i, j; for(i=1; i { for(j=0; j { ___2___ =t[i][j]+t[j][i]; ___3___ =0; } } } 解题思路: 第一处:[N]。第二处: t[i][j]。第三处:t[j][i]。 ************************* 给定程序MODI1.C中函数 fun的功能是:计算函数 F(x,y,z)=(x+y)/(x-y)+(z+y)/(z- y)的值。其中x和y的值不等, z和y的值不等。例如,当x 的值为9、y的值为11、z的 值为15时,函数值为-3.50。 给定源程序: #include #include #include #define FU(m,n) (m/n) float fun(float a,float b,float c) { float value; value=FU(a+b,a-b)+FU(c+b,c- b); Return(Value); } 解题思路: 第一处:#define FU(m,n) ((m)/(n))。第二处:return写 成Return,value写成Value。 ************************* 规定输入的字符串中只包含 字母和*号。请编写函数fun, 它的功能是:将字符串中的前 导*号全部删除,中间和尾部 的*号不删除。例如,字符串 中的内容为: *******A*BC*DEF*G****, 删除后,字符串中的内容应当 是:A*BC*DEF*G****。在编 写函数时,不得使用C语言提 供的字符串函数。 参考答案: void fun( char *a ) { int j=0; char *p = a ; while(*p == '*') p++ ; while(*p) { a[j++] = *p ; p++; } a[j]=0 ; } ※※※※※※※※※※※※ 第51套: 给定程序中,函数fun的功能 是:计算出形参s所指字符串 中包含的单词个数,作为函数 值返回。为便于统计,规定各 单词之间用空格隔开。例如, 形参s所指的字符串为:This is a C language program.,函数 的返回值为6。 给定源程序: #include int fun(char *s) { int n=0, flag=0; while(*s!='\0') { if(*s!=' ' && flag==0) { __1__ ; flag=1;} if (*s==' ') flag= __2__ ; __3__ ; } return n; } 解题思路: 第一处:n++。第二处:0。 第三处:s++。 ************************* 给定程序MODI1.C中函数 fun 的功能是:从n(形参)个 学生的成绩中统计出低于平 均分的学生人数,此人数由函 数值返回,平均分存放在形参 aver所指的存储单元中。例 如,若输入8 名学生的成绩: 80.5 60 72 90.5 98 51.5 88 64 则低于平均分的学生人数为: 4 (平均分为:75.562 5 )。 给定源程序: #include #define N 20 int fun ( float *s, int n, float *aver ) { float ave, t = 0.0 ; int count = 0, k, i ; for ( k = 0 ; k < n ; k++ ) t = s[k] ; ave = t / n ; for ( i = 0 ; i < n ; i++ ) if ( s[ i ] < ave ) count++ ; *aver = Ave ; return count ; } 解题思路: 第一处:t+=s[k];。第二处: ave不需要取地址,*aver就 可以了。 ************************* 请编写函数fun,其功能是求 出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如, 输入如下整数: 876 675 896 101 301 401 980 431 451 777则输出结果为: 6, 980 参考答案: int fun(int *s, int t, int *k) { int i, pos = 0, max = *s ; for(i = 1 ; i < t ; i++) { if(max < *(s + i)) { max = *(s + i) ; pos = i ; } } *k = pos ; } ※※※※※※※※※※※※ 第52套: 给定程序中,函数fun的功能是:将N×N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵 1 2 3 4 5 6 7 8 9 计算结果为 3 1 2 6 4 5 9 7 8 给定源程序: #include #define N 4 void fun(int (*t)[N]) { int i, j, x; for(i=0; i<___1___; i++) { x=t[i][___2___] ; for(j=N-1; j>=1; j--) t[i][j]=t[i][j-1]; t[i][___3___]=x; } } 解题思路: 第一处:N。第二处:N-1。第三处:0。 ************************* 例如,若q的值为: 50.0,则函数值为: 49.394948。请改正程序中的错误,使程序能输出正确的结果。 给定源程序: #include double fun( double q ) { int n; double s,t; n = 2; s = 2.0; while (s<=q) { t=s; s=s+(n+1)/n; n++; } printf("n=%d\n",n); return s; } main ( ) { printf("%f\n", fun(50)); } 解题思路: 第一处:s+=(float)(n+1)/n;。 第二处:return t;。 ************************* 编写函数fun,它的功能是: 求Fibonacci数列中大于t的最 小的一个数,结果由函数返 回。其中Fibonacci数列F(n) 的定义为:F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 例如:当t = 1000时,函数值 为:1597。 参考答案: int fun( int t) { int f0 = 0, f1 = 1, f ; do { f = f0 + f1 ; f0 = f1 ; f1 = f ; } while(f < t) ; return f ; } ※※※※※※※※※※※※ 第53套: 函数fun的功能是:计算请在 程序的下划线处填入正确的 内容并把下划线删除,使程序 得出正确的结果。 给定源程序: #include #include double fun(double x) { double f, t; int n; f = 1.0 + x; t = ___1___; n = 1; do { n++; t *= (-1.0)*x/___2___; f += t; } while (___3___ >= 1e-6); return f; } 解题思路: 第一处:变量t的值为x。第 二处:n。第三处:fabs(t)。 ************************* 给定程序MODI1.C中函数 fun的功能是: 求整数x的y 次方的低3位值。例如,整数5 的6次方为15625, 此值的低 3位值为625。 给定源程序: #include long fun(int x,int y,long *p ) { int i; long t=1; for(i=1; i t=t*x; *p=t; t=t/1000; return t; } 解题思路: 第一处:i<=y。第二处: t=t%1000; ************************* 例如, 在主函数中从键盘给x 输入0.21后,输出 为:s=1.100000。 参考答案: double fun(double x) { int n=1; double sn=1; double xn=1,xn1=0; while(fabs(xn-xn1)>=0.000001 ) { xn=xn*x*(0.5-n+1)/n; n+=1; sn+=xn; } return(sn); } ※※※※※※※※※※※※ 第54套: 给定程序中,函数fun的功能 是:计算出带有头结点的单向 链表中各结点数据域中值之 和作为函数值返回。 给定源程序: #include #include #define N 8 p=h->next; while(p) { s+= p->___1___; p=p->___2___; } return s; } main() { SLIST *head; int a[N]={12,87,45,32,91,16,20,48 }; head=creatlist(a); outlist(head); printf("\nsum=%d\n", fun(___3___)); } SLIST *creatlist(int a[]) 解题思路: 第一处:data。第二处: next。第三处::head。 ************************* 给定程序MODI1.C中函数 fun的功能是:将s所指字符串 中出现的与t1所指字符串相 同的子串全部替换成t2所指 字符串,所形成的新串放在w 所指的数组中。在此处,要求 t1和t2所指字符串的长度相 同。例如,当s所指字符串中 的内容为:"abcdabfab",t1所 指子串中的内容为:"ab",t2 所指子串中的内容为:"99" 时,结果在w所指的数组中 的内容应为:"99cd99f99"。 给定源程序: #include #include int fun (char *s, char *t1, char *t2 , char *w) { int i; char *p , *r, *a; strcpy( w, s ); while ( *w ) { p = w; r = t1; while ( r ) if ( *r == *p ) { r++; p++; } else break; if ( *r == '\0' ) { a = w; r = t2; while ( *r ){ *a = *r; a++; r++ } w += strlen(t2) ; } else w++; } } 解题思路: 第一处:while(*r)。第二处: 语句后缺少分号。 ************************* 函数fun的功能是:将s所指 字符串中下标为偶数的字符 删除,串中剩余字符形成的新 串放在t所指数组中。例如, 当s所指字符串中的内容为: "ABCDEFGHIJK",在t所指 数组中的内容应是: "BDFHJ"。 参考答案: 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 ; } ※※※※※※※※※※※※ 第55套: 给定程序中,函数fun的功能 是:判断形参s所指字符串是 否是"回文"(Palindrome),若 是,函数返回值为1;不是, 函数返回值为0。"回文"是正 读和反读都一样的字符串(不 区分大小写字母)。例如, LEVEL和Level是"回文",而 LEVLEV不是"回文"。 给定源程序: #include #include #include int fun(char *s) { char *lp,*rp; lp= __1__ ; rp=s+strlen(s)-1; while((toupper(*lp)==toupper( *rp)) && (lp