实验代码:
#include<stdio.h>
#include<stdbool.h>
void toNUM(int n);
void toUNIT(int n);
int main()
{
bool BeginC = false;
bool Czero = false;
int a[9] = {0};
int n, i, j, tmp;
scanf("%d", &n);
for(i=100000000, j=0; i>0; i/=10)
{
a[j] = n/i;
n %= i;
j++;
}
for(i=0; i<j; i++)
{
//printf("a[%d]:%d", i, a[i]);
if(a[i]>0)
{
BeginC = true;
}
if(BeginC)
{
if(a[i] != 0)
{
if(Czero) /**< 用来标记读xx万零xx的数 */
{
if(i!=5) /**<如果遇到连续0,直到千位,前面可以不读0 */
{
printf("a");
}
Czero = false;
}
toNUM(a[i]);
toUNIT(i);
}
if(a[i] == 0)
{
/**< if(i == 4) 本来if语句我是写成这样的,用例全过,但是对于100000001这个数,输出是错的,因为输多了一个W,所以改成加上对万位的判断*/
if(i == 4 && ((a[1]!=0) || (a[2]!=0) || (a[3]!=0)|| (a[4]!=0))) /**< 考虑到1001001应该读作1千万1千零1,即使万位遇0还是要读出 */
toUNIT(i);
Czero = true;
}
}
}
if(!BeginC)
{
printf("a"); /**< 如果数组一直为0,输出0 */
}
system("pause") ;
}
void toNUM(int n)
{
switch(n)
{
case 0:
printf("a");
break;
case 1:
printf("b");
break;
case 2:
printf("c");
break;
case 3:
printf("d");
break;
case 4:
printf("e");
break;
case 5:
printf("f");
break;
case 6:
printf("g");
break;
case 7:
printf("h");
break;
case 8:
printf("i");
break;
case 9:
printf("j");
break;
default:
printf("@ERROR@");
break;
}
}
void toUNIT(int n)
{
switch(n)
{
case 0:
printf("Y");
break;
case 1:
printf("Q");
break;
case 2:
printf("B");
break;
case 3:
printf("S");
break;
case 4:
printf("W");
break;
case 5:
printf("Q");
break;
case 6:
printf("B");
break;
case 7:
printf("S");
break;
default:
printf("");
break;
}
}
本题调试过程碰到问题及解决办法:
问题一:总是不小心漏代码,导致调试过程中总要回头,以致花太多时间
问题二;有些代码不会写比如: default, Czero = false等,要去请教大佬,或者跟已完成的代码去比较才能完成
问题三:c语言还有些基础没弄明白,不会