M013

02-程序修改题 软件154 范金瑞 915浏览

所属年份:2011.9;2012.3

下列给定程序中fun函数的功能是:求表达式
s=aa… aa-…- aaa - aa -a
(此处aa… aa表示n个a,a和n的值在1至 9之间)
例如,a=3,n=6,则以上表达式为:
s=333333-33333-3333-333-33-3
其值是296298。
a和n是fun函数的形参,表达式的值作为函数值传回main函数。

请改正程序中的错误,使它能计算出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构!

#include <stdio.h>

long fun (int a, int n)
{
    int  j ;
    /**************found**************/
    long  s = 0,  t = 1 ;
    for ( j = 0 ; j < n ; j++)
        t = t * 10 + a ;
    s = t ;
    for ( j = 1 ; j < n ; j++)
    {
        /**************found**************/
        t = t % 10 ;
        s = s - t ;
    }
    return(s) ;
}

main( )
{
    int  a, n ;
    printf( "\nPlease enter a and n:") ;
    scanf(  "%d%d", &a, &n ) ;
    printf( "The value of  function is: %ld\n", fun ( a, n ) );
}

【参考答案】

(1)long s=0, t=0;

(2)t=t/10;

【考点分析】
本题考查:变量赋初值操作;求余运算和除法运算的区别。

【解题思路】
(1) t用来存放每次循环后的多位数,第一次循环时,t应当是个位数,所以t的初始值应为0。

(2) 根据题意,这里不需要求余数,而是要去掉个位数,重新组合一个数,因此应用除法运算。

【解题宝典】
去掉数值n的个位的方法是采用除法运算,如果需要取出个位数才使用求余运算,不要混淆。