寒假作業Day 03

寒假作業Day 03

一、選擇題

在這里插入圖片描述

在C語言中,字符型指針char *p;通常用于指向字符數組(即字符串)的首字符。對于給定的選項,我們來分析每一個選項是否可以將字符串正確地賦值給p:

A: p=getchar();
getchar()函數從標準輸入讀取一個字符,并返回該字符的ASCII值。由于getchar()返回的是一個int類型的值(它可能是EOF,即文件結束標記,這是一個負值),所以直接將這個返回值賦給char *類型的p是不正確的。此外,即使忽略類型不匹配的問題,getchar()也僅僅讀取一個字符,而不是整個字符串。

B: scanf(“%s”,p);
這個語句試圖從標準輸入讀取一個字符串并存儲在p指向的位置。然而,這個語句有潛在的風險。因為p沒有被初始化指向一個有效的內存區域(即一個足夠大的字符數組),scanf可能會寫入一個隨機的內存位置,這可能會導致程序崩潰或未定義的行為。

C: char s[]=“china”; p=s;
這個語句是正確的。它首先定義了一個字符數組s并初始化為字符串"china"。然后,它將p指向s的首字符,即s[0](即’c’)。這樣,p就指向了一個有效的字符串。

D: *p=“china”;
這個語句是錯誤的。首先,*p表示p指向的字符,它是一個char類型的變量。然而,字符串"china"是一個字符數組,不是一個單個的字符。此外,你不能直接將一個字符串字面量賦給一個char類型的變量。

綜上所述,選項A、B和D都不能正確地將字符串賦值給字符型指針p。因此,正確答案是A、B和D。

在這里插入圖片描述

接下來,我們逐步分析:

static char *s[] = {“black”, “white”, “pink”, “violet”};
這里定義了一個靜態的字符串數組s,包含四個字符串元素。

char **ptr[] = {s+3, s+2, s+1, s}, ***p;
這里定義了一個名為ptr的指針數組,每個元素都是一個指向字符指針的指針。s+3、s+2、s+1和s分別指向s數組中的第四個、第三個、第二個和第一個字符串的起始地址。
所以,ptr數組的內容如下:

* ptr[0] 指向 "violet"  
* ptr[1] 指向 "pink"  
* ptr[2] 指向 "white"  
* ptr[3] 指向 "black"
  1. p = ptr;
    這里定義了一個名為p的指針,它指向一個指針的指針。然后將p指向ptr。
  2. ++p;
    將p的值增加1,由于p是一個指向指針的指針的指針,所以p現在指向ptr數組的下一個元素,即ptr[1],它指向"pink"。
  3. printf(“%s”, **p+1);

這里有兩個*,所以**p首先解引用p,得到ptr[1],然后再次解引用得到"pink"。接著,**p+1將指針向前移動一個字符,指向’i’。因此,輸出的是從’i’開始的字符串,即"ink"。
總結:該程序的輸出是"ink"。

在這里插入圖片描述
在這里插入圖片描述

首先分析語句,char s[3][10]是一個3行10列的二維字符數組,char (*k)[3]是一個包含3個元素的字符指針數組,char *p是一個字符指針;
分析選項:1、p = s;:這是錯誤的。s是一個二維數組,其名字s在大多數上下文中會被解釋為指向其首行(即s[0])的指針,該指針的類型是char ( *)[10](指向包含10個字符的數組的指針)。但p是一個char *,即指向單個字符的指針。類型不匹配,所以這是錯誤的。
2、p = k;:這也是錯誤的。k是一個指向包含3個字符的數組的指針,即char ( *)[3]。但p是一個指向單個字符的指針,即char * 。類型不匹配。
3、p = s[0];:這是正確的。s[0]是s的第一行,它是一個包含10個字符的一維數組。在大多數上下文中,數組名s[0]會被解釋為指向其首元素的指針,即指向s[0][0]的指針。這個指針的類型是char *,與p的類型相同。
4、k = s;:這也是錯誤的,盡管可能看起來是正確的。s的名字在大多數上下文中會被解釋為指向其首行(即s[0])的指針,其類型是char ( * )[10](指向包含10個字符的數組的指針)。但k的類型是char ( *)[3],即指向包含3個字符的數組的指針。盡管s的首行確實有3個字符的空間(實際上是10個),但k和s的指針類型并不匹配,因此這是錯誤的。

故選擇答案A,只有選項3是正確的

4、假設 sizeof(void * ) 為4, sizeof(char) 為1,那么對于 char str[sizeof(“ab”)]; , sizeof(str) 的值是( )
A: 2 B: 3 C: 4 D: 代碼無法編譯

sizeof(“ab”)的值為3,其中有a,b和\0;char str[3],即str是有3個元素的字符數組,故sizeof(str)的值為3*1=3,選B

5、有如下程序段,則對函數 fun 的調用語句正確的是【多選】( )

char fun(char *);
int main()
{char *s = "one", a[5] = {0}, (*f1)(char *) = fun, ch;return 0;
}

A: * f1(&a); B: f1( * s); C: f1(&ch); D: ch = * f1(s);要改成( * f1)(s)才正確

首先,我們分析給定的程序段:
定義了一個函數fun,它接受一個字符指針作為參數,并返回一個字符。
在main函數中:
定義了一個字符指針s,指向字符串"one"。
定義了一個字符數組a,大小為5,并全部初始化為0。
定義了一個函數指針f1,它指向函數fun。這意味著f1可以用來調用fun函數。
定義了一個字符變量ch。
接下來,我們分析每個選項:

A: *f1(&a);

這是錯誤的。因為&a得到的是指向數組a的指針,但它的類型是char (*)[5],而不是char *。此外,*f1的解引用方式也是不正確的,應該是(*f1)(…)。

B: f1(*s);
這是錯誤的。*s得到的是s指向的字符串的第一個字符,即’o’。但fun函數期望一個字符指針作為參數,而不是一個字符。此外,調用函數指針的正確方式是(*f1)(…)。

C: f1(&ch);
這是錯誤的。雖然&ch得到的是一個字符指針,但是調用函數指針的正確方式是(*f1)(…)。

D: ch = *f1(s); 要改成 ( f1)(s) 才正確。
原始表達式
f1(s)是錯誤的,因為它試圖先調用函數然后解引用返回的結果,但函數的返回類型不是指針。正確的調用方式是(*f1)(s),并且由于fun的返回類型是char,所以可以將返回值賦給ch,即ch = (*f1)(s);

二、編程題

在這里插入圖片描述

方法1:qsort排序之后使用strcmp比較兩個字符串

int cmp(const void* _a,const void * _b){char a=*(char*)_a,b=*(char*)_b;return a-b;
}bool CheckPermutation(char* s1, char* s2){if(strlen(s1)!=strlen(s2))return false;qsort(s1,strlen(s1),sizeof(char),cmp);qsort(s2,strlen(s2),sizeof(char),cmp);return strcmp(s1,s2)==0;
}

在這里插入圖片描述

方法二:哈希表
如果兩個字符串中的字符重新排列后相等,其實也就說明其中的字符種類和其數量是一致的,所以我們可以用一個頻次數組來記錄,在s1數組中碰到字符就增加其頻數,而在s2中則是減少頻數,如果其中一個頻數小于0,就說明兩者不相等

bool CheckPermutation(char* s1, char* s2){if(strlen(s1)!=strlen(s2))return false;int table[128]={0};for(int i=0;i<strlen(s1);i++){table[s1[i]]++;//對應下標頻數增加}for(int i=0;i<strlen(s2);i++){table[s2[i]]--;//對應下標頻數減少if(table[s2[i]]<0)return false;}return true;
}

在這里插入圖片描述

哈希表
我們舉出幾個回文數的例子,比如abccba,abcccba,a和不是回文數的例子,比如ab,abc,abcd,abcddeba…我們會發現,如果是回文數,頂多有一個數出現的次數為奇數;而如果不是,則一定會出現兩個及以上的數出現的次數為奇數,通過這個,我們可以用哈希表記錄頻數,并記錄奇數次的個數

bool canPermutePalindrome(char* s){int table[128]={0};int count=0;for(int i=0;i<strlen(s);i++){table[s[i]]++;}for(int i=0;i<128;i++){if(table[i]%2==1){count++;}if(count>=2){return false;}}return true;
}

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

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

相關文章

K8S—Pod控制器

目錄 1.什么是POD控制器 2.POD控制器有幾種類型 3.POD與控制器之間的關系 4.示例 4.1 Deployment 4.2 SatefulSet ①為什么要有headless&#xff1f; ②為什么要有volumeClainTemplate&#xff1f; ③服務發現&#xff1a;就是應用服務之間相互定位的過程。 ④K8S里服…

圖的簡單介紹

定義及術語 G(V,E)&#xff1a;圖G的頂點集為V&#xff0c;邊集為E。分為有向圖和無向圖兩類。 頂點的度&#xff1a;與該結點相連的邊的條數。 出度&#xff1a;頂點的出邊條數 入度&#xff1a;頂點的入邊條數 頂點的權值稱為點權&#xff0c;邊的權值稱為邊權。 存儲 1.鄰…

SpringCache【緩存接口返回值信息】【前端訪問后端,后端訪問數據庫(可以緩存這個過程,前端訪問后端,保存記錄,下次訪問直接返回之前的數據)】

SpringCache 針對不同的緩存技術需要實現不同的CacheManager&#xff1a;注解入門程序CachePut注解CacheEvict注解Cacheable注解 Spring Cache是一個框架&#xff0c;實現了基于注解的緩存功能&#xff0c;只需要簡單地加一個注解&#xff0c;就能實現緩存功能&#xff0c;大大…

Mongodb基礎(node.js版)

一、Mongodb 介紹 Mongodb 是一個文檔數據庫&#xff0c;以文檔形式存儲數據&#xff0c;格式類似于 JSON 與 Mysql 的特點及選型對照 MongodbMysql關系類型非關系型關系型存儲類型文檔存儲&#xff08;類似于寫 Word &#xff09;表格存儲 &#xff08;類似于寫 Excle&…

Java玩轉《啊哈算法》之模擬鏈表

人應該支配習慣&#xff0c;而絕不是讓習慣支配人。一個人要是不能改掉壞習慣&#xff0c;那么他就一文不值。 目錄 緣代碼地址模擬鏈表創建遍歷打印插入插入優化 完整代碼 緣 各位小伙伴們好呀&#xff01;本人最近看了下《啊哈算法》&#xff0c;寫的確實不錯。 但稍顯遺憾…

【C++】string 類 ( 上)

標準庫中的string類 注意&#xff1a; 1. string是表示字符串的字符串類 2. 該類的接口與常規容器的接口基本相同&#xff0c;再添加了一些專門用來操作string的常規操作。 比特就業課 3. string在底層實際是&#xff1a;basic_string模板類的別名&#xff0c;typedef basi…

python爬蟲之selenium知識點記錄

selenium 一、前期準備 1、概述 selenium本身是一個自動化測試工具。它可以讓python代碼調用瀏覽器。并獲取到瀏覽器中加載的各種資源。 我們可以利用selenium提供的各項功能。 幫助我們完成數據的抓取。 2、學習目標 掌握 selenium發送請求&#xff0c;加載網頁的方法 掌…

Stable-Diffusion ubuntu服務器部署,報錯解決方法(小白教程)

Stable Diffusion是一個深度學習模型&#xff0c;專注于生成高質量的圖像。它由CompVis團隊與Stability AI合作開發&#xff0c;并在2022年公開發布。這個模型使用文本提示&#xff08;text prompts&#xff09;生成詳細、逼真的圖像&#xff0c;是目前人工智能圖像生成領域的一…

逆向案例四:360k靜態和精靈數據動態AES解密,用js的方法

一、360K 網頁鏈接:https://www.36kr.com/p/2672600261670407 頁面中有靜態的需要解密的內容&#xff0c;確定html包&#xff0c;確定方法 1.1方法步驟 在下方的搜索中輸入decrypt(或者關鍵字window.initialState &#xff0c;進入js文件 在AES.decrypt處打上斷點&#xff0…

機器學習-03-機器學習算法流程

總結 本系列是機器學習課程的第02篇&#xff0c;主要介紹機器學習中專家系統的應用介紹 本門課程的目標 完成一個特定行業的算法應用全過程&#xff1a; 定義問題&#xff08;Problem Definition&#xff09; -> 數據收集(Data Collection) -> 數據分割(Dataset Spit…

[LeetBook]【學習日記】類鏈表反轉——尋找倒數第cnt個元素

來源于「Krahets」的《圖解算法數據結構》 https://leetcode.cn/leetbook/detail/illustration-of-algorithm/ 題目描述 訓練計劃 II 給定一個頭節點為 head 的鏈表用于記錄一系列核心肌群訓練項目編號&#xff0c;請查找并返回倒數第 cnt 個訓練項目編號。 示例 1&#xff1…

守護無價數據:文件備份的重要性與實用策略

一、數據安全&#xff1a;為何文件備份至關重要 在數字化時代&#xff0c;我們的生活和工作越來越離不開電子設備與其中的文件數據。這些文件可能包含重要的工作文檔、珍貴的家庭照片、個人的創意作品等&#xff0c;它們是我們回憶的載體&#xff0c;也是我們工作和創新的基石…

PDF Expert for Mac v3.9.2中文激活版下載

PDF Expert for Mac是一款易于使用的 PDF 編輯器和注釋器&#xff0c;專為 Mac 設備設計。它允許用戶輕松查看、編輯、簽名、注釋和共享 PDF。該軟件使用戶能夠向他們的 PDF 添加文本、圖像、鏈接和形狀&#xff0c;突出顯示和標記文本&#xff0c;填寫表格以及簽署數字文檔。它…

金融行業專題|期貨超融合架構轉型與場景探索合集(2023版)

更新內容&#xff1a; 更新 SmartX 超融合在期貨行業的覆蓋范圍、部署規模與應用場景。新增 CTP 主席系統實踐與評測、容器云資源池等場景實踐。更多超融合金融核心生產業務場景實踐&#xff0c;歡迎下載閱讀電子書《SmartX 金融核心生產業務場景探索文章合集》。 面對不斷變…

Golang中的四個括號

代碼如下&#xff0c;首先第一個括號內容為wk *worker表示這個函數是一個方法&#xff0c;屬于結構體worker的方法&#xff0c;第二個括號內容為say string&#xff0c;是方法的參數&#xff0c;第三個括號內容err error是方法的返回值&#xff0c;第四個括號是work方法內部的匿…

mac iNode 斷開后沒網 經測試 后臺還在運行

界面斷開&#xff0c;但是連不上網&#xff1a;實際上可能是服務在后臺還在運行 解決方式&#xff1a;終端執行命令 &#xff0c;手動停止iNode服務 sudo /Library/StartupItems/iNodeAuthService/iNodeAuthService stop 停掉之后&#xff0c;有可能連不上網&#xff0c;斷開wi…

基于springboot+vue的美食推薦商城

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

網工必懂的ICMP協議

福建廈門微思網絡始于2002年&#xff0c;面向全國招生&#xff01; 主要課程&#xff1a;華為、思科、紅帽、Oracle、VMware、CISP安全系列、PMP....... 網絡工程師實用課程華為HCIA課程介紹 網絡工程師使用課程華為HCIP課程介紹 網絡工程師使用課程華為HCIE課程介紹 因特網…

更詳細的軟件測試理論基礎:流程,開發、測試模型,測試分類,測試用例及其設計方法,缺陷

文章目錄 一、測試流程二、開發模型1、 瀑布模型2、增量模型3、快速模型4、其他 三、測試模型1、V模型2、W模型 四、測試分類五、測試用例 test case六、測試用例設計方法1、等價類劃分法2、邊界值分析法3、因果圖法4、判定表法5、正交法6、場景法7、流程分析法8、錯誤推測法方…

數據分析-Pandas數據的探查面積圖

數據分析-Pandas數據的探查面積圖 數據分析和處理中&#xff0c;難免會遇到各種數據&#xff0c;那么數據呈現怎樣的規律呢&#xff1f;不管金融數據&#xff0c;風控數據&#xff0c;營銷數據等等&#xff0c;莫不如此。如何通過圖示展示數據的規律&#xff1f; 數據表&…