需要1個變數儲存輸入的數字,稱此變數為inputNum好了
需要1個變數紀錄到目前為止所有inputNum的總和,稱此變數為sum,其初始值為0
以迴圈執行5次,每次輸入數字到inputNum,並把總和放到sum,迴圈執行的次數以變數i來代表
平均數為sum/5
#include <stdio.h>
int main {
int i; // 紀錄迴圈執行次數
int inputNum; // 儲存目前輸入的數值
int sum = 0; // 儲存到目前為止的總和
for (i = 1; i <= 5; i++) { // 此迴圈執行5次
printf("Please Input Number %d: ",i); // 提示使用者輸入第i個數字
scanf("%d", &inputNum); // 讀入整數到inputNum
sum = sum + inputNum; // 加總到sum變數
printf("Sum is %d, average is %lf\n", sum, (double)sum / 5); // 輸出結果
寫一函數輸入參數int n,傳回1+2+3...+n的總合。解析:
要想辦法拜訪1,2,3...n的每一個數字一次
可用for(i=1; i <= n; i++)的形式達成上述目標
拜訪到這些數字時,就把它們加起來
int sum(int n) {
int i; // 紀錄目前要處理的數字
int sum = 0; // 紀錄到目前為止的總和
for (i = 1; i <= n; i++) {
sum = sum + i;
return sum;
寫一函數輸入參數int n,傳回1+3+5...+n的總合。解析:
要想辦法拜訪1,3,5...n的每一個數字一次,也就是從1開始每次加2
可用for(i=1; i <= n; i+=2)的形式達成上述目標
拜訪到這些數字時,就把它們加起來
int sum(int n) {
int i; // 紀錄目前要處理的數字
int sum = 0;
for (i = 1; i <= n; i += 2) { // i+=2讓i往後面走2個
sum = sum + i;
return sum;
寫一函數於螢幕上畫出九九乘法表。解析:
總共有i=1..9列j=1..9行,對第i列第j行元素來說,其數值為i*j
void nine() {
int i, j; // i表示第i列(橫向),j表示第j行(縱向)
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
printf("%3d", i * j);
printf("\n");
使用printf撰寫一函數輸入參數int size,並在螢幕上印出正方形,size=3的樣子如下
螢幕上的游標只能由上而下,由左而右,無法回頭。
此圖形共有size列,每列有size個*,因此可用兩層迴圈來做。
要讓一個敘述執行size次,可用for(i = 1; i <= size; i++)的形式來達成
* print out rectangle
* @param size length of the rectangle
void print_rectangle(int size) {
int i, j; // 第i列,第j行
for (i = 1; i <= size; i++) { // 印出第i列
for (j = 1; j <= size; j++) { // 第i列有size個*
printf("*");
printf("\n");
使用printf撰寫一函數輸入int size,並在螢幕上印出斜一邊的三角形,size=3的樣子如下
螢幕上的游標只能由上而下,由左而右,無法回頭。
此圖形共有1到size列,第i列有i個*,因此可用兩層迴圈來做。
void print_right_triangle(int size) {
int i, j; // 第i列,第j行
for (i = 1; i <= size; i++) { // 印出第i列
for (j = 1; j <= i; j++) { // 第i列有i個*
printf("*");
printf("\n");
使用printf撰寫一函數輸入int size,並在螢幕上印出等腰的三角形,size=3的樣子如下
*****
總共有1..size列,對第i列而言,有size-i個空格,以及2*i-1個*
void print_equilateral_triangle(int size) {
int i, j;
for (i = 1; i <= size; i++) { // 印出第i列
for (j = 1; j <= size-i; j++) { // 第i列 有size-i個空格
printf(" ");
for (j = 1; j <= 2 * i - 1; j++) { // 以及2*i-1個*
printf("*");
printf("\n");
上述問題的另一個想法是
總共有1..size列,對第i列而言,總共有size+i-1個符號,其中1..size-i是空白,size-i+1..size+i-1是*
void print_equilateral_triangle(int size) {
int i, j;
for (i = 1; i <= size; i++) { // 印出第i列
for (j = 1; j < size + i; j++) { // 每一列有size+i-1個符號
if (j <= size - i) { // 在size-i左邊(含)的符號是空白
printf(" ");
} else { // 其他的是*
printf("*");
printf("\n");
使用printf撰寫一函數輸入int size,並在螢幕上印出等腰的三角形,size=3的樣子如下
*****
這個形狀的上半部和前面一題是一模一樣的,下半部則是倒過來了,所謂倒過來的意思是,上半部是依1..n的順序列出,下半部則是依n-1..1的順序列出,因此可以寫成兩個雙重迴圈,且這兩個迴圈的內迴圈完全一樣,只是外面的改為i由n-1..1
void print_diamond(int size) {
int i, j;
for (i = 1; i <= size; i++) { // 先印出上面的size列
for (j = 1; j < size + i; j++) {
if (j <= size - i) {
printf(" ");
} else {
printf("*");
printf("\n");
for (i = size - 1; i >= 1; i--) { // 在印出下面的size-1列
for (j = 1; j < size + i; j++) { // 這部分和上半部是一樣的
if (j <= size - i) {
printf(" ");
} else {
printf("*");
printf("\n");
寫一函數求兩個整數的最大公因數,解析:
此函數需要兩個參數x,y
當y不能整除x時,將x設成為y,y設為x%y, 重複此步驟直到x%y為0
此時y就是這兩個數的最大公因數
int gcd(int x, int y) {
int tmp;
// 如果x < y 則下面的迴圈執行第一次時就會交換x,y了
while (x % y != 0) {
tmp = y;
y = x % y;
x = tmp;
return y;
寫一函數求費氏數,解析:
F(n)=n, if n<=1;
F(n)=F(n-1)+F(n-2), otherwise
可定義兩變數fn_1,fn_2表示最近兩個找出的費氏數
下一個費氏數依定義為fn_1 + fn_2
找到最新的費氏數後,最近的兩個費氏數就變成了fn_1+fn_2以及fn_1
以變數i紀錄目前要求的是哪一個費氏數
以變數tmp作為更新最新兩個費氏數所需的記憶體空間
int fab(int n) {
int fn_1 = 1, fn_2 = 0; // 紀錄最近找到的兩個費氏數
int i, tmp; // i表示目前要找F(i)
if (n <= 1) return n;
for (i = 2; i <= n; i++) {
tmp = fn_1; // 先把fn_1紀錄在tmp
fn_1 += fn_2; // 最新的費氏數是前面兩個相加
fn_2 = tmp; // 第二新的就是原先的fn_1