for语句与while语句都是在循环前先判断条件,只有条件满足才能进入循环
如果条件一开始就不满足,则循环一次都不执行。
for语句用于题目中指定了循环次数。
while语句适用于由某一项的值来控制循环。
do-while语句与上述两种语句略有不同,它先执行循环体,后判断循环条件。
所以无论循环条件的值如何,至少会执行一次循环。
do-while语句适用于先循环后判断循环条件的情况。
接下来分享一道有意思的题目
念数字
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu
字。
输入格式:输入在一行中给出一个整数,如:1234
。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。
如yi er san si
。
#include <stdio.h> #include <malloc.h> #include <math.h> int main(void) { int n, x = 0, y, i, j, flag, z; scanf(" %d", &n); y = n; if (n != 0) { while (n != 0) { x++; n /= 10; } } else { x = 1; } int * pArr; pArr = ( int * ) malloc ( 4 * x ); flag = 0; if (y < 0) { printf("fu"); flag = 1; } for (i = 0; i < x; ++i) { y = fabs(y); z = y % 10; pArr[i] = z; y /= 10; } for (j = x-1; j >= 0; --j) { if (0 == flag) flag = 1; else printf(" "); switch ( pArr[j] ) { case 0: printf("ling"); break; case 1: printf("yi"); break; case 2: printf("er"); break; case 3: printf("san"); break; case 4: printf("si"); break; case 5: printf("wu"); break; case 6: printf("liu"); break; case 7: printf("qi"); break; case 8: printf("ba"); break; case 9: printf("jiu"); break; } } return 0; }
//舍友写的
#include<stdio.h> int main() { int i,a,b=0,n=0; int ret=0; scanf("%d", &a); if(a==0){ printf("ling"); } if (a < 0) { printf("fu "); a = -a; } while (a > 0) { int digit = a % 10; ret = ret * 10 + digit; a /= 10; n++; } for (i = 1; i <= n; i++) { b = ret % 10; ret /= 10; switch (b) { case 0: printf("ling"); break; case 1: printf("yi"); break; case 2: printf("er"); break; case 3: printf("san"); break; case 4: printf("si"); break; case 5: printf("wu"); break; case 6: printf("liu"); break; case 7: printf("qi"); break; case 8: printf("ba"); break; case 9: printf("jiu"); break; } if (ret > 0) { printf(" "); } } return 0; }
//该代码是脑回路比较清奇的我写的,先逆序得到该数的位数,后再逆序使得该数正序输出
//该代码在以零结尾的sample会出现格式错误
//原因是:例如输入600,在int digit = a % 10;ret = ret * 10 + digit;后导致
//ret变成6;无法成为006;
#include<stdio.h> #include<math.h> int main() { int i, a, b = 0, n = 0, flag; int ret = 0; scanf("%d", &a); if (a == 0) { printf("ling"); } if (a < 0) { printf("fu "); a = -a; } while (a > 0) { int digit = a % 10; ret = ret * 10 + digit; a /= 10; n++; } for (flag = 0,i = 1; i <= n; i++) { b = ret % 10; if(fabs(ret) < 10) { flag = 1; } ret /= 10; switch (b) { case 0: printf("ling"); break; case 1: printf("yi"); break; case 2: printf("er"); break; case 3: printf("san"); break; case 4: printf("si"); break; case 5: printf("wu"); break; case 6: printf("liu"); break; case 7: printf("qi"); break; case 8: printf("ba"); break; case 9: printf("jiu"); break; } if (ret > 0 && flag == 0 ) { printf(" "); } if (flag == 1 && i != n) { printf(" "); } } return 0; }
//舍友帮忙改的,解决那个600的问题,能通过PTA。