C語言簡單測試總結

前言

在學C++語言之前回顧一下C中的一些知識.選用的是中國大學MOOC中C++程序設計(面向對象進階)中的C語言水平評估測試題.

題目

?The keyword "unsigned" can modify the keyword [? B? ]

  • A.signed

  • B.long

  • C.long double

  • D.float
    題解:unsigned是無符號的意識,通常在整數前面加

?In the following strings, the correct C identifier is [ C? ]

  • A.break

  • B.2d

  • C._256

  • D.foo-1
    題解:不能是關鍵字,連接符,數字(不能寫第一個)

?The string "r\tu\r\"Okay?\"\n"? will occupy [? D ] bytes memory.

  • A.15

  • B.18

  • C.12

  • D.13
    題解:轉義符算一個字節,一個字母算一個字節,/和?也算一個字節.

?In C programming language, the result of statement?5 ^ 4??is [ D? ]

  • A.4

  • B.3

  • C.2

  • D.1
    題解:" ^ "這個是異或的意思.

?

For the statement: int* a[10],*b; the correct description is[? A? ]

  • A.a can only be rvalue, but b can be lvalue

  • B.both a and b can only be rvalue

  • C.a can only be lvalue, but b can be rvalue

  • D.both a and b can only be lvalue
    題解:這個涉及到指針數組,這個int* a[10]就是指數組中的每個元素都是一個指針(int
    *類型),即使a是一個指針數組,但是它仍是一個數組,所以a是代指整個數組的起始地址,這個地址是常量.

If compiled with a STANDARD C COMPILER (e.g. gcc), which is correct about the following function "add"? [? A? ]
?double?add(int?*,?int?*,?int?k)?
{ ??return?(double)?(8+k); }
int?main()?{ ??
int?x=1,?y=2,z=3; ??
add(&x,?&y,?z); ??
return?0; }
?

  • A.Compile error. After filling in the name of the formal parameters, the program can be compiled without errors;

  • B.Compile success.

  • C.Compile error. After changing " return (double) (8+k);" to "return 8+k", the program can be compiled without errors;

  • D.Compile error. After changing "int? k" to "double? k", the program can be compiled without errors;
    題解:個人認為編譯器版本會影響這道題,就以菜鳥教程的編譯器為例要將形參寫的具體.

The correct one about pointers is: [? ? D ]?
We assume that all codes are compiled on 32-bit platform

  • A.double *p;??where p occupies 8 byte memory;

  • B.struct S{ char* m;} n;?where n occupies 1 byte memory;

  • C.char *p;??where p occupies 1 byte memory;

  • D.struct T{ double d; } *p;??where p occupies 4 bytes memory;
    題解:指針的占內存空間4bytes

Given the following program, when do-while loop finishes,the value of x is[? ?B? ]?enum?{?APPLE,?LEMON=6,?ORANGE,?BANANA=2,?GRAPE};
void?f?(?)?{ ????
int?x=GRAPE; ????
do?{ ?????????
x++; ????}?
while?((x-APPLE)<=ORANGE); }

  • A.6?

  • B.8

  • C.ORANGE? ? ? ? ?

  • D.BANANA?
    題解:這個題可去看我之前寫的非阻塞式按鍵-單雙擊長按的實現-CSDN博客里面有對enum一些解釋,這里APPLE默認是0,ORANGE是在LEMON上加一,類似GRAPE同理.

Which of the following statements are completely correct? [? B? ?]

  • A.int *p; scanf("%d", &p);

  • B.int k, *p=&k;? scanf("%d", p);

  • C.int k, *p;? *p= &k;? ?scanf("%d", p);

  • D.int *p; scanf("%d", p);
    題解:這里主要考察野指針.野指針就是指沒有初始化指針.它所指向的內存地址可以是任何地址,可能指向的是只讀,或者從操作系統的保留地址.舉例
    int k, *p;
    *p = &k;
    scanf("%d", p);
    分析:p是一個未初始化的指針,它的值是隨機的,指向位置是未知的.
    *p = &k;的意思是將k的存儲地址給p指向的位置.
    你無法確定這個內存位置是安全的.

Which statement satisfies the condition: If string s1 equals to strings s2, then execute ST.? [? ?D? ]

  • A.if(strcpy(sl, s2)==1) ST;

  • B.if(sl==s2) ST;

  • C.if(sl-s2==0) ST;

  • D.if(strcmp(s2,s1)==0) ST;
    題解:strcpy(sl, s2)是指把s2的內容復制到s1,用的是s1的地址,不是數值1.
    s1和s2比較的是字符串的地址值,不是內容,上面的數組一個這個s1和s2屬于衰減,代表數組的起始地址.
    s1-s2同樣的算的是地址差值.
    strcmp(s1,s2)用于比較s1和s2的內容.

?Given the following program[ D ]
?#include??<stdio.h>
int?fun(?)
{ ??static?int?x=1; ??x+=1; ??return?x; }
int?main(?){ ??int?i,?s=1; ??for(i=1;?i<=5;i++) ????
s+=fun(?); ??
printf("%d\n",?s); ??
return?0 }

  • A.11

  • B.120

  • C.6

  • D.21
    題解:

#include ?<stdio.h>int fun( ){static int x=1;x+=1;return x;
}
int main( ){int i, s=1;for(i=1; i<=5;i++){int a =fun( );s+=a;printf("fun=%d\n",a);printf("s=%d\n",s);}}

運行結果:fun=2 s=3 fun=3 s=6 fun=4 s=10 fun=5 s=15 fun=6 s=21

總結

這些題還是比較不錯和全面的,有些題還可以深入研究,比如數組指針,指針數組(不好記的話可以在中間加上"的",指針的數組,數組的指針.就很好的明白.)(數組指針聲明:int (*p)[5]; ?// p 是指向 int 類型數組的指針;指針的數組聲明int *arr[5]; ?// arr 是一個包含 5 個 int 指針的數組這兩個也很好記,[5]前面就是這是什么數組舉例:int (*p)[5];p[5],p其實代表是數組的起始地址,現在使用是(*p)則表示指向這個數組,則叫數組的指針.指針數組也是一樣:int *arr[5];[5]前面跟的是arr再前面表示類型所以這表示一個數組里面存儲的指針,叫指針的數組.為什么要從右往左讀,為了聲明的結構清晰)還有野指針,懸空指針(指向一塊已經釋放的內存就是選空指針),越界指針(指針訪問超出數組分配的內存范圍).

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64299.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

frp(s) 內網穿透 Liunx環境雙端Docker部署

FRP(Fast Reverse Proxy)是一款高性能的反向代理應用,主要用于內網穿透、負載均衡和反向代理等多種場景。它能夠將內網中的服務暴露給公網,實現遠程訪問。此外,FRP還可以用于接收類似GitHub或第三方提供的Webhook請求。在微服務架構中,FRP可以作為服務調用的反向代理,提…

代碼隨想錄算法訓練營第三十五天|01背包問題 二維和一維(卡碼網第46題)、416分割等和子集

day35 動態規劃part03 1. 01背包問題 二維 卡碼網第46題 01 背包&#xff1a;有n件物品和一個最多能背重量為w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的價值是value[i] 。每件物品只能用一次&#xff0c;求解將哪些物品裝入背包里物品價值總和最大。 動規五部…

【Unity3D】ECS入門學習(九)SystemBase

SystemBase&#xff1a;支持主線程或多線程執行篩選實體任務。 主要介紹是內部成員&#xff1a;Entities的各種篩選方法&#xff0c;其內部成員還有EntityManager ForEach方法篩選&#xff0c;傳遞一個有參委托函數進去&#xff0c;參數ref xxx組件類&#xff08;可填多個&…

[Android]init中添加新的command

在Android的init進程中&#xff0c;command是用于定義啟動時要執行的具體命令行指令的關鍵部分。init進程是Android系統啟動的第一個進程&#xff0c;它負責初始化系統的各個組件&#xff0c;并啟動必要的服務。command可以在init.rc文件及其包含的其他.rc文件中找到&#xff0…

STM32F103RCT6學習之五:ADC

1.ADC基礎 ADC&#xff08;Analog-Digital Converter&#xff09;模擬-數字轉換器ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁12位逐次逼近型ADC&#xff0c;1us轉換時間 輸入電壓范圍&#xff1a;0~3.3V&#xff…

strncpy函數和使用案例

strncpy 是 C 語言標準庫函數之一&#xff0c;用于字符串操作。它的功能是將源字符串&#xff08;source&#xff09;中的字符復制到目標字符串&#xff08;destination&#xff09;中&#xff0c;但最多復制 n 個字符。如果源字符串的長度小于 n&#xff0c;則目標字符串剩余的…

實現類似gpt 打字效果

1. css的動畫&#xff08;animation) css中實現動畫有兩種方式&#xff1a;transition過渡動畫、 animation自定義動畫。 具體的可以看MDN鏈接&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定義關鍵幀動畫并未其命名使用自定義動…

微軟遠程桌面APP怎么用

微軟遠程桌面&#xff08;Remote Desktop&#xff09;客戶端&#xff08;RD Client&#xff09;是一款由微軟開發的應用程序&#xff0c;允許用戶通過網絡連接遠程訪問和控制另一臺計算機。同時&#xff0c;微軟遠程桌面RD Client支持多種設備和操作系統&#xff0c;包括Window…

【每日學點鴻蒙知識】grid里面的item支持拖動問題、WebView回調問題、獲取頁面名稱、彈幕效果實現、修改App輸出路徑 |

1、HarmonyOS grid里面的item支持拖動問題&#xff1f; 想要grid里面的item支持拖動,拖出來后可以刪除,下面的代碼就是你們上次給我提供的,正常情況下是可以使用的但是,往下拖的過程中遇到了TextInput后,gridItem的onDragMove就不會走了,我給TextInput設置了draggable(false)后…

SDK 指南

在前端開發中&#xff0c;SDK&#xff08;Software Development Kit&#xff0c;軟件開發工具包&#xff09;是一個用于幫助開發者在特定平臺、框架或技術棧中實現某些功能的工具集。 1. SDK 是什么&#xff1f; SDK 是一種開發工具包&#xff0c;它提供了開發人員實現某些功…

Unity3d UGUI如何優雅的實現Web框架(Vue/Rect)類似數據綁定功能(含源碼)

前言 Unity3d的UGUI系統與Web前端開發中常見的數據綁定和屬性綁定機制有所不同。UGUI是一個相對簡單和基礎的UI系統&#xff0c;并不內置像Web前端&#xff08;例如 Vue.js或React中&#xff09;那樣的雙向數據綁定或自動更新UI的機制。UGUI是一種比較傳統的 UI 系統&#xff…

OptimisticLock

想象你和你的朋友去了一家很受歡迎的餐廳。你們想要點一份特別的菜品——這家餐廳的招牌菜&#xff0c;但因為這道菜非常受歡迎&#xff0c;所以它的狀態可能會隨時變化&#xff08;比如售罄或重新上架&#xff09;。 傳統方式&#xff08;悲觀鎖&#xff09; 通常情況下&…

10分鐘掌握項目管理核心工具:WBS、甘特圖、關鍵路徑法全解析

一、引言 在項目管理的廣闊天地里&#xff0c;猶如一場精心編排的交響樂演奏&#xff0c;每個樂器、每個音符都需精準配合才能奏響美妙樂章。而 WBS&#xff08;工作分解結構&#xff09;、甘特圖、關鍵路徑法無疑是這場交響樂中的關鍵樂章&#xff0c;它們從不同維度為項目管…

TCP 和 UDP 的區別:解析網絡傳輸協議

引言 在計算機網絡的世界中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;和 UDP&#xff08;User Datagram Protocol&#xff0c;用戶數據報協議&#xff09;是兩種極為重要且應用廣泛的傳輸層協議。它們在功能、特性以及適…

代碼思想之快慢路徑

處理業務代碼的過程中&#xff0c;對業務代碼有了一些調整&#xff0c;后續發現這是一種代碼思想 在一段復雜的邏輯里&#xff0c;我把查詢redis操作寫在了前面&#xff0c; 業務邏輯&#xff1a; 如果需要不打壓就退出本次處理 查詢redis拿到商品需要打壓的次數 如果次數 …

Java 溯本求源之基礎(三十一)——泛型

目錄 1. 泛型的定義與基本概念 2. 泛型的優勢 3. 泛型的基本語法 3.1 泛型類 3.2 泛型方法 3.3 泛型接口 4. 泛型的邊界 4.1 上限通配符&#xff08;? extends T&#xff09; 4.2 下限通配符&#xff08;? super T&#xff09; 5. 泛型的類型擦除 6. 泛型的使用場景…

純 HTML+CSS+JS 實現一個炫酷的圣誕樹動畫特效

純 HTMLCSSJS 實現一個炫酷的圣誕樹動畫特效 前言 圣誕節快到了&#xff0c;今天給大家帶來一個簡單但是效果不錯的圣誕樹動畫特效。這個特效完全使用原生 HTML、CSS 和 JavaScript 實現&#xff0c;包含閃爍的星星、隨機彩燈等元素&#xff0c;非常適合節日氣氛&#xff01;…

Maven:Java項目構建與管理的利器

在Java開發領域&#xff0c;Maven無疑是一個舉足輕重的工具。它不僅簡化了項目的構建和依賴管理&#xff0c;還促進了團隊協作和持續集成。本文將深入探討Maven的核心功能、基本配置以及在實際項目中的應用。 Maven簡介 Maven是Apache基金會下的一個開源項目&#xff0c;旨在…

【ES6復習筆記】Promise對象詳解(12)

1. 什么是 Promise&#xff1f; Promise 是 JavaScript 中處理異步操作的一種機制&#xff0c;它可以讓異步操作更加容易管理和控制。Promise 對象代表一個異步操作的最終完成或失敗&#xff0c;并提供了一種方式來處理操作的結果。 2. Promise 的基本語法 Promise 對象有三…

【RAG實戰】語言模型基礎

語言模型賦予了計算機理解和生成人類語言的能力。它結合了統計學原理和深度神經網絡技術&#xff0c;通過對大量的樣本數據進行復雜的概率分布分析來學習語言結構的內在模式和相關性。具體地&#xff0c;語言模型可根據上下文中已出現的詞序列&#xff0c;使用概率推斷來預測接…