三、程序改错 ??共10题 (共计100分)
第1题 (10.0分) ???????题号:72 ???????难度:中 ???????第8章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中,函数fun实现的功能是:统计一个无符号整数中各位数字值
??????为0的个数,通过形参传回主函数,并把该整数中各位上最大的数字值作为函
??????数值返回。
例如:若输入无符号整数30800,则数字值为0的位的个数为3,各位上数字值最大的是8。
-------------------------------------------------------*/
#include <stdio.h>
int fun(unsigned n,int *zero)
{
????????int count=0,max=0,t;
????????do
????????{
????????????????t=n%10;
/***********FOUND***********/
????????????????if(t=0)
????????????????????????count++;
????????????????if(max<t)
????????????????????????max=t;
????????????????n=n/10;
????????}
????????while(n);
/***********FOUND***********/
????????zero=count;
????????return max;
}
main()
{
????????unsigned n;
????????int zero,max;
????????printf("\nInput n(unsigned): ");
????????scanf("%d",&n);
????????max=fun(n,&zero);
????????printf("\nThe result: max=%d\n zero=%d\n",max,zero);
}
第2题 (10.0分) ???????题号:79 ???????难度:中 ???????第8章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改
???????成大写,然后输出此文本行(这里"单词"是指由空格隔开的字符串)。
例如:若输入"I am a student to take the examination",则
???????应输出"I Am A Student To Take The Examination"。
-------------------------------------------------------*/
#include ?<stdlib.h>
#include ?<string.h>
#include ?<conio.h>
#include ?<ctype.h>
#include ?<stdio.h>
#include ?<string.h>
/***********FOUND***********/
void upfst(char p)
{
????????int k=0;
????????for ( ;*p;p++)
????????????????if (k)
????????????????{
????????????????????????if (*p==' ') ?
????????????????????????k=0;
????????????????}
????????????????else
????????????????{
????????????????????????if (*p!=' ') ?
????????????????????????{
????????????????????????????????k=1;
????????????????????????????????*p=toupper(*p);
????????????????????????}
????????????????}
}
void main()
{
????????char ?chrstr[81];
????????system("CLS"); ???
????????printf("\nPlease enter an English text line: ");
????????gets(chrstr);
????????printf("\nBofore changing:\n ?%s",chrstr);
????????upfst(chrstr);
????????printf("\nAfter changing:\n ?%s\n",chrstr);
}
第3题 (10.0分) ???????题号:53 ???????难度:中 ???????第8章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun的功能是:求出s所指字符串中最后一次出现的t所指
??????字符串的地址,并通过函数值返回,在主函数中输出从此地址开始的字符串;
??????若未找到,则函数值为NULL。
例如:当字符串中的内容为"abcdabfabcdx",t中内容为"ab"时,输出结果应是"abcdx"。
??????当字符串中的内容为"abcdabfabcdx",t中内容为"abd"时,则程序输出未找
??????到信息"not be found!"。
-------------------------------------------------------*/
#include ?<stdio.h>
#include ?<string.h>
char * fun (char ?*s, ?char *t )
{
????????char ??*p , *r, *a;
/***********FOUND***********/
????????a == Null;
????????while ( *s )
????????{ ??
????????????????p = s;
????????????????r = t;
????????????????while ( *r )
????????????????/***********FOUND***********/
????????????????????????if ( r == p )
????????????????????????{
????????????????????????????????r++; ?
????????????????????????????????p++;
????????????????????????}
????????????????????????else ?break;
????????????????if ( *r == '\0' )
????????????????????????a = s;
????????????????s++;
????????}
????????return ?a ;
}
main()
{
????????char ??s[100], t[100], *p;
????????printf("\nPlease enter string S :");
????????scanf("%s", s );
????????printf("\nPlease enter substring t :");
????????scanf("%s", t );
????????p = fun( s, t );
????????if ( p )
????????????????printf("\nThe result is : ?%s\n", p);
????????else ?????
????????????????printf("\nNot found !\n" );
}
第4题 (10.0分) ???????题号:24 ???????难度:中 ???????第8章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun的功能是:从N个字符串中找出最长的串,并将其地址作
??????为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。
-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#define ???N ??5
#define ???M ??81
/***********FOUND***********/
fun(char ?(*sq)[M])
{ ?
????????int ?i; ????char ?*sp;
????????sp=sq[0];
????????for(i=0;i<N;i++)
????????????????if(strlen( sp)<strlen(sq[i]))
????????????????????????sp=sq[i] ;
/***********FOUND***********/
????????return ?sq;
}
main()
{ ?
????????char ??str[N][M], *longest; ???int ??i;
????????printf("Enter %d lines :\n",N);
????????for(i=0; i<N; i++)
????????????????gets(str[i]);
????????printf("\nThe %d string ?:\n",N);
????????for(i=0; i<N; i++)
????????????????puts(str[i]);
????????longest=fun(str);
????????printf("\nThe longest string :\n");
????????puts(longest);
}
第5题 (10.0分) ???????题号:55 ???????难度:中 ???????第8章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的
???????字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
例如:调用fun函数之前给字符串输入"ABCDeFGH",调用后字符串中的内容应为"eABCDFGH"。
-------------------------------------------------------*/
#include <stdio.h>
void fun( char *p )
{ ??
????????char ??max,*q; ??int ??i=0;
????????max=p[i];
????????while( p[i]!=0 )
????????{ ??
????????????????if( max<p[i] )
????????????????{ ?
????????????????????????max=p[i];
????????????????/***********FOUND***********/
????????????????????????q=p+i
????????????????}
????????????????i++;
????????}
/***********FOUND***********/
????????while(q<p )
????????{ ?
????????????????*q=*(q-1);
????????????????q--;
????????}
????????p[0]=max;
}
main()
{ ?
????????char ??str[80];
????????printf("Enter a string: ?");
????????gets(str);
????????printf("\nThe original string: ?????");
????????puts(str);
????????fun(str);
????????printf("\nThe string after moving: ?");
????????puts(str); printf("\n\n");
}