从键盘输入不超过10行10列的整型二维数组的各元素,求出各奇数行(下标为0,2,4,6...的行,即第1,3,5,7...行)之和, 并把和的每位数字转成拼音输出,各数拼音之间以一个空格分隔。

样例输入:
5 6
56 78 36 4 50 80
19 44 95 72 -8 60
85 67 -3 32 12 35
29 21 47 88 28 -9
7 66 53 40 20 15
样例输出:
304:san ling si
228:er er ba
201:er ling yi
样例说明:
输入5行6列二维数组;分别求出第1,3,5行的和304, 228, 201,
并转换成拼音输出。


#include
#define N 10
int main()
{
    int a[N][N],i,j,m,n,sum=0,x,k;
    char s[N][N]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    scanf("%d%d",&m,&n);
    for(i=0;ifor(j=0;j"%d",&a[i][j]);
    for(i=0;ifor(j=0;jsum=sum+a[i][j];
        printf("%d:\n",sum);
        sum=0;
    }
    return 0;
}

怎么把拼音加到数字后面

题主代码修改如下,供参考:

#include <stdio.h>
#define N 10
int main()
{
    int   a[N][N],i,j,m,n,sum=0,x[10],k;
    char* s[N]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    scanf("%d%d",&m,&n);
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);

    for(i=0;i<m;i+=2)
    {
        for(j=0,sum=0;j<n;j++)
            sum += a[i][j];
        printf("%d:",sum);
        k = 0; x[0]=0;
        while(sum){
            x[k++] = sum % 10;
            sum /= 10;
        }
        if(k == 0) k++;  //当sum为0时 输出 ling
        for(k--;k >= 0;k--)
            printf("%s ",s[x[k]]);
        printf("\n");
    }
    return 0;
}

可以先提取和的每一位,然后根据每一位的数字从数字拼音字符数组复制相应的字符串到和的拼音字符数组,最后再打印和的拼音的字符数组即可,代码如下:



#include <stdio.h> 
#include <string.h>
#define N 10
int main()
{
    int a[N][N],i,j,m,n,sum=0,x,k,temp,single;
    char s[N][N]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    scanf("%d%d",&m,&n);
    
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]); 
        } 
    }
    
    char PinyinSum[10][10];
    for(i=0;i<m;i+=2){
        sum=0;
        //计算奇数列的和 
        for(j=0;j<n;j++){
            sum+=a[i][j];
        } 
    //    printf("count sum end!\n"); 
        
        
        
        temp=sum;
        
        k=0;
    
        //如果和为0 
        if(temp==0){
            strcpy(PinyinSum[k],s[0]);
            //printf("PinyinSum[0]=%s\n",PinyinSum[0]);
        }
        
        //如果和不为0 
        while(temp!=0){
            single = temp%10; //从个位往高位依次提取和的每一位数字 
            strcpy(&PinyinSum[k][0],&s[single][0]);  //根据这个数字来复制拼音数组相应数字的拼音到存储和的拼音字符数组相应位置 
            //printf("single=%d,PinyinSum[%d]=%s\n",single,k,PinyinSum[k]);
            temp=temp/10; //去除这个提取的数位,开始计算下一个数位 
            k++;
        }
            
        int p;
        printf("%d:",sum); //先打印整数和 
        if(k==0){  //如果和为0 
            printf("%s",PinyinSum[0]);
        }else{  //如果和不为0 ,则逆序从和的最高位开始依次打印和的拼音 
        //    printf("print Pinyin start!\n");
            for(p=k-1;p>=0;p--){ 
                if(p==0){ //如果到了个位,则打印一个换行,以便开始打印下一个和 
                    printf("%s\n",PinyinSum[p]);
                }else{  //如果没有到个位,则每个数位拼音之间打印一个空格 
                    printf("%s ",PinyinSum[p]);
                }
            }
        }
        
        
        
    }
    
    return 0;
}

img

看这里,已解答。https://ask.csdn.net/questions/7840539?answer=53991334