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。