🔥個人主頁:@草莓熊Lotso
🎬作者簡介:C++研發方向學習者
📖個人專欄:?《C語言》?《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》
??人生格言:生活是默默的堅持,毅力是永久的享受。
前言:我們距離學習完C語言已經很久了,在數據結構學完后,博主準備通過這16天的強化訓練和大家一起回顧C語言的知識,今天依舊是五道選擇和兩道編程題,希望大家能有所收獲。
目錄
選擇題:
編程題:
1.圖片整理
2.尋找數組的中心下標
選擇題:
1、以下對C語言函數的有關描述中,正確的有【多選】( )
A: 在C語言中,一個函數一般由兩個部分組成,它們是函數首部和函數體
B: 函數的實參和形參可以是相同的名字
C: 在main()中定義的變量都可以在其它被調函數中直接使用
D: 在C程序中,函數調用不能出現在表達式語句中
答案解析:
正確答案:AB主函數中定義的局部變量只在主函數中有效,因為主函數也是一個函數,它與其他函數是平行關系,C錯誤;當函數有返回值時,可以出現在表達式中,D錯誤
2、在C語言中,以下正確的說法是( )
A: 實參和與其對應的形參各占用獨立的存儲單元
B: 實參和與其對應的形參共占用一個存儲單元
C: 只有當實參和與其對應的形參同名時才共占用存儲單元
D: 形參是虛擬的,不占用存儲單元
答案解析:
正確答案:A
在調用函數的時候,真實傳遞給函數的是實參,函數定義部分函數名后的參數是形參。形參和實參的名字是可以相同的,在函數調用的時候,形參是實參的一份臨時拷貝,分別占用不同的內存空間,所以A正確,B錯誤,及時形參和實參的名字相同,也是占用不同的內存空間,所以B錯誤;函數如果不被調用時,函數的形參是形式上存在的,但是函數在被調用的時候,形參是要分配內存空間的,所以D錯誤。
3、在上下文及頭文件均正常的情況下,下列代碼的輸出是( )(注: print 已經聲明過)
A: suiene B: neius C: run-time error D: suieneG
int main()
{char str[] = "Geneius";print(str);return 0;
}
print(char* s)
{if (*s){print(++s);printf("%c", *s);}
}
答案解析:
正確答案:A代碼實現了遞歸倒序打印字符串的功能,但是++s使得s的值發生了變化,回不到'G'的位置上,故而沒有打印'G
4、對于函數 void f(int x); ,下面調用正確的是( )
A: int y=f(9); B: f(9); C: f(f(9)); D: x=f();
答案解析:
正確答案:B
函數f是沒有返回值的,不能給int類型變量賦值,故A錯誤,同時需要一個整型參數,C中f(9)不能作為f的參數,也是錯的,D 選項沒有傳參,也不能接收返回值也是錯誤的。
5、給定 fun 函數如下,那么 fun(10) 的輸出結果是( )
A: 0 B: 10 C: 55 D: 3628800
int fun(int x)
{return (x==1) ? 1 : (x + fun(x-1));
}
答案解析:
正確答案:C
代碼是一個遞歸函數,計算x+(x-1)+(x-2)+...+2+1即等差數列的和
編程題:
1.圖片整理
題目鏈接:圖片整理_牛客題霸_牛客網
題目描述:
題目示例:
代碼演示:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>int cmp(const void*p1,const void*p2)
{return *(char*)p1-*(char*)p2;
}
int main() {char s[1001];scanf("%s",s);qsort(s,strlen(s),sizeof(char),cmp);printf("%s",s);return 0;
}
題目解析:
- 這道題考察的其實就是字符排序,每個 ascii 字符在內存都有一個對應的 ascii 值,通過內存中數據的存儲進行排序就行,這里直接用的qsort。
2.尋找數組的中心下標
題目鏈接:724. 尋找數組的中心下標 - 力扣(LeetCode)
題目描述:
題目示例:
代碼演示:
int pivotIndex(int* nums, int numsSize) {int total = 0;for (int i = 0; i < numsSize; ++i) {total += nums[i];}int sum = 0;for (int i = 0; i < numsSize; ++i) {if (2 * sum + nums[i] == total) {return i;}sum += nums[i];}return -1;
}
題目解析:
- 先算數組總和?
total
,再遍歷數組,用?sum
?累加左側元素,當?2 * sum + nums[i] == total
?時,i
?就是中心下標,否則返回?-1
?,通過一次遍歷找中心下標,時間復雜度?O(n)?,空間復雜度?O(1)?
往期回顧:
【C語言強化訓練16天】--從基礎到進階的蛻變之旅:Day4
【C語言強化訓練16天】--從基礎到進階的蛻變之旅:Day5
【C語言強化訓練16天】--從基礎到進階的蛻變之旅:Day6
結語:本篇博客就到此結束了,C 語言的精髓在于對細節的掌控和對底層的理解,這需要持續實踐。愿你帶著這份訓練中獲得的思維與習慣,在編程路上走得更穩、更遠。如果文章對你有幫助的話,歡迎評論,點贊,收藏加關注,感謝大家的支持。