一题二级C的题目

来源:百度知道 编辑:UC知道 时间:2024/06/28 00:52:21
2. 改错题
下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数的数依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。例如当s中的数为25846513时,t中的数为6482。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void fun(long s,long *t)
{
int d;
long s1=1,i=1;
*t=0;
while(s/i>0)
i=i*10;
i=i/10;
while(s>0)
{
d=s/i;
/**********************found***********************/
if(d%2!=0)
{
/**********************found***********************/
t=d*s1+t;
s1*=10;
}
s=s%i;
i=i/10;
}
}
void main()
{
long s, t;
system("CLS");
printf("\nPlease enter s: ");
scanf("%ld",&s);
fun(s,&t);
printf("The result is :%ld\n",t);
}
2. 改错题
(1)错误:if(d%

void fun(long s,long *t)
{
int d;
long s1=1,i=1;
*t=0;
while(s/i>0)//这部是看s到底是几位数
i=i*10;
i=i/10;//由于前面s/i=0跳出 所以这时i的位数比s多1位 所以要去掉一位
while(s>0)
{
d=s/i;//取当前位 以i位最高位为例 这时取最高位
if(d%2==0)//看他是否是偶数
{
*t=d*s1+*t;
s1*=10;
}
s=s%i;//去掉当千位 这时去掉最高位
i=i/10;//i降位
}
}
也就是说 他查找数中的偶数 比如说123456 他会查到246 但是由于*t=d*s1+*t;
s1*=10;这两条语句 导致 2是个位 4是十位 6是百位 所以输出642

很简单的问题嘛,注意几个运算符号就ok了,不如加减乘除、取余什么的