練習(含指針數組與數組指針的學習)

數組指針是一個指向數組的指針,而指針數組是一個存儲指針的數組
?數組指針?是一個指針,指向一個數組的首地址,它用于指向整個數組,而不是數組中的某個元素。例如,int (*p)表示 p 是一個指向包含 5 個整數的數組的指針。??數組指針?聲明時使用括號明確優先級,如 int (*p)[10],其中()的優先級高于[ ],因此p首先被定義為一個指針,然后指向一個大小為10的數組。
?指針數組?是一個數組,其元素都是指針,它用于存儲多個指針,每個指針可以指向不同的數據。例如,int *p 表示 p 是一個包含 5 個整型指針的數組。??指針數組?聲明時 [ ] 優先級高于 *,如 int *p[10],表示 p 首先被定義為一個數組,然后數組的元素是指針類型。
內存占有
?數組指針?:在 32 位系統中,數組指針占 4 字節,指向的數組大小由數組本身決定。
?指針數組?:數組的大小由元素數量和指針大小決定。例如,int *p 在 32 位系統中占 20 字節(5 個指針,每個 4 字節)。
使用場景?
?數組指針?:常用于傳遞數組的首地址,避免復制整個數組,適合處理二維數組的行指針。
?指針數組?:用于存儲多個指針,適合動態分配內存或管理多個對象的指針。?
操作方式?
?數組指針?:通過解引用訪問數組元素,如 *(*p + i) 訪問第 i 個元素。
?指針數組?:通過數組索引訪問指針,如 *p[i] 訪問第 i 個指針指向的值。
優先級與結合性?
?數組指針?:() 優先級高于 [ ],因此 int (*p) 明確表示 p 是指針。
?指針數組?:[ ] 優先級高于 *,因此 int *p 明確表示 p 是數組。

---------------------------------------------------------------------------------------------------------------------------------

一、

在以下的代碼中,struct student - 是一個類型,而Stu - 是這個類型所創建的變量

struct student
{int num;char name[32];float score;
}Stu;
//Stu - 是結構體變量int main()
{return 0;
}

而如果在此類型的前面加上 typedef ,就可以創建新的類型,例如以下的代碼,Stu是新的類型,可以用這個類型創建新的變量s1

typedef struct student
{int num;char name[32];float score;
}Stu;
//Stu - 是類型int main()
{Stu s1;return 0;
}

二、喝汽水

一瓶汽水1元,2個空瓶可以換一瓶汽水,給20元,可以喝多少汽水

int main()
{int money = 0;int total = 0;int empty = 0;scanf("%d",&money);//20total += money;//買empty = money;//置換while(empty >= 2){total += empty / 2;empty = empty / 2 + empty % 2;}printf("%d\n",total);return 0;
}

還有更高效的方式:

int main()
{int money = 0;int total = 0;scanf("%d",&money);//20if(money > 0)total = 2 * money - 1;printf("%d\n",total);return 0;
}

三、上三角矩陣判斷

上三角矩陣即主對角線以下的元素都為0的矩陣,主對角線為從矩陣的左上角至右下角的連線

輸入:第一行包含一個整數n,表示一個方陣包含n行n列,用空格分隔。從2到n+1行,每行輸入n個整數,用空格分隔,共輸入n*n個數。
輸出:一行,如果輸入方陣是上三角矩陣輸出"YES"并換行,否則輸出“NO"并換行。

示例:

3
1 2 3
0 4 5
0 0 6
YES2
2 3
4 5
NO
int main()
{int n = 0;scanf("%d",&n);//int arr[n][n];//C99 變長數組int arr[10][10];//輸入int i = 0;for(i = 0;i < n; i++){int j = 0;for(j = 0;j < n; j++){scanf("%d",&arr[i][j]);}}//判斷return 0;
}

接下來的部分是如何判斷:

在主對角線以下的部分,我們可以發現 i > j,主對角線上 i = j,主對角線以上的部分,i < j

那么我們就可以這樣寫:

int main()
{int n = 0;scanf("%d",&n);//int arr[n][n];//C99 變長數組int arr[10][10];//輸入int i = 0;for(i = 0;i < n; i++){int j = 0;for(j = 0;j < n; j++){scanf("%d",&arr[i][j]);}}//判斷int flag = 1;//默認是上三角矩陣for(i = 0;i < n; i++){int j = 0;for(j =0;j < i; j++){if(arr[i][j] != 0){flag = 0;goto end;}}}   
end:if(flag == 1)printf("YES\n");elseprintf("NO\n");return 0;
}

四、矩陣相等判斷

有兩個n行m列的矩陣,想知道兩個矩陣是否相等。(當兩個矩陣對應數組元素都相等時兩個矩陣相等)。

輸入:兩個n行m列的矩陣

輸出:如果兩個矩陣相等輸出"Yes"并換行,否則輸出"No“并換行。

int main()
{int n = 0;int m = 0;scanf("%d %d",&n,&m);int arr1[n][m];int arr2[n][m];//C99 變成數組//輸入數據//第一個數組int i = 0;int j = 0;for(i = 0;i < n; i++){for(j = 0;j < m; j++){scanf("%d",&arr1[i][j]);}}//第二個數組for(i = 0;i < n; i++){for(j = 0;j < m; j++){scanf("%d",&arr2[i][j]);}}//比較int flag = 1;//默認2個矩陣相等for(i = 0;i < n; i++){for(j = 0;j < m; j++){if(arr1[i][j] != arr2[i][j]){flag = 0;goto end;}}}
end:if(flag == 1)printf("YES\n");elseprintf("NO\n");return 0;
}

另一種方法:第二個數組每輸入一個就與第一個數組判斷

int main()
{int n = 0;int m = 0;scanf("%d %d",&n,&m);//int arr1[n][m];//int arr2[n][m];//C99 變成數組int arr1[100][100];int arr2[100][100];//輸入數據//第一個數組int i = 0;int j = 0;for(i = 0;i < n; i++){for(j = 0;j < m; j++){scanf("%d",&arr1[i][j]);}}//第二個數組int flag = 1;//默認2個矩陣相等for(i = 0;i < n; i++){for(j = 0;j < m; j++){scanf("%d",&arr2[i][j]);if(arr1[i][j] != arr2[i][j]){flag = 0;goto end;}}}
end:if(flag == 1)printf("YES\n");elseprintf("NO\n");return 0;
}

五、調整奇數偶數順序

輸入一個數組,實現一個函數,來調整該數組中數字的順序使得數組中所有的奇數位于偶數的前面,即位于數組的前半部分

void move(int arr[],int sz)
{int left = 0;int right = sz - 1;while(left < right){//找偶數的過程while(left < right && arr[left] % 2 ==1){left++;}//找奇數while(left < right && arr[right] % 2 == 0){right--;}if(left < right){int tmp = 0;arr[left] = arr[right];arr[right] = tmp;left++;right--;}}
}
int main()
{int arr[10] = {0};int sz = sizeof(arr) / sizeof(arr[0]);//輸入int i = 0;for(i = 0;i < sz, i++){scanf("%d",&arr[i]);}//調整move(arr,sz);//輸出for(i = 0;i < sz; i++){printf("%d ",arr[i]);}return 0;
}

六、有序序列合并

輸入兩個升序排序的序列,將兩個序列合并為一個有序序列并輸出

輸入:兩個整數n、m,表示升序序列中數據的個數

輸出:輸出長度為n+m的升序序列,即長度為n的升序序列和長度為m的升序序列中的元素重新進行升序序列排列并合并

示例:

輸入:5 61 3 7 9 222 8 10 17 33 44
輸出:1 2 3 7 8 9 10 17 22 33 44

int main()
{int n = 0;int m = 0;//輸入scanf("%d %d",&n,&m);int arr1[n];//1000int arr2[m];//1000int arr3[n+m];//2000//arr1的輸入int i = 0;for(i = 0;i < n; i++){scanf("%d",&arr1[i]);}//arr2的輸入for(i = 0;i < m; i++){scanf("%d",&arr2[i]);}i = 0;int j = 0;int k = 0;while(i < n && j < m){if(arr1[i] < arr2[j]){arr3[k] = arr1[i];i++;k++;}else  //如果是大于等于走這條代碼{arr3[k] = arr2[j];j++;k++;}}if(i == n)//數組arr1中元素比arr2少{//把arr2中剩余的元素放在arr3中while(j < m){arr3[k] = arr2[j];j++;k++;}}else  //比arr2多(j == m){//把arr1中剩余的元素放在arr3中while(i < n){arr3[k] = arr1[i];i++;k++;}}//輸出for(k = 0;k < n+m; k++){printf("%d ",arr3[k]);}return 0;
}

或者還可以這樣(投巧):

int main()
{int n = 0;int m = 0;//輸入scanf("%d %d",&n,&m);int arr1[n];//1000int arr2[m];//1000int arr3[n+m];//2000//arr1的輸入int i = 0;for(i = 0;i < n; i++){scanf("%d",&arr1[i]);}//arr2的輸入for(i = 0;i < m; i++){scanf("%d",&arr2[i]);}i = 0;int j = 0;int k = 0;while(i < n && j < m){if(arr1[i] < arr2[j]){printf("%d ",arr1[i]);i++;}else  {printf("%d ",arr2[j]);j++;}}if(i == n){//把arr2中剩余的元素放在arr3中while(j < m){printf("%d ",arr2[j]);j++;}}else  {//把arr1中剩余的元素放在arr3中while(i < n){printf("%d ",arr1[i]);i++;}}return 0;
}

七、有序序列判斷

輸入一個整數序列,判斷是否是有序序列,有序,指序列中的整數從小到大排序或者從大到小排序(相同元素也視為有序)
輸入:第一行輸入一個整數N;第二行輸入N個整數
輸出:如果是有序序列輸出sorted,否則輸出unsorted

示例1:

輸入:51 6 9 22 30
輸出:sorted

示例2:

輸入:53 4 7 2 10
輸出:unsorted

示例3:

輸入:51 1 1 1 1
輸出:sorted

int main()
{int n = 0;scanf("%d",&n);int arr[n];int i = 0;for(i = 0;i < n; i++){scanf("%d",&arr[i]);}int flag1 = 0;//標記升序int flag2 = 0;//標記降序for(i = 1;i < n; i++){if(arr[i-1] < arr[i]){flag1 = 1;}else{flag2 = 1;}}if(flag1 + flag2 == 2){printf("unsorted\n");}else{printf("sorted\n");}retrun 0;
}

或者:

int main()
{int n = 0;scanf("%d",&n);int arr[n];int i = 0;int flag1 = 0;//標記升序int flag2 = 0;//標記降序for(i = 0;i < n; i++){scanf("%d",&arr[i]);if(i > 0){if(arr[i-1] < arr[i]){flag1 = 1;}else{flag2 = 1;}}}if(flag1 + flag2 == 2){printf("unsorted\n");}else{printf("sorted\n");}retrun 0;
}

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

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

相關文章

NSS#Round30 Web

小桃的PHP挑戰 <?php include jeer.php; highlight_file(__FILE__); error_reporting(0); $A 0; $B 0; $C 0;//第一關 if (isset($_GET[one])){$str $_GET[str] ?? 0;$add substr($str, 0, 1); $add;if (strlen($add) > 1 ) {$A 1;} else {echo $one; } } else…

MCP基礎學習二:MCP服務搭建與配置

文章目錄 MCP服務搭建與配置一&#xff0c;學習目標&#xff1a;二&#xff0c;學習內容&#xff1a;1. 如何搭建MCP服務端服務端初始化與配置MCP服務架構與數據流交互圖核心實現注冊服務功能服務器啟動與API暴露 2. 本地應用與MCP服務的集成客戶端SDK實現客戶端應用實現功能演…

ZKmall開源商城服務端驗證:Jakarta Validation 詳解

ZKmall開源商城基于Spring Boot 3構建&#xff0c;其服務端數據驗證采用Jakarta Validation API?&#xff08;原JSR 380規范&#xff09;&#xff0c;通過聲明式注解與自定義擴展機制實現高效、靈活的數據校驗體系。以下從技術實現、核心能力、場景優化三個維度展開解析&#…

使用Docker創建postgres

準備工作&#xff1a; 1. 檢查網絡 檢查網絡連接&#xff1a;確保你的服務器網絡連接正常&#xff0c;可嘗試使用 ping 命令測試與 Docker Hub 服務器&#xff08;如 ping registry-1.docker.io&#xff09;的連通性。 ping registry-1.docker.io 檢查防火墻&#xff1a;確…

32 python json

在辦公室忙碌的日常里,我們經常需要和各種數據打交道。想象一下,你是辦公室里負責處理員工信息、項目數據的 “數據小管家”,每天都要面對大量格式各異的數據。 這時候,JSON(JavaScript Object Notation)就像是你得力的數據助手,它是一種輕量級的數據交換格式,簡單又高…

Java 實現 List<String> 與 String 互轉

在 Java 開發過程中&#xff0c;有時需要將 List<String> 轉為 String 存儲&#xff0c;后續使用時再還原回去。此時就需要 Java 實現 List<String> 與 String 互轉。以下是一種互轉方式。 采用如下工具包實現。 <dependency><groupId>org.apache.com…

NO.87十六屆藍橋杯備戰|動態規劃-完全背包|瘋狂的采藥|Buying Hay|紀念品(C++)

完全背包 先解決第?問 狀態表?&#xff1a; dp[i][j]表?&#xff1a;從前i個物品中挑選&#xff0c;總體積不超過j&#xff0c;所有的選法中&#xff0c;能挑選出來的最?價 值。&#xff08;這?是和01背包?樣噠&#xff09; 那我們的最終結果就是dp[n][V] 。狀態轉移?…

第十三天 - Ansible基礎架構 - YAML語法與Playbook - 練習:批量配置部署

Ansible自動化運維實戰&#xff1a;從入門到批量配置部署 前言&#xff1a;自動化運維的時代選擇 在服務器規模呈指數級增長的今天&#xff0c;手工操作已無法滿足運維需求。本文將手把手教你使用Ansible這個明星級自動化工具&#xff0c;通過YAML語法和Playbook實現批量配置…

Redis的過期和內存淘汰策略

文章目錄 惰性刪除定期刪除內存滿了&#xff0c;數據淘汰策略 Redis 提供了兩種刪除策略&#xff1a; 惰性刪除 、定期刪除 惰性刪除 定期刪除 兩種清除模式: 內存滿了&#xff0c;數據淘汰策略 Redis 提供了八種數據淘汰策略&#xff1a; 1. 默認是不淘汰任何的 key&#x…

用PHPExcel 封裝的導出方法,支持導出無限列

用PHPExcel 封裝的導出方法&#xff0c;支持導出無限列 避免PHPExcel_Exception Invalid cell coordinate [1 異常錯誤 /*** EXCEL導出* param [string] $file_name 保存的文件名及表格工作區名&#xff0c;不加excel后綴名* param [array] $fields 二維數組* param [array] $…

WHAT - React 元素接收的 ref 詳解

目錄 1. ref 的基本概念2. 如何使用 ref2.1 基本用法2.2 類組件使用 createRef 3. forwardRef 轉發 ref4. ref 的應用場景5. ref 和函數組件總結 在 React 中&#xff0c;ref&#xff08;引用&#xff09;用于訪問 DOM 元素或類組件實例。它允許我們直接與元素進行交互&#xf…

【QT】QT的消息盒子和對話框(自定義對話框)

QT的消息盒子和對話框&#xff08;自定義對話框&#xff09; 一、消息盒子QMessageBox1、彈出警告盒子示例代碼&#xff1a;現象&#xff1a; 2、致命錯誤盒子示例代碼&#xff1a;現象&#xff1a; 3、幫助盒子示例代碼&#xff1a;現象&#xff1a; 4、示例代碼&#xff1a; …

依靠視頻設備軌跡回放平臺EasyCVR構建視頻監控,為幼教連鎖園區安全護航

一、項目背景 幼教行業連鎖化發展態勢越發明顯。在此趨勢下&#xff0c;幼兒園管理者對于深入了解園內日常教學與生活情況的需求愈發緊迫&#xff0c;將這些數據作為提升管理水平、優化教育服務的重要依據。同時&#xff0c;安裝監控系統不僅有效緩解家長對孩子在校安全與生活…

Stable Diffusion+Pyqt5: 實現圖像生成與管理界面(帶保存 + 歷史記錄 + 刪除功能)——我的實驗記錄(結尾附系統效果圖)

目錄 &#x1f9e0; 前言 &#x1f9fe; 我的需求 &#x1f527; 實現過程&#xff08;按功能一步步來&#xff09; &#x1f6b6;?♂? Step 1&#xff1a;基本圖像生成界面 &#x1f5c3;? Step 2&#xff1a;保存圖片并顯示歷史記錄 &#x1f4cf; Step 3&#xff1a…

量子計算未來的潛力和挑戰

據麥肯錫預測&#xff0c;到 2035 年或 2040 年&#xff0c;量子計算市場規模可能增長至約 800 億美元。目前&#xff0c;許多量子比特技術正競相成為首臺通用、無差錯量子計算機的基礎&#xff0c;但仍面臨諸多挑戰。 我們將探討量子計算的未來前景、潛力&#xff0c;以及它對…

ArcGIS 給大面內小面字段賦值

文章目錄 引言:地理數據處理中的自動化賦值為何重要?實現思路模型實現關鍵點效果實現步驟1、準備數據2、執行3、完成4、效果引言:地理數據處理中的自動化賦值為何重要? 在地理信息系統(GIS)的日常工作中,空間數據的屬性字段賦值是高頻且關鍵的操作,例如在土地利用規劃…

如何打通虛擬化-容器環境并保障流量安全?SmartX VCCI 方案升級!

為了提升資源利用率、交付效率和業務靈活性&#xff0c;不少企業用戶都在推進從傳統架構向云原生架構的演進&#xff0c;并采用虛擬機與容器共存的混合模式支持多種業務系統。由于兩個環境在業務交互層面形成高度耦合&#xff0c;企業需要具備簡單、高效方案&#xff0c;實現虛…

stable diffusion 量化加速點

文章目錄 一、導出為dynamic shape1)函數講解(函數導出、輸出檢查)2)代碼展示二、導出為static shape1)函數講解(略)2)代碼展示三、序列化為FP32測速1)測速2)代碼四、序列化為FP16測速1)測速2)代碼同上五、發現并解決解決CLIP FP16溢出,并測速1)如何找到溢出的算子…

7-openwrt-one通過web頁面配置訪客網絡、無線中繼等功能

前幾個章節一直在介紹編譯、分區之類的,都還沒正常開始使用這個路由器的wifi。默認wifi是沒有啟動的,前面還是通過手動修改uci配置啟動的,這個章節介紹下官方web頁面的使用。特別是訪客網絡、無線中繼 1、開啟wifi,配置wifi基本信息 我們使用有線連接路由器,通過192.168.…

AcWing 6099. 座位

原題目鏈接 問題描述 有 n 頭奶牛&#xff08;n ≥ 5&#xff09;&#xff0c;編號為 1 ~ n&#xff0c;按照某種順序圍著一張圓桌坐成一圈。 奶牛之間存在如下的朋友關系&#xff1a; 如果兩頭奶牛相鄰&#xff0c;則它們是朋友&#xff1b;如果兩頭奶牛之間只隔著一頭奶…