/**********************found***********************/
void fun(char p) {
char min, *q; int i=0; min=p[i];
while (p[i]!=0) {
if (min>p[i]) {
/**********************found***********************/
p=q+i; min=p[i]; } i++; } while(q>p)
{*q=*(q-1); q--; } p[0]=min; }
main() {
char str[80];
printf(\ gets(str);
printf(\ puts(str); fun(str);
printf(\ puts(str); printf(\}
答案及评析:
(1)错误:void fun(char p) 正确:void fun(char *p) (2)错误:p=q+i; 正确:q=p+i;
【解析】错误:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处理,因此,函数的参数应为字符串指针。 错误2:使指针q指向ASCII码最小的字符 本题解答需要3个步骤:
(1)找到字符串中ASCII码值最小的字符,并保存。 (2)将该字符复制,并将该字符前面的字符串顺次后移。
(3)将ASCII码值最小的字符赋给字符串的第1个字符。找到ASCII码值最小的字符可以通过定义一个字符min,该字符初始时等于字符串的第1个字符,若字符串的下一个字符小于min,则将下一个字符赋给min,如此循环到字符尾,即可得到ASCII码值最小的字符,同时令指针q指向最小字符。之后对最小字符前面的子串顺次后移,可采用while语句实现。
此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字符串操作。
3. 编程题
N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:找出学生的最低分,由函数值返回。 注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:
#include
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 {q=(STREC*) malloc(sizeof(STREC)); p->s=s[i]; i++; p->next=q; p=q; } p->next=NULL; return h; /*返回链表的首地址*/ } outlist(STREC *h) { STREC *p; p=h; printf(\ do {printf(\ /*输出各分数*/ while(p!=NULL); printf(\} main() { double s[N]={56,89,76,95,91,68,75,85}, min; STREC *h; h=creat(s); outlist(h); min=fun(h); printf(\} 答案及评析: double fun(STREC *h) { double min=h->s; while(h!=NULL) /*通过循环找到最低分数*/ {if(min>h->s) min=h->s; h=h->next; } return min; } 【解析】在本题中,h为一个指向结构体的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符\。由于是链表,所以要使h逐一往后移动,使用的是h=h->next。 模拟试题(八) 1.填空题 请补充函数fun(),该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include int g,s,b; g=n; s=n/10; b=【1】; if((g+b)==s) return【2】; else return【3】; } main() { int num=0; clrscr(); printf(\ scanf(\ printf(\ printf(\

