C語言學習!
????????1.小明上課需要走n階臺階,他每次可以選擇走一階或者走兩階,他一共有多少種走法?
輸入描述:輸入包含一個整數n(1 ≤ n?≤30)
輸出描述:輸出一個整數,即小明可以走的方法數。
代碼示例:
#include <stdio.h>int fig(int n)
{if (n <= 2){return n;}else{return fig(n - 1) + fig(n - 2);}
}int main()
{int n = 0;scanf("%d", &n);//輸入int ret = fig(n);//計算printf("%d\n", ret);//輸出return 0;
}
運行結果:
2
2
10
89
????????2.有一個整數序列(可能有重復的整數),現刪除指定的某一個整數,輸出刪除指定數字之后的序列,序列中未被刪除數字的前后位置沒有發生改變。
數據范圍:序列長度和序列中的值都滿足 1 ≤ n?≤ 50
輸入描述:
- 第一行輸入一個整數(1 ≤ n?≤ 50)。
- 第二行輸入N個整數,輸入用空格分隔的N個整數。
- 第三行輸入想要進行刪除的一個整數。
輸出描述:輸出為一行,刪除指定數字之后的序列。
代碼示例:
#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);//接收n個數字int arr[50] = { 0 };int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}int del = 0;scanf("%d", &del);//接收刪除的數據int j = 0;//j作為下標鎖定的位置,用來存放不刪除的數據for (i = 0; i < n; i++){if (arr[i] != del){arr[j++] = arr[i];}}for (i = 0; i < j; i++)//輸出{printf("%d ", arr[i]);}return 0;
}
運行結果:
6
5 7 6 9 5 8
5
7 6 9 8
????????3.輸出n個成績,換行輸出n個成績中最高分和最低分的差。
輸入描述:
- 兩行。第一行為n,表示n個成績,不會大于10000.
- 第二行為n個成績(整數表示,范圍0~100),以空格隔開。
輸出描述:一行,輸出n個成績中最高分數和最低分數的差。
代碼示例:
#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);int arr[10000] = { 0 };int i = 0;for (i = 0; i < n; i++)//輸入{scanf("%d", &arr[i]);}int max = 0;int mix = 100;for (i = 0; i < n; i++)//比較出最大值和最小值{if (arr[i] < mix){mix = arr[i];}if (arr[i] > max){max = arr[i];}}printf("%d", max - mix);//輸出return 0;
}
運行結果:
6
66 88 60 87 99 80
39
? ? ? ? 4.字母大小寫轉換,有一個字符,判斷它是否為大寫字母,如果是,將它轉換成小寫字母;反之則轉換為大寫字母。
輸入描述:多組輸入,每一行輸入一個字母。
輸出描述:針對每組輸入,輸出單獨占一行,輸出字母的對應形式。
代碼示例1:
#include <stdio.h>
int main()
{char n = 0;while(scanf("%c", &n)==1){if (n >= 'a' && n <= 'z'){printf("%c\n", n - 32);}else if (n >= 'A' && n <= 'Z'){printf("%c\n", n + 32);}}return 0;
}
運行結果:
a
A
G
g
f
F
H
h
代碼示例2:
#include <ctype.h>
#include <stdio.h>
int main()
{char n = 0;while(scanf("%c", &n)!=EOF){if (islower(n))//islower函數判斷是否是小寫字母,是返回1{printf("%c\n", toupper(n));//toupper函數可將小寫字母轉大寫}else if (isupper(n))//isupper函數判斷是否是大寫字母,是返回1{printf("%c\n", tolower(n));//tolower函數可將大寫字母轉小寫}}return 0;
}
運行結果:
a
A
b
B
G
g
T
t
分析:scanf函數讀取成功時,返回讀取的數據個數;讀取失敗時,返回EOF。
? ? ? ? 5.判斷輸入的字符是不是字母。
輸入描述:多組輸入,每一行輸入一個字符。
輸出描述:針對每組輸入,輸出但獨占一行,判斷輸入字符是否為字母,輸出內容詳見輸出樣例。
輸出樣例:
a
a is an alphabet.
*
* is not an alphabet.
代碼示例1:
#include <stdio.h>
int main()
{char ch = 0;while (scanf("%c", &ch) == 1){if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){printf("%c is an alphabet.\n", ch);}else{printf("%c is not an alphabet.\n", ch);}getchar( );//用于處理輸入字符末尾的\n}return 0;
}
運行結果:
5
5 is not an alphabet.
D
D is an alphabet.
a
a is an alphabet.
*
* is not an alphabet.
分析:
????????getchar( );用于處理輸入字符末尾的\n
代碼示例2:
#include <stdio.h>
int main()
{char ch = 0;while (scanf(" %c", &ch) == 1)//%c前面加空格,是為了跳過下一個字符之前的所有空白字符\n{if (isalpha(ch))// isalpha函數用于判斷是否為字母,是輸出1.{printf("%c is an alphabet.\n", ch);}else{printf("%c is not an alphabet.\n", ch);}}return 0;
}
運行結果:
#
# is not an alphabet.
G
G is an alphabet.
c
c is an alphabet.
9
9 is not an alphabet.
分析:
? ? ? ? scanf中%c前面加空格,是為了跳過下一個字符之前的所有空白字符\n
? ? ? ? isalpha函數用于判斷是否為字母,是輸出1.
????????6.變種水仙花數:把任意的數字從中間拆分成兩個數字,如1461可拆分為1和461;14和61;146和1,若所有拆分后的乘積之和等于自身則是一個水仙花數。
1461=1*461?+ 14*61 + 146*1
求出5位數中的所有水仙花數。
代碼示例:
#include <stdio.h>
#include <math.h>int main()
{int i = 0;for (i = 10000; i < 99999; i++){int j = 0;int sum = 0;for (j = 1; j <= 4; j++){int k = (int)pow(10, j);sum += (i / k) * (i % k);}if (sum == i){printf("%d ", i);}}return 0;
}
運行結果:
14610 16420 23610 34420 65500