第44套:
函数fun的功能是进行数字字符转换。若形参ch中是数字字符’0’~’9’, 则
‘0’转换成’9’,‘1’转换成’8’,‘2’转换成’7’,……,‘9’转换成’0’;若是其它字符则保持不变;并将转换后的结果作为函数值返回。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
___1___ fun(char ch)
{
if (ch>='0' && ___2___)
return '9'- (ch-___3___);
return ch ;
}
main()
{ char c1, c2;
printf("\nThe result :\n");
c1='2'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='8'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='a'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
}
解题思路:
第一处:要求返回处理好的字符,所以应填:char。
第二处:判断该字符是否是数字,所以应填:ch<=‘9’。
第三处:只要减去’0’的ASCII值,即可得到要求的结果,所以应填:‘0’。
给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字符复制到b 中,要求每复制三个字符之后插入一个空格。
例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK, 调用函数之后,字符数组b中的内容则为:ABC DEF GHI JK。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
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';
}
main()
{ char a[80],b[80];
printf("Enter a string: "); gets(a);
printf("The original string: "); puts(a);
fun(a,b);
printf("\nThe string after insert space: "); puts(b); printf("\n\n");
}
解题思路:
第一处:把指针p所指的值赋值给b[k]中。
第二处:把空格字符赋值给b[k++]中,而不是一个空格的字符串。
N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头 节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。 例如,若学生的成绩是:85,76,69,85,91,72,64,87, 则平均分应当 是:78.625。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <stdlib.h>
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double fun( STREC *h )
{
}
STREC * creat( double *s)
{ STREC *h,*p,*q; int i=0;
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
while(i<N)
{ 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");
}
main()
{ double s[N]={85,76,69,85,91,72,64,87},ave;
STREC *h;
h=creat( s ); outlist(h);
ave=fun( h );
printf("ave= %6.3f\n",ave);
NONO();
}
解题思路:
本题是计算链表结构中成绩的平均分。具体操作请看答案程序中的说明。
参考答案:
#include <stdio.h>
#include <stdlib.h>
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 ; /* 返回成绩平均值 */
}