天天看點

C語言入門必做踩坑題《篇三》

第1題

🎗設有定義 char *p[ ] = {“Shanghai”, Beijing", “Hongkong”}; 則結果為 j 字元的表達式是 ( )

A. *p[1] + 3

B. *(p[1] + 3)

C. *(p[3] + 1)

D. p[3][1]

📝 分析:

此題是對指針數組的考察,對于上面的定義我們可以畫出如下關系圖

C語言入門必做踩坑題《篇三》

對于這段代碼必須得了解這張圖,否則你對這個代碼的了解是有問題的,此外還需要了解運算符之間的優先級

C語言入門必做踩坑題《篇三》

是以選擇 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語言入門必做踩坑題《篇三》

是以選擇 C 選項

第3題

🎗在 int p[ ][4] = { {1}, {3, 2}, {4, 5, 6}, {0} }; 中,p[1][2] 的值是 ( )

A. 1

B. 0

C. 6

D. 2

📝 分析:

此題是對二維數組的考查

對于二維數組的不完全初始化會主動指派 0

C語言入門必做踩坑題《篇三》

是以選擇 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 定義的符号時,字元串常量的内容并不被搜尋

    ❗ 代碼步驟如下 ❕

C語言入門必做踩坑題《篇三》

是以選擇 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

🔑 核心思想:

C語言入門必做踩坑題《篇三》

牛客網原題

#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

🔑 核心思想:

C語言入門必做踩坑題《篇三》

    ❓ 無厘頭 ❔

      相信肯定會有人覺得這道題很奇怪,但其實這道題并不奇怪。

      當我們去百度搜尋關鍵字 “無 厘 頭” 時

      發現上面的連結使用 “%20” 替換了空格

C語言入門必做踩坑題《篇三》

    ❓ 為什麼會空格會替換成 %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;
}
           

繼續閱讀