目錄
一、選擇題
二、編程題
- 🎈個人主頁:庫庫的里昂
- ?🎐CSDN新晉作者
- ?🎉歡迎 👍點贊?評論?收藏
- ?收錄專欄:C語言每日一練
- ???其他專欄:代碼小游戲C語言初階
- 🤝希望作者的文章能對你有所幫助,有不足的地方請在評論區留言指正,大家一起學習交流!🤗
【前言】
在大家學完初階C語言后,有很多知識點是比較模糊的,我們應該多刷題,這樣才能鞏固我們所學知識。所以我開了一個新專欄C語言每日一刷,每一篇都包含5道選擇題,2道編程題,每一道題后面都會有詳細的解析。這個系列每日一更,大家來看看吧!?
一、選擇題
1、以下程序段的輸出結果是( )
#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
【解析】
strlen() 函數用于獲取字符串的長度(即字符中字符的個數,不包括\0)。\\、\123、\t是轉義字符,所以長度是12。
\\表示單個字符
\123 表示八進制的ASCII碼值為123對應的字符
It 表示制表符
很多小伙伴會忘記轉義字符的具體內容,這里有常用轉義字符。
?2、若有以下程序,則運行后的輸出結果是( )
#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
【解析】
因為#define是宏定義,僅僅是直接替換,這里2替換N,N+1替換M,所以NUM為(N+1+1)*N+1/2=4*2+0=8,選B。
3、如下函數的 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
【解析】
靜態變量static只會被初始化一次,所以
第一次調用f(1):n=2;i=2;調用f(2)
第二次調用f(1):n=4;i=3;調用f(4)
第三次調用f(1):n=7;i=2;調用f(7)
第四次調用f(1):返回7
所以最終函數返回結果為7,選C。
4、下面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和*之間的相對位置來決定的 ? ?const放在*的左邊意味著對應的指針不能被修改,放在*的右邊意味著指針所指向的內容不能被修改。那么觀察題目我們只需要找相對位置一樣的即可,不難發現,(1)和(2)const和*的相對位置都是const在*的右邊,故效果一樣,而(3)的const放在*的右側,效果不一樣。故選B
5、對于下面的說法,正確的是( )
A.對于 struct X{short s;int i;char c;},sizeof(X)等于sizeof(s) + sizeof(i) + sizeof(c)
B.對于某個double變量 a,可以使用 a == 0.0 來判斷其是否為零
C.初始化方式 char a[14] = "Hello, world!"; 和char a[14]; a = "Hello, world!";的效果相同
D.以上說法均不對
【答案】D
【解析】
A結構體要按高位對齊,int占四個字節,short占兩個,char占一個字節,所以4+4+4=12;
B要判斷一個雙精度浮點數:if(abs(f) <= 1e-15)
C數組初始化兩種方式:一種逐個賦值char a[14]={'H','e','I','I','o'};另一種char a[14]="Hello,world!"
所以選D。
二、編程題
1.OJ鏈接【牛客網題號: HJ76 尼科徹斯定理】【難度:簡單】
驗證尼科徹斯定理,即:任何一個整數 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
#include<stdio.h>
int main()
{int m = 0;while (scanf("%d", &m)){int i = 0;int ret = m * (m - 1) + 1;for (i = 1; i <= m; i++){printf("%d", ret);ret += 2;if (m != i)printf("+");}printf("\n");}return 0;
}
2.OJ鏈接【牛客網題號: HJ100 等差數列】【難度:簡單】
等差數列 2,5,8,11,14, ... 。(從 2 開始的 3 為公差的等差數列),求等差數列前 n 項和。
注意:本題有多組輸入
輸入描述:輸入一個正整數 n 。
輸出描述:輸出一個相加后的整數。
示例:
輸入:2 輸入:275
輸出:7 輸出:113575
說明:2+5=7 說明:2+5+...+821+824=113575
#include<stdio.h>
int main()
{int n = 0;while (scanf("%d", &n)){printf("%d\n", (3 * n + 1) * n / 2);}return 0;
}
好了,今天的每日一刷就到這里結束了,感謝大家的觀看!