给定程序MODl1.C中函数char *fun(char *s1,char *s2,char *r)的功能:将两个长度相等的数字字符串当作两个加数,求其代表的数值之和并以字符串的形式存入r所指内存且返回。 例如:s1是”723”,s2是”567”

admin2022-10-25  39

问题 给定程序MODl1.C中函数char *fun(char *s1,char *s2,char *r)的功能:将两个长度相等的数字字符串当作两个加数,求其代表的数值之和并以字符串的形式存入r所指内存且返回。
     例如:s1是”723”,s2是”567”,则返回的字符串为”1290”。要考虑进位。
     请改正程序中的错误,使它能得出正确的结果。
     注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
     #include<stdio.h>
     #include<string.h>
     char *fun(char *s1,char *s2,char *r)
     {
       int len,cy=0,md;
       char *p,*q,*t;
       len=strlen(s1);
       p=s1+len-1:
       q=s2+len-1:
       t=r+len;
     /************found************/
       *t=’\0’;
       while(p>=s1)
       {
     /************found************/
         md=*p+*q-’0’+cy:
         if(md>=10)  cy=1;
         else cy=0;
         {t=md%10+’0’;
         p﹣﹣;
         q﹣﹣;
         t﹣﹣;
       }
     /************found************/
       if(cy=1)
         *t=’1’;
       else
       {
         while(*r++=*++t);
       }
       return r;
     }
     void main()
     {
       char sl[100],s2[100],s3[101];
       strcpy(s1,”65743”);
       strcpy(s2,”85339”);
       fun(s1,s2,s3);
       printf(”%s+%s=%s\n”,s1,s2,s3);
     }

选项

答案(1)*(t+1)=’\0’;或者*(1+t)=’\0’; (2)md=*p-’0’+*q-’0’+cy; (3)if(cy==1)

解析 题干要求将两个长度相等的数字字符串当作两个加数,求其代表的数值之和并以字符串的形式存入r所指内存且返回。指针p指向字符串s1的最后一个字符,指针q指向字符串s2的最后一个字符,指针t指向r+len。
     (1)指针变量r存放相加以后的字符串,相加后可能会发生进位(多一位),因此,指针t后面一位用来存放字符串结束标志。这里将“*t=’\0’;”修改为“*(t+1)=’\0’;”或“*(1+t)=’\0’;”。
     (2)将指针变量p和q指向的数字字符相加,所以需要减去字符0。这里将“md=*p+*q-’0’+cy;”修改为“md=*p-’0’+*q-’0’+cy;”。
     (3)如果cy为1,则加法运算发生进位,指针t的位置存放1。这里将“if(cy=1)”修改为“if(cy==1)”。
转载请注明原文地址:https://jikaoti.com/ti/4fd0FFFM
0

最新回复(0)