目錄
- 選擇題一
- 選擇題二
- 選擇題三
- 選擇題四
- 編程題一
- 編程題二
選擇題一
以下程序段的輸出結果是()
#include<stdio.h>
int main()
{
char s[] = "\\123456\123456\t";
printf("%d\n", strlen(s));
return 0;
}
A: 12 B: 13 C: 16 D: 以上都不對
【答案】 A
【分析】這道題涉及到轉義字符,\是一種轉義字符,而\就是以(第一個\)修飾(第二個\)使(第二個\)不表示轉義的意思(這里有點繞)
因此\ \為一個字符,而123456則為6個字符。
對后面的\123456\t來說,\123表示一個字符(\ddd:ddd是表示一個1-3位的八進制數字),而456則表示3個字符,\t表示一個字符。
接下來就是strlen的含義,strlen是計算字符串的長度,直到遇見\0才會停止,因此經過前面的分析,strlen(s)=1+6+1+3+1=12
選擇題二
若有以下程序,則運行后的輸出結果是()
#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
printf("%d\n", NUM);
return 0;
}
A: 4 B: 8 C: 9 D: 6
【答案】 B
【分析】這道題就是替換變量,根據上面的定義我們知道
N=2
M=N+1
NUM=(M+1)*M/2
將等式帶入第三表達式即可得出結果。
值得注意的是許多人算出的結果為6,因為他們在算時NUM=(2+1+1)(2+1)/2=6(事實上這道題我也是這樣算的)
但是實際上正確的算法為:
NUM=(2+1+1) *2+1/2=8.5
這是因為(M+1)*M的第二個M并沒有()因此在計算時不能擅自添加()。
最后的8則是因為%d為int的打印方式,所以將小數點后的5省略了
選擇題三
如下函數的 f(1) 的值為( )
int f(int n)
{
static int i = 1;
if(n >= 5)
return n;
n = n + i;
i++;
return f(n);
}
A: 5 B: 6 C: 7 D: 8
【答案】C
【分析】這道題是遞歸類型的題 ,n>=5為限制條件,但需要注意的是static修飾的i
千萬不用以為int i=1,i就一直為1了,static修飾使它可以保留以前變化的值,因此i是一直在增加的
詳細的過程如圖:
選擇題四
下面3段程序代碼的效果一樣嗎( )
int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;
A: (2)=(3) B: (1)=(2) C: 都不一樣 D: 都一樣
【答案】 B
【分析】我們需要了解const的含義,只要了解了含義就可以做這道題
const是修飾他后面的變量使它的地址或者數值無法改變。
比如:
(1)中const修飾的是a,就說明a無法改變,因為a是表示的地址,所以a所表示的地址無法改變,但是a的值是可以改變的。
(2)中const修飾的仍是*a(和int無關)
(3)const修飾的是a,也就說明a所代表的數值無法改變,但a的地址是可以改變。
編程題一
驗證尼科徹斯定理
任何一個整數 m 的立方都可以寫成 m 個連續奇數之和
例如
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
輸入一個正整數 m(m≤100)
將 m 的立方寫成 m 個連續奇數之和的形式輸出。
注意:本題含有多組輸入數據。
輸入描述:輸入一個int整數
輸出描述:輸出分解后的string
示例:
輸入:6
輸出:31+33+35+37+39+41
【題目分析】
我們需要用n將m的立方表示出來,然后由連續奇數之和可以設第一個奇數a1=x,然后由等差數列的求和公式可以算出Sm=m*x+(m-1)2,
即可得出關系式m^3=mx+2 * (m-1) * m
即x=m * m- m+1
因為x為第一項,為了求出x的具體值我們需要用到for循環
【代碼】
int main()
{int m = 0;scanf("%d", &m);int n = m * m * m;int x = m * m - m + 1;for (int i = 1; i <= m; i++){if (i == m)printf("%d", x);else{printf("%d+", x);x += 2;}}return 0;
}
編程題二
等差數列 2,5,8,11,14, … 。(從 2 開始的 3 為公差的等差數列),求等差數列前 n 項和
注意:本題有多組輸入
輸入描述:輸入一個正整數 n 。
輸出描述:輸出一個相加后的整數
示例:
輸入:2 輸入:275
輸出:7 輸出:113575
說明:2+5=7 說明:2+5+...+821+824=113575
【題目分析】
這道題和上一題的解法類似,但是是求的Sn
因此需要設一個sum(即Sn),還有x通過式子sum+=x,x+=3再加上循環即可解決問題
【代碼】
#include<stdio.h>
int main()
{int n, x = 2, sum = 0;scanf("%d", &n);for (int i = 1; i <= n; i++){sum += x;x += 3;}printf("%d", sum);return 0;
}