數組越界的后果

數組:

什么是數組:變量的組合,是一種批量定義變量的方式。
定義:類型 數組名[數量];int arr[5];
使用:數組名[下標];下標:從零開始,范圍:0~數量-1。
遍歷:與for循環配合,使用循環變量i當作數組的下標。
初始化:類型 數組名[數量] = {1,2,3,4,5,...};1、數組與普通變量一樣默認值是隨機的,為了安全要對進行初始化。2、這種初始化語法只能在定義數組時使用,而且必須使用常量初始化。3、初始化數據過多,編譯器會丟棄并產生警告。4、初始化數據不夠,編譯器則會補0。5、初始化數組時長度可以省略,編譯器會自動統計數據的個數然后告訴數組。sizeof(arr)/sizeof(arr[0]) = 數組的長度

練習1:定義一個長度為10的數組并初始化,計算出最大值,最小值以及平均值。

#include <stdio.h>int main(int argc,const char* argv[])
{int arr[10] = {1,9,0,7,6,5,3,4,8,2};int max = arr[0] , min = arr[0];float sum = arr[0];for(int i=1; i<10; i++){if(arr[i] > max){max = arr[i];}if(arr[i] < min){min = arr[i];}sum += arr[i];}printf("%d %d %g\n",min,max,sum/10);}

練習2:定義一個長度為10的數組并初始化,進行升序排序。
for(int i=0; i<x-1; i++)
{
for(int j=i+1; j<x; j++)
{
if(i < j)
{
swap i j;
}
}
}

#include <stdio.h>int main(int argc,const char* argv[])
{int arr[10] = {1,9,0,7,6,5,3,4,8,2};for(int i=0; i<9; i++){for(int j=i+1; j<10; j++){if(arr[i] > arr[j]){int t = arr[i];arr[i] = arr[j];arr[j] = t;}}}for(int i=0; i<10; i++){printf("%d ",arr[i]);}
}

數組越界

越界:為了程序的運算效率是不會檢查數組的下標。
數組越界的后果:
1、一切正常。
2、段錯誤
3、臟數據

練習3:定義一個長度為10的數組并初始化,找出數組中第二個大的值。

#include <stdio.h>int main(int argc,const char* argv[])
{int arr[10] = {20,19,0,7,6,5,3,4,38,2};int max = arr[0]>arr[1]?arr[0]:arr[1];int max2 = arr[0]>arr[1]?arr[1]:arr[0];for(int i=2; i<10; i++){if(arr[i] > max){max2 = max;max = arr[i];}else if(arr[i] > max2){max2 = arr[i];}}printf("%d %d\n",max,max2);
}

二維數組:

一維數組相當于把變量排成一排,通過編號訪問。
二維數組相當于把變量排成矩陣,通過行號和列號訪問。
定義:類型 數組名[行數][列數];int arr[3][5];[0,0][0,1][0,2][0,3][0,4][1,0][1,1][1,2][1,3][1,4][2,0][2,1][2,2][2,3][2,4]
使用:數組名[行下標][列下標]行下標:0 ~ 行數-1列下標:0 ~ 列數-1
遍歷:需要與雙層for循環配合,外層循環負責遍歷行,內層循環負責遍歷列。for(int i=0; i<3; i++){for(int j=0; j<5; j++){printf("%d ",arr[i][j]);}printf("\n");}
初始化:類型 數組名[行數][列數] = {{第一行},{第二行},{第三行}};

練習4、定義一個5*5的數組,找出其中的最小值下標,計算周的和是多少。

#include <stdio.h>int main(int argc,const char* argv[])
{int arr[5][5] = {{-1,3,5,7,9},{0,2,4,6,8},{1,2,13,4,5},{6,7,8,9,0},{4,5,6,7,8}};	int min_x = 0 , min_y = 0;for(int i=0; i<5; i++){for(int j=0; j<5; j++){if(arr[i][j] < arr[min_x][min_y]){min_x = i;min_y = j;}}}int sum = 0;min_x>0 && (sum+=arr[min_x-1][min_y]); // 上min_x<4 && (sum+=arr[min_x+1][min_y]); // 下min_y>0 && (sum+=arr[min_x][min_y-1]); // 左min_y<4 && (sum+=arr[min_x][min_y+1]); // 右min_x>0 && min_y>0 && (sum+=arr[min_x-1][min_y-1]); // 左上min_x>0 && min_y<4 && (sum+=arr[min_x-1][min_y+1]); // 右上min_x<4 && min_y>0 && (sum+=arr[min_x+1][min_y-1]); // 左下min_x<4 && min_y<4 && (sum+=arr[min_x+1][min_y+1]); // 右下printf("sum=%d\n",sum);
}

變長數組:

定義數組時使用變量當作它長度,在代碼編譯期間數組的度是不確定的,當執行到數組的定義語句時它的長度才家有確定下來,一旦確定就無法更改了。優點:可以根據實際情況來確定數組長度達到節約內存目的。
缺點:不可以初始化
#include <stdio.h>int main(int argc,const char* argv[])
{int n = 0;// 數組長度可以 變化printf("請輸入數組的長度:");scanf("%d",&n);int arr[n] = {};printf("%d\n",sizeof(arr)/sizeof(arr[0]));
}

練習5:顯示N層楊輝三角形。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1

#include <stdio.h>int main(int argc,const char* argv[])
{int n = 0;printf("請輸入n的值:");scanf("%d",&n);int arr[n][n];for(int l=0; l<n; l++){arr[l][0] = 1;arr[l][l] = 1;for(int c = 1; c<l; c++){arr[l][c] = arr[l-1][c]+arr[l-1][c-1];}}for(int i=0; i<n; i++){for(int j=0; j<=i; j++){printf("%d ",arr[i][j]);}printf("\n");}
}

下期:

進制轉換、原反補
函數
類型限制:const static volatile register extern
指針
字符串
堆內存管理


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

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

相關文章

職場心理:12個建議或許能改變你的一生(圖)

心理引言&#xff1a;如何更好實現自我的職業目標&#xff1f;聽起來很簡單&#xff0c;回答也很簡短&#xff0c;就是你必須清楚你最終想要實現什么&#xff1f;只要你這樣做&#xff0c;你就已經開始從看的見和看不見的兩條路徑來實現你的目標。職場是一種特殊的環境&#xf…

python—包

1.模塊 可以增加代碼的重復利用的方式 避免命名沖突 如何定義模塊 模塊就是一個普通文件&#xff0c;所以任何代碼可以直接書寫規范 函數&#xff08;單一的功能&#xff09;類&#xff08;相似功能的組合&#xff0c;或者類似業務模塊&#xff09;測試代碼 如何使用模塊 模塊…

Docker Installation : Docker 中安裝并啟動 Kong

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Details about how to use Kong in Docker can be found on the DockerHub repository hosting the image: kong. We also have a Docke…

tomcat是否有必要配置環境變量(摘)

之前發表了一篇關于如何安裝和配置Tomcat的文章&#xff0c;而最近在開發項目的時候總是報錯。后來被公司的大神問了一句&#xff1a;是誰告訴你Tomcat是需要配置環境變量的&#xff1f; 作為新手的我瞬間整個人都不好了&#xff01;于是偷偷百度了一下&#xff0c;終于找到了關…

走迷宮+推箱子

兩個小游戲的大致邏輯 走迷宮: 1、定義二維字符數組作為迷宮 2、定義變量記錄老鼠的位置 3、獲取游戲開始時間 3、進入循環 1、清理屏幕&#xff0c;使用system調用系統命令。 2、顯示迷宮(遍歷二維字符數組) 3、檢查是否到達出口 獲取游戲結束時間&#xff0c;計算出走出迷宮用…

Facebook開源ptr:在Python環境中并行運行單元測試

Facebook開源了一個名為Python Test Runner&#xff08;ptr&#xff09;的新項目&#xff0c;允許開發人員運行Python單元測試套件。ptr和現有測試運行器之間的主要區別在于ptr通過爬取存儲庫查找一定的Python項目&#xff0c;這些項目帶有的單元測試在安裝文件中已經定義過。 …

小竅門解決大問題(組圖)

1.洗頭時&#xff0c;在水中放少許鹽&#xff0c;也可以預防脫發。 2.用醋洗頭&#xff0c;可以令頭發飄順&#xff0c;容易打理而且兼有去頭皮屑的功效。特別適合燙染后的頭發。 3.刷牙時在牙膏上加上一點小蘇打&#xff0c;刷三次后牙齒潔白如玉&#xff0c;牙銹自然脫落…

解決報錯: Connecting to Kong on http ... Could not reach Kong on http://xxx.xxx.xxx.xxx:8001

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. Docker 中安裝并啟動好網關 kong 后&#xff0c;想要安裝 kong 的圖形化界面 kong-dashboard &#xff0c;運行命令&#xff1a; do…

生成迷宮/C++

小時候&#xff0c;都喜歡玩迷宮&#xff0c;現在的電腦上還可以玩3D類迷宮。 那么每次開始游戲時&#xff0c;迷宮里密密麻麻的道路是怎么生成的呢&#xff1f; 在代碼里面&#xff0c;我們把它們想象成一堆像素小格子&#xff0c;當兩個格子連在一起&#xff0c;就像一堵墻&a…

Spring boot 配置tomcat后 控制臺不打印SQL日志

在pom.xml中配置tomcat啟動處加上&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</…

人生有五不:不等、不管、不看、不做、不給

一、我不等 朋友什么都等&#xff1a;等退休、等一千萬存款、等孩子長大、等房貸繳清……最后等到了告別式。 他有感而發告訴我們這群探病友人&#xff0c;人都會走&#xff0c;可是他走得有些遺憾&#xff0c;有點不甘&#xff0c;非常后悔&#xff0c;除了工作之外&#xff0…

selenium操作瀏覽器的前進和后退

前進關鍵字&#xff1a;driver.forward() 后退關鍵字&#xff1a;driver.back() 測試對象&#xff1a;1、https://www.baidu.com/ 2、https://www.sogou.com/ 實例代碼&#xff1a; 1 # 導入測試所需的庫或者模塊2 from selenium import webdriver3 import unittest4 import ti…

關于對象不能直接訪問私有成員的誤區(轉)

先貼代碼&#xff1a; #includeusing namespace std; class CPoint { public:CPoint(int xx, int yy){x xx;y yy;}CPoint(const CPoint &p){x p.x;y p.y;} private:int x, y; };如果你在想為什么拷貝構造函數的參數可以直接去訪問它自己的私有成員的話&#xff0c;你就…

阿里云 ECS服務器 開放 8080 端口 -- 圖解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 由于 kong-dashboard 的端口是映射到 8080 的&#xff0c;服務已啟動成功卻一直訪問不了&#xff0c;最后才想起端口沒有開放 ... 1. 登…

.NET高級代碼審計(第三課)Fastjson反序列化漏洞

0X00 前言 Java中的Fastjson曾經爆出了多個反序列化漏洞和Bypass版本&#xff0c;而在.Net領域也有一個Fastjson的庫&#xff0c;作者官宣這是一個讀寫Json效率最高的的.Net 組件&#xff0c;使用內置方法JSON.ToJSON可以快速序列化.Net對象。讓你輕松實現.Net中所有類型(對象,…

IDEA:No SLF4J providers were found.

如果您是用IDEA 的 maven 寫的 將slf4j的導入包 更改 為下列代碼 <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.8.0-beta2</version></dependency><dependency><groupId&…

【C++基礎】時間類型詳解(轉)

Unix時間戳(Unix timestamp)&#xff0c;或稱Unix時間(Unix time)、POSIX時間(POSIX time)&#xff0c;是一種時間表示方式&#xff0c;定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。Unix時間戳不僅被使用在Unix 系統、類Unix系統中&#xff0c;也在許多其…

沒變強是因為你太舒服(圖)

職業生涯很長&#xff0c;對企業而言&#xff0c;它需要你成為一個專才&#xff0c;但從職業發展來看&#xff0c;你需要成為一個全才&#xff0c;方能適應社會的變化。 阻礙你成為全才的不良習慣有很多&#xff0c;有時候我們喜歡趨利避害&#xff0c;拖延癥更是讓自己定下來…

解決:DuplicateMappingException: Table [xx] contains physical column name referred to by multiple ... .

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff1a; Caused by: org.hibernate.DuplicateMappingException: Table [xxx] contains physical column name [comment] …

0323表格學習

上午早來復習了一會昨天的課程。今天主要學習了表格的標簽寫法&#xff0c;難度不大&#xff0c;但是合并行與合并列容易混淆搞不明白。 <!--有序列表--> <ol type"I"> <li>數學</li> <li>英語</li> &l…