第1題
🎗設有定義 char *p[ ] = {“Shanghai”, Beijing", “Hongkong”}; 則結果為 j 字元的表達式是 ( )
A. *p[1] + 3
B. *(p[1] + 3)
C. *(p[3] + 1)
D. p[3][1]
📝 分析:
此題是對指針數組的考察,對于上面的定義我們可以畫出如下關系圖
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0czYhFzNwYWMkRjM4AzMhNTYxQjZ2QGN4IDM1QTO1UzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
對于這段代碼必須得了解這張圖,否則你對這個代碼的了解是有問題的,此外還需要了解運算符之間的優先級
是以選擇 B 選項
第2題
🎗執行以下函數後, i 的值是 ( )
int f(int x)
{
return ((x > 2) ? x * f(x - 1) : 3);
}
int i;
i = f(f(2));
A. 30
B. 無限遞歸
C. 9
D. 2160
📝 分析:
是以選擇 C 選項
第3題
🎗在 int p[ ][4] = { {1}, {3, 2}, {4, 5, 6}, {0} }; 中,p[1][2] 的值是 ( )
A. 1
B. 0
C. 6
D. 2
📝 分析:
此題是對二維數組的考查
對于二維數組的不完全初始化會主動指派 0
是以選擇 B 選項
第4題
🎗設有以下宏定義,則執行語句 z = 2 * (N + Y( 5 + 1))後,z 的值是 ( )
#define N 3+1
#define Y(n) ((N+1)*n)
A. 60
B. 190
C. 248
D. 以上全錯
📝 分析:
❗ define替換規則 ❕
在程式擴充 #define 定義符号和宏時,需要涉及以下幾個步驟
1️⃣ 在調用宏時,首先對參數進行檢查,看看是否包含任何由 #define 定義的符号。如果是,它們優先被替換
2️⃣ 替換文本随後被插入到程式中原來文本的位置。對于宏,參數名被它們的值替換
3️⃣ 最後,再次對結果檔案進行掃描,看看它是否包含任何由 #define 定義的符号。如果是,就要重複上述過程
⚠ 注意:
▶ 宏參數和 #define 定義中可以出現其它 #define 定義的常量。
但是對于宏,不能出現遞歸,因為宏隻做簡單的文本替換,且隻替換一次
▶ 當預處理器搜尋 #define 定義的符号時,字元串常量的内容并不被搜尋
❗ 代碼步驟如下 ❕
是以選擇 A 選項
第5題
🎗char a; int b; float c; double d; 則表達式 a * b + d - c 值的類型是 ( )
A. float
B. int
C. char
D. double
📝 分析:
❗ 算術轉換 ❕
如果某個操作符的各個操作數屬于不同的類型,那麼除非其中一個操作數轉換為另一個操作數的類型,否則操作就無法進行。
下面的層次體系稱為尋常算術轉換
long double
double
float
unsigned long int
long int
unsigned int
int
如果某個操作數的類型在上面這個清單中排名較低,那麼首先要轉換為另外一個操作數的類型後執行運算
低位元組 -> 高位元組 (如果是相同位元組的就向精度更高的轉換)
是以選擇 D 選項
第6題
🎗程式設計題<難度系數⭐>
📝 題述:
Fibonacci 數列是這樣定義的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
是以,Fibonacci 數列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在 Fibonacci 數列中的數我們稱為 Fibonacci 數。
給你一個 N,你想讓其變為一個 Fibonacci 數,每一步你可以把目前數字 X 變為 X - 1 或者 X + 1 ,現在給
你一個數 N 求最少需要多少步可以變為 Fibonacci 數。
🍳 輸入描述:
輸入為一個正整數 N(1 ≤ N ≤ 1,000,000)
🍳 輸出描述:
輸出一個最小的步數變為 Fibonacci 數
💨 示例:
輸入,15
輸入,2
🧷 平台:Visual studio 2017 && windows
🔑 核心思想:
牛客網原題
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
int n = 0;
scanf("%d", &n);
int f1 = 0;
int f2 = 1;
int f3 = 0;
while(1)
{
if(n == f2)
{
printf("%d\n", 0);
break;
}
else if(n < f2)
{
if(abs(f1-n) < abs(f2-n))
{
printf("%d\n", abs(f1-n));
break;
}
else
{
printf("%d\n", abs(f2-n));
break;
}
}
//說明n不在f1和f2的那個區間内,還需要疊代Fib數
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return 0;
}
第7題
🎗程式設計題 <難度系數⭐⭐>
📝 題述:
請實作一個函數,将一個字元串中的每個空格替換成 “%20” 。
例如,當字元串為 We Are Happy. 則經過替換之後的字元串為 We%20Are%20Happy。
🧷 平台:Visual studio 2017 && windows
🔑 核心思想:
❓ 無厘頭 ❔
相信肯定會有人覺得這道題很奇怪,但其實這道題并不奇怪。
當我們去百度搜尋關鍵字 “無 厘 頭” 時
發現上面的連結使用 “%20” 替換了空格
❓ 為什麼會空格會替換成 %20 ❔
豌豆在網上查詢了下,大多數是這樣說的:
W3C标準規定,URL查詢參數中空格都會被編成加号+;而在 RFC 2396 中 URI 裡的保留字元都需轉義成 %HH 格式
當然也可以了解空格的 ASCII 碼是 32,對應的十六進制是 20
行哒!這裡就不扯遠了
牛客網原題
#include<stdio.h>
#include<string.h>
void ReplaceSpace(char* str, int length)
{
//1.計算空格的個數
int i = 0;
int spcount = 0;
for (i = 0; i < length; i++)
{
if (str[i] == ' ')
spcount++;
}
//2.計算替換空格後新的長度和最後的位置
int newlengh = length + spcount * 2;
int pos = newlengh - 1;
//3.從後往前填充
for (i = length - 1; i >= 0; i--)
{
//空格
if (str[i] == ' ')
{
str[pos--] = '0';
str[pos--] = '2';
str[pos--] = '%';
}
//非空格
else
{
str[pos--] = str[i];
}
}
}
int main()
{
char arr[20] = "We Are Happy.";
ReplaceSpace(arr, strlen(arr));
printf("%s\n", arr);
return 0;
}