循环语句


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。

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM