问答题
编写函数fun,w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。
例如,w值为5923,则函数返回923;若W值为923,则函数返回23。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
unsigned fun(unsigned w)
{
}
void main()
{
unsigned x;
system("CLS");
printf("Enter a unsigned integer number:");
scanf("%u",&x);
printf("The original data is:%u/n",x);
if(x<10)
printf("Data error!");
else
printf("The result:%u/n",fun(x));
}
【正确答案】
【答案解析】unsigned fun(unsigned w)
{
int n=1,j,s=1;
unsigned t;
t=w;
/*首先确定w的位数,用变量n保存*/
while(t>=10)
{
/*每次循环使s的位数减1,同时n加1*/
t=t/10;
n++;
}
/*求10的n-1次方*/
for(j=1;j<n;j++)
s=s*10;
/*用w对10的n-1次方求余即可得到所求*/
return w%s;
}
[解析] 要得到几位整数w的后n-1位,首先应确定w的位数n,然后使用%运算符将w与s相除,所得的余数即为w的后n-1位。
本程序首先用wlile语句确定w的位数n,n的初值为1,每次循环使w除以10,即位数减1,同时n加1,至到w为个位数,循环结束;然后使用for循环得到10的n-1次方,作为除数;最后使用%运算符将w与s相除,并将所得的余数返回。