给定程序modil.c中函数fun()的功能是将两个长度相等的纯数字字符串当作两个加数,求其代表的数值之和,并以字符串的形式存入r所指内存且返回。 例如s1"723",s2是"567",则返回的字符串为"1290"。要考虑进位。 请改正程序

admin2023-02-27  77

问题 给定程序modil.c中函数fun()的功能是将两个长度相等的纯数字字符串当作两个加数,求其代表的数值之和,并以字符串的形式存入r所指内存且返回。
    例如s1"723",s2是"567",则返回的字符串为"1290"。要考虑进位。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!
1 #include
2 #include
3 char*fun(char*s1,char *s2,char * r)
4 {
5    int len,cy=0,md;
6    char*p,*q,*t;
7    len=strfen(s1);
8    p=s1+len-1;
9    q=s2+len-1;
10    t=r+len;
11  /*********found*********/
12    *t=’\0’;
13  while(p>=s1)
14  {
15  /*********found*********/
16    md=*p+*q-'0'+cy;
17    if(md>=10)    cy=1;
18    else cy=0;
19    *t=md%10+'0';
20    p~-;
21    q~-;
22    t~-;
23    }
24  /*********found*********/
25    if(cy=1)
26    *t='1';
27    else
28    {
29    while(*r++=*++t);
30    }
31    return r;
32 }
33 void main()
34 {
35    char s1[100],s2[100],s3[101];
36    strcpy(s1,"65743");
37    strcpy(s2,"85339");
38    fun(s1,s2,s3);
39    printf("%s+%s=%s\n",s1,s2,s3);
40 }

选项

答案(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后一位存放字符串结束标志。这里将将*=’\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/6noiFFFM
0

最新回复(0)