註:練習題目均出自《明解C語言 入門篇》 一、do語句 1,求多個整數的和及平均值 二、whie語句 1,遞增顯示從0到輸入的正整數為止的各個整數 2,編寫一段程式,按照升序顯示出小於輸入值的所有正偶數 3,編寫一段程式,使之交替顯示+和-,總個數等於所輸入的整數值 4,逆向顯示正整數 三、for語 ...
註:練習題目均出自《明解C語言 入門篇》
一、do語句
1,求多個整數的和及平均值
#include<stdio.h> int main(void) { int sum = 0; //和 int cnt = 0; //整數個數 int retry; //判斷是否繼續 do{ int t; printf("請輸入一個整數:"); scanf("%d",&t); sum = sum + t; cnt = cnt + 1; printf("是否繼續?<Yes...0/No...9:"); scanf("%d",&retry); } while(retry == 0); printf("和為%d,平均值為%.2f。\n",sum,(double)sum / cnt); return 0; }
二、whie語句
1,遞增顯示從0到輸入的正整數為止的各個整數
#include<stdio.h> int main(void) { int i,n; printf("請輸入一個正整數:"); scanf("%d",&n); i = 0; while(i <= n) printf("%d ",i++); //i的值在顯示之後遞增 printf("\n"); return 0; }
2,編寫一段程式,按照升序顯示出小於輸入值的所有正偶數
#include<stdio.h> int main(void) { int i,n; printf("請輸入一個正整數:"); scanf("%d",&n); i = 0; while(i <= n){ i = i + 2; if(i < n) //應先對遞增後的值進行判斷,看是否越界 printf("%d ",i); } printf("\n"); return 0; }
3,編寫一段程式,使之交替顯示+和-,總個數等於所輸入的整數值
#include<stdio.h> int main(void) { int num; int i=0; printf("正整數:"); scanf("%d",&num); while (i<num) { if (++i%2) putchar('+'); else putchar('-'); } return 0; }
4,逆向顯示正整數
#include<stdio.h> int main(void) { int n; do{ printf("請輸入一個正整數:"); scanf("%d",&n); if(n <= 0) puts("請不要輸入非正整數。"); }while(n <= 0); printf("該整數逆向顯示的結果是 "); while(n > 0){ printf("%d", n % 10); n /= 10; } puts("。 "); return 0; }
三、for語句
1,編寫一段程式,根據輸入的整數,迴圈顯示1234567890,顯示的位數和輸入的整數值相同
#include <stdio.h> int main(void) { int i,j,n; j=1; printf("請輸入一個整數:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("%d",j); j++; if(j>9) j-=10; } printf("\n"); return 0; }
2,編寫一段程式,顯示出身高和標準體重的對照表。註:顯示的身高範圍和間隔由輸入的整數值進行控制,標準體重精確到小數點後兩位。
#include <stdio.h> int main() { int beginHigh = 0, endHigh = 0; float weight = 0; int margin = 0; printf("開始數值(cm):"); scanf("%d", &beginHigh); printf("結束數值(cm):"); scanf("%d", &endHigh); printf("間隔值(cm):"); scanf("%d", &margin); for (int i = beginHigh;i <= endHigh; i+=margin) { weight = (i - 100)*0.9; //這是一個計算標準體重的公式 printf("%d cm\t\t%.2f\n", i, weight); // \t代表製表符,相當於按下一次Tab鍵 } return 0; }
3,顯示輸入的整數值的所有約數
#include<stdio.h> int main(void) { int i,n; printf("整數值:"); scanf("%d",&n); for(i = 1;i <= n;i++) if(n % i == 0) printf("%d ",i); putchar('\n'); return 0; }
4,編寫一段程式,輸入一個整數值,顯示該整數值個' * '。每顯示5個就進行換行。
#include<stdio.h> int main() { printf("請輸入整數:"); int a; scanf("%d",&a); int b=0; for(int i=0;i<a;i++) { if(b==5) { printf("\n"); b=0; } printf("*"); b=b+1; } }
四、多重迴圈
1,顯示九九乘法表
#include<stdio.h> int main(void) { int i,j; for(i = 1;i <= 9;i++){ for(j = 1;j <= 9;j++) printf("%3d",i * j); putchar('\n'); } return 0; }
2,編寫一段程式,為九九乘法表增加橫縱標題
#include <stdio.h> int main() { int i, j ; //列印第一行 printf(" |") ; for(i = 1; i <= 9; i++) { printf(" %d", i) ; } printf("\n") ; //列印第二行 for(i = 1; i <= 32; i++) printf("-") ; printf("\n") ; //開始列印99乘法表,每行開頭要有行號 for(i = 1; i <= 9; i++)//行 { printf(" %d |", i) ; for(j = 1; j <= 9; j++)//列 { printf(" %2d", i*j) ; } printf("\n") ; } return 0 ; }
3,畫一個長方形
#include<stdio.h> int main(void) { int i,j; int height,width; puts("讓我們來畫一個長方形。"); printf("高:"); scanf("%d",&height); printf("寬:"); scanf("%d",&width); for(i = 1;i <= height;i++) { //長方形有height行 for(j = 1;j <= width;j++) //每行顯示width個 putchar('*'); putchar('\n'); //換行 } return 0; }
4,(1)顯示直角在左下方的等腰直角三角形
#include<stdio.h> int main(void) { int i,j,len; puts("直角在左下方的等腰直角三角形。"); printf("邊長:"); scanf("%d",&len); for(i = 1;i <= len;i++){ for(j = 1;j <= i;j++) putchar('*'); putchar('\n'); } return 0; }
(2)顯示直角在右下方的等腰直角三角形
#include<stdio.h> int main(void) { int i,j,len; puts("直角在左下方的等腰直角三角形。"); printf("邊長:"); scanf("%d",&len); for(i = 1;i <= len;i++){ for(j = 1;j <= len-i;j++) putchar(' '); for(j = 1;j <= i;j++) putchar('*'); putchar('\n'); } return 0; }
(3)顯示直角在左上方的等腰直角三角形
#include <stdio.h> int main() { int i,j,len; puts("直角在左下方的等腰直角三角形。"); printf("邊長:"); scanf("%d",&len); for (int i = 1; i<=len; i++) { for (int j = 1; j <=len-i+1; j++) { putchar('*'); } putchar('\n'); } return 0; }
(4)顯示直角在右上方的等腰直角三角形
#include <stdio.h> int main() { int i,j,len; puts("直角在左下方的等腰直角三角形。"); printf("邊長:"); scanf("%d",&len); for (int i = 1; i<=len; i++) { for (int j = 1; j <=i; j++) { putchar(' '); } for (int j=1; j<=len-i+1; j++) { putchar('*'); } putchar('\n'); } return 0; }
5,編寫一段程式,輸入一個整數,顯示出輸入整數層的金字塔形狀
提示:第 i 行顯示 (i - 1)* 2 + 1 個 ' * '
#include "stdio.h" int main(int argc, char const *argv[]) { int n; puts("讓我們來描繪一個金字塔。"); printf("金字塔有幾層:"); scanf("%d",&n); for (int i = 1;i<=n; i++) { for (int j = 1; j<=n-i; j++) { putchar(' '); } for (int j=1;j<=i ; j++) { putchar('*'); } for (int j=1; j<i; j++) { putchar('*'); } putchar('\n'); } return 0; }
金字塔變形(1)
#include<stdio.h> int main() { int i,j,n; puts("讓我們來描繪一個金字塔。"); printf("金字塔有幾層:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=0;j<n-i;j++) printf(" "); for(j=1;j<2*i;j++) printf("%d",i); printf("\n"); } return 0; }
金字塔變形(2)
#include<stdio.h> int main() { int i,j,n; puts("讓我們來描繪一個金字塔。"); printf("金字塔有幾層:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=0;j<n-i;j++) printf(" "); for(j=1;j<=i;j++) printf("%d",j); for(j=i-1;j>0;j--) printf("%d",j); printf("\n"); } }
總結
迴圈是C語言的基礎,所以要扎實練習,孰能生巧。在此列舉一些註意事項:
- 註意區分while語句和do-while語句,前者是先判斷後執行,後者是先執行後判斷。
- do語句的迴圈體至少會執行一次,而while語句的迴圈體則有可能一次也不會執行。
- 註意不要在for語句和while語句的()後放置空語句。
- do語句的迴圈體,即使是單一語句,也可以用{ }括起來使之成為複合語句(程式塊),這樣程式會易讀。