c語言每日一練(9)

前言:
每日一練系列,每一期都包含5道選擇題,2道編程題,博主會盡可能詳細地進行講解,令初學者也能聽的清晰。每日一練系列會持續更新,暑假時三天之內必有一更,到了開學之后,將看學業情況更新。

五道選擇題:

1、以下 scanf 函數調用選項中, 錯誤的是( )

struct T
{
char name[20];
int age;
int sex;
} a[5], *pa=a;

A、scanf("%s",a[0].name);

B、scanf("%d", &pa[0].age);

C、scanf("%d",&(pa->age));

D、scanf("%d", pa->age);

解析:首先,你要明白scanf需要什么,它需要地址,你只要給它對應數據的地址,它就會根據地址對你所給的目標進行修改

選項A,通過結構體數組訪問到結構體,再通過結構體訪問到結構體成員,但它訪問的是字符數組,而字符數組的本質就是指針,故A正確。選項B,使用結構體數組的方式訪問結構體,再通過結構體訪問結構體成員,不同于A的是它訪問的是整型變量,整型變量沒有字符數組那么特殊,因此要取地址,它也取了,故B正確。

選項C,使用->的方式取到了結構體成員,并取了地址,和B雷同,C正確。D選項,與C不同的就在于沒有取地址,因此,scanf無法正確地執行,故D錯誤。

2、關于指針下列說法正確的是【多選】( )
A、?任何指針都可以轉化為void * B、?void *可以轉化為任何指針
C、?指針的大小為8個字節? ? ? ? ? ?D、?指針雖然高效、靈活但可能不安全

解析:C錯誤,因為指針的大小是隨著平臺的變化而變化的,當指針處于32位平臺時,大小為4,為64位平臺時位8,ABD沒有問題。?

3、請指出以下程序的錯誤【多選】( )

void GetMemory(char** p, int num)
{if (NULL == p && num <= 0)//1return;*p = (char*)malloc(num);return;
}
int main()
{char* str = NULL;GetMemory(&str, 80); //2if (NULL != str){strcpy(&str, "hello"); //3printf(str); //4} return 0;
} 

A、1? ? ? B、2? ? ? C、3? ? ?D、4

?解析:代碼1錯誤,因為得同時滿足兩個條件才會直接報錯,但很顯然,我們的目的是令num>0,p!=NULL,因此一個有誤就得報錯。

在語句GetMemory(&str,100);中傳入str的地址,在語句char*str=NULL;中str初始化為空指針,但是str指針變量也有地址,所以參數char**p里面的p保存的是指針變量str的地址,所以調用GetMemory函數之后,動態開辟的空間的地址存放在了str中,在函數返回之后沒有釋放內存,但是這不會導致程序錯誤,只會導致內存泄漏。故代碼2無誤。

代碼3錯誤,&str相當于是對地址的地址進行操作了,沒操作到該操作的。代碼4是正確的,相當于printf("hello");綜上所述,選AC

4、下面這個程序執行后會有什么錯誤或者效果【多選】( )

#define MAX 255
int main()
{
unsigned char A[MAX], i;
for(i = 0; i <= MAX; i++)
A[i] = i;
return 0;
}

A、?數組越界 B、?死循環 C、?棧溢出 D、?內存泄露

解析:選項A,觀察代碼可以看出創建的數組大小為255,因此,數組下標最大為244,i<=MAX的條件一定會令i達到255,會越界。選項B,每次循環i++,MAX的值是定值,好像不會造成死循環,但i是unsigned char型的,因此,i最大為255,當要超出255時就會像一個圓繞回到0,所以會導致死循環。

C選項,創建的臨時變量,在棧中,應該會由系統自動釋放,所以是不存在內存泄漏的問題。棧溢出:屬于緩沖區溢出的一種。棧溢出是由于C語言系列沒有內置檢查機制來確保復制到緩沖區的數據不得大于緩沖區的大小,因此當這個數據足夠大的時候,將會溢出緩沖區的范圍,D選項,無稽之談,我都沒有申請空間,所以根本不會有內存泄漏。綜上所述,答案為AB

5、請問下列程序的輸出是多少( )

#include<stdio.h>
int main()
{unsigned char i = 7;int j = 0;for (; i > 0; i -= 3){++j;}printf("%d\n", j);return 0;
}

A、2? ? ?B、死循環? ? C、173? ? D、172

解析:unsigned char 型的范圍為0~255,為負數的時候也會像圓一樣繞回來,反著繞。觀察代碼,i被初始化為7,每次進行循環i-3,i>0循環繼續,每次循環j++,最后打印出j,目標計算循環次數。i=7,循環到i=-2時,由于unsigned char的特殊性會令i=254,254/3=84余2,即i=2,再使i=-1,由于特殊性,i=255,255/3=85,i=0,循環結束。綜上所述,循環次數為3+84+1+85=173,故選C

編程題1:

力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺

?思路:猜中次數很好計算,一次循環就可以計算出來,難的是偽猜中的次數。首先,猜中不能被算作偽猜中,那么一旦猜中,那兩個被猜中的槽就可以看作配對成功,不用再考慮,可以把它們置為-1。在后期的判定中,一遇到-1便continue切換槽位即可,而一旦偽猜中成功,那兩個槽也相當于廢掉了,不能在同一個槽偽猜中多次,這是一個隱藏規則,所以把這兩個槽也置為-1

#include<stdio.h>
#include<stdlib.h>
int* masterMind(char* solution, char* guess, int* returnSize) {*returnSize = 2;//初始化返回的數組,因為我們僅僅只需要返回猜中次數和偽猜中次數,所以必定為2int* order = (int*)malloc(sizeof(int) * 2);//創建返回數組int i = 0; int j = 0;int count_true = 0;//猜中次數計數int count_false = 0;//偽猜中次數計數for (i = 0; i < 4; i++)//一共四個槽,所以solution和guess的數組大小都為4{if (solution[i] == guess[i]){count_true++;solution[i] = -1;guess[i] = -1;//由于猜中的槽,偽猜中的不能重復,所以置為-1,用來判定}}for (i = 0; i < 4; i++){if (solution[i] == -1){continue;}for (j = 0; j < 4; j++){if (guess[j] == -1){continue;}if (solution[i] == guess[j]){count_false++;solution[i] = -1;guess[j] = -1;}}}order[0] = count_true;//存放猜中次數order[1] = count_false;//存放偽猜中次數return order;//返回目標}

編程題2:

?

力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺

?

思路:暴力破解,沒什么好說的,兩個循環遍歷完蛋

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {*returnSize = 2;//只用返回兩個數,所以數組大小必定為2int* order = (int*)malloc(sizeof(int) * 2);//創建一個符合條件的數組int i = 0; int j = 0;for (i = 0; i < numsSize; i++){for(j=i+1;j<numsSize;j++){   //減少循環次數if (nums[i] + nums[j] == target)//找到目標,直接儲存并返回{order[0] = i;order[1] = j;return order;}}}return NULL;//找不到返回空
}

??好了,今天的練習到這里就結束了,感謝各位友友的來訪,祝各位友友前程似錦O(∩_∩)O

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

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

相關文章

rollup工具打包報錯問題匯總

1. (!) this has been rewritten to undefined 原因&#xff1a;這是因為打包后沒有給this指向window&#xff0c;導致this undefined&#xff0c;因此需要配置context參數來指定代碼執行環境的參數為window 解決&#xff1a;rollup.config.js文件中添加配置 module.exports…

算法通關村第十關 | 數組中第k個最大元素

1.數組中第k大的數字 題目&#xff1a; LeetCode&#xff1a;數組中的第k個最大元素&#xff0c;給定整數數組nums和整數k&#xff0c;請返回數組中第k個最大的元素&#xff0c;請注意&#xff0c;你需要找的是數組排序后第k個最大的元素&#xff0c;而不是第k個不同的元素。 運…

JVM——配置常用參數,GC調優策略

文章目錄 JVM 配置常用參數Java內存區域常見配置參數概覽堆參數回收器參數項目中常用配置常用組合 常用 GC 調優策略GC 調優原則GC 調優目的GC 調優策略 JVM 配置常用參數 Java內存區域常見配置參數概覽堆參數&#xff1b;回收器參數&#xff1b;項目中常用配置&#xff1b;常…

element-Plus中el-menu菜單無法正常收縮解決方案

<el-menu :collapse"true">如圖所示收縮之后&#xff0c;有子級的菜單還有箭頭文字顯示 從代碼對比看層級就不太對了&#xff0c;嵌套錯誤了&#xff0c;正常下方官網的ul標簽下直接是li&#xff0c;在自己的代碼中&#xff0c;ul標簽下是div標簽&#xff0c;層…

FairyGUI編輯器自定義菜單擴展插件

本文涉及到的軟件有&#xff1a;FairyGUI&#xff0c;VSCode 代碼環境涉及到了&#xff1a;Lua VSCode插件&#xff1a;EmmyLua 在編寫FairyGUI編輯器菜單前&#xff0c;了解一下FairyGUIEditor的API會有效的幫助我們解決很多問題。FairyGUI的擴展是通過編輯器自帶的插件功能…

【嵌入式】MKV31F512VLL12 微控制器 (MCU) 、Cyclone? IV E EP4CE10E22I8LN,FPGA-現場可編程門陣列芯片

1、MKV31F512VLL12 微控制器 (MCU) 是適用于BLDC、PMSM和ACIM電機控制應用的高性能解決方案。這些MCU采用運行頻率為100MHz/120MHz、帶數字信號處理 (DSP) 和浮點單元 (FPU) 的ARM Cortex-M4內核。KV3x MCU配備兩個采樣率高達1.2MS/s的16位ADC、多個控制定時器以及512KB閃存。 …

Codeforces Round 893 (Div. 2) D.Trees and Segments

原題鏈接&#xff1a;Problem - D - Codeforces 題面&#xff1a; 大概意思就是讓你在翻轉01串不超過k次的情況下&#xff0c;使得a*&#xff08;0的最大連續長度&#xff09;&#xff08;1的最大連續長度&#xff09;最大&#xff08;1<a<n&#xff09;。輸出n個數&…

模糊測試面面觀 | 模糊測試工具知多少

自1988年威斯康星大學的Barton Miller首次提出模糊測試這一概念以來&#xff0c;模糊測試領域經歷了持續長久發展。模糊測試作為一種軟件測試方法&#xff0c;旨在通過向程序輸入模糊、隨機、異常的數據&#xff0c;探測和發現潛在的漏洞和錯誤。這種方法備受安全研究人員的青睞…

助推打造全球研發中心城市 | 李彥團隊:研發,帶來了二次文藝復興

2017年&#xff0c;長沙經聯合國教科文組織評選&#xff0c;成為中國首座獲評世界“媒體藝術之都”稱號的城市。6年后&#xff0c;基于時代發展的新要求&#xff0c;長沙再次提出了“打造全球研發中心城市”的目標&#xff0c;并朝著新的方向邁進。 舊有的優勢產業在新的研發浪…

信安通用基礎知識

文章目錄 密碼學經典誤區PGP優良保密協議信安經典其它安全手段XSS與CSRF cross site request forgeryCSRF的利用邏輯CSRF示例CSRF防范檢查Referer字段添加校驗token XSS cross site scripting common weakness enumeration常見密碼api誤用&#xff08;摘自畢設參考文獻&#xf…

“深入探究JVM內部機制:如何實現Java程序的運行環境?“

標題&#xff1a;深入探究JVM內部機制&#xff1a;如何實現Java程序的運行環境&#xff1f; 摘要&#xff1a;本文將深入探究Java虛擬機&#xff08;JVM&#xff09;的內部機制&#xff0c;重點討論JVM如何實現Java程序的運行環境。我們將從JVM的結構、類加載、內存管理、垃圾…

01 Python 網絡爬蟲:爬蟲技術的核心原理

不夸張地說&#xff0c;現在哪怕是初中生&#xff0c;只要花點兒時間、精力稍微按「網絡爬蟲」的開發步驟學習了解一下&#xff0c;也能把它玩得賊溜。 聽起來感覺是很高大上的東西&#xff0c;但實際上并不復雜&#xff0c;也就是使用了某種編程語言按照一定步驟、規則主動通…

用Java實現原神抽卡算法

哈嘍~大家好&#xff0c;好久沒有更新了&#xff0c;也確實遇到了很多事&#xff0c;這篇開始恢復更新&#xff0c;喜歡的話&#xff0c;可以給個的三連&#xff0c;什么&#xff1f;你要白嫖&#xff1f;那可以給個免費的贊麻。 &#x1f947;個人主頁&#xff1a;個人主頁??…

七月 NFT 行業解讀:游戲和音樂 NFT 引領增長,Opepen 掀起熱潮

作者&#xff1a;lesleyfootprint.network 2023 年 7 月&#xff0c;NFT 市場的波動性持續存在&#xff0c;交易量呈下降趨勢。然而&#xff0c;游戲和音樂 NFT 等領域的增長引人注目。參與這些細分領域的獨立用戶數量不斷增加&#xff0c;反映了這些領域的復蘇。 本綜合報告…

lvs負載均衡群集

lvs組成 1、lvs基于內核態的netfilter框架實現的IPVS功能&#xff0c;工作在內核態用戶配置VIP等相關信息并且傳遞到IPVS 就需要用到IPVSadm工具。 2、ipvsadm&#xff1a;IPVSadm是lvs用戶態的配套的工具&#xff0c;可以實現VIP和RS 增刪改查。 IPVSadm就是類似于iptables…

侯捷 八部曲 C++面向對象高級開發(上)+(下)【C++學習筆記】 超詳細 萬字筆記總結 筆記合集

文章目錄 Ⅰ C part1 面向對象編程1 頭文件與類的聲明1.1 c vs cpp關于數據和函數1.2 頭文件與類1.2.1 頭文件1.2.2 class的聲明1.2.3 模板初識 2 構造函數2.1 inline 函數2.2 訪問級別2.3 ctor 構造函數2.3.1 ctor 的寫法2.3.2 ctor/函數 重載2.3.3 ctor 放在 private 區 2.4 …

記vite打包vue項目內存溢出問題解決

出現問題 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory解決方法一&#xff1a; 1.根據網上的資料是通過全局下載npm包increase-memory-limit&#xff1a; npm install -g increase-memory-limit2.在項目目錄執…

學習Vue:路由參數與查詢參數傳遞

在Vue.js中&#xff0c;路由與導航不僅涉及到頁面之間的切換&#xff0c;還包括了向頁面傳遞參數以及獲取查詢參數的功能。本文將詳細介紹如何在Vue Router中傳遞路由參數和查詢參數&#xff0c;幫助您更好地理解和使用這些功能。 路由參數的傳遞 路由參數是指在URL中的動態片…

K8s內部的網路模式實現理解

overlay 網絡模式 在 Kubernetes 中&#xff0c;overlay 網絡模式被用于實現容器之間的網絡通信。 K8s 使用了一種稱為容器網絡接口&#xff08;Container Network Interface&#xff0c;簡稱CNI&#xff09;的規范&#xff0c;該規范定義了容器如何進行網絡連接。實際上&…

SDP 與Rtcp-fb

1、sdp介紹 SDP&#xff08;Session Description Protocol&#xff09;是一種用于描述多媒體會話的協議&#xff0c;它在會話層起著重要的作用。SDP的主要功能是提供會話的元數據和配置信息&#xff0c;以便參與者能夠協商和建立一致的會話。 以下是SDP在會話層的作用&#x…