C語言之數組精講(2)

目錄

?數組的復制

輸入數組元素的值

對數組的元素進行倒序排列

?使用數組進行成績處理

對象式宏

數組元素的最大值和最小值

賦值表達式的判斷

數組的元素個數

?結語


?數組的復制

我們把數組中的元素全部復制到另一個數組中。

#include<stdio.h>int main()
{int i;int a[5] = {1, 2, 3};int b[5];for(i = 0; i < 5; i++){b[i] = a[i] ;}puts("   a b");puts("   -------");for(i = 0; i < 5; i++){printf("%4d%4d\n", a[i], b[i]);}return 0;
}

程序中的第一個for語句,作用是把a中的全部元素一次賦值給b中的元素

同時遍歷兩個數組,從b[0] = a[0]到b[4] = a[4]

C語言不支持基本賦值運算符,下面語句是錯誤的?

b = a;//不能為數組賦值

?注意

不能使用基本賦值運算符對數組進行賦值。數組的賦值必須通過使用循環語句對所有元素進行一一賦值。

第二個for語句時同時遍歷兩個數組,并且顯示它們的值。


輸入數組元素的值

從鍵盤中輸入數組元素的值,并且一一顯示它們。

#include<stdio.h>int main()
{int i;int x[5];for(i = 0; i < 5; i++){printf("x[%d]:", i);//輸入元素的值scanf("%d", &x[i]);}puts("……………………");for(i = 0; i < 5; i++){printf("x[%d]=%d \n", i, x[i]);//顯示元素的值}return 0;
}

對數組的元素進行倒序排列

如果僅僅是按照順序對數組內的元素賦值沒有什么難度,接下來我們對數組的元素進行倒序排列。

我們創建5個元素的int類型的數組進行下列倒序排列

a[0]和a[4]交換;a[1]和a[3]交換;a[3]處在中間位置,順序不發生改變

#include<stdio.h>int main()
{int i;int a[5];for(i = 0; i < 5; i++)//為數組元素賦值{printf("a[%d]:", i);scanf("%d", &a[i]);}for(i = 0; i < 2; i++)//進行倒序排列{int temp = a[i];a[i] = a[4 - i];//交換a[i] 和a[4 - i]的數值a[4 - i] = temp;}puts("進行倒序排列");for(i = 0; i < 5; i++){printf("[%d]=%d\n", i, a[i]);}return 0;
}

想要交換兩個變量的值就必須引入一個中間變量來進行交換。

1.把a的值保存在temp中。

2.把b的值賦值給a。

3.把temp保存的值賦值給b。

不可以像下面一樣進行賦值:

?a = b; b = a;這樣a和b的值都會變為b的初始值。


?使用數組進行成績處理

#include<stdio.h>int main()
{int i;int sum;//5名學生分數的總和int tensu[5];//5名學生的分數for(i = 0; i < 5; i++){printf("%2d號:", i + 1);scanf("%d", &tensu[i]);sum += tensu[i];}printf("總分:%5d\n", sum);printf("平均分:%5.1f\n", double(sum) / 5);return 0;
}

在這里我們僅僅是對5人的成績進行運算,但是編寫完程序后人數增加到8人呢?80人呢?800人呢?

在這里我們需要進行選擇性替換(只替換需要替換的部分)


對象式宏

我們可以用對象式宏來解決上述問題

#include<stdio.h>#define NUMBER 10//學生人數int main()
{int i;int sum;//10名學生分數的總和int tensu[NUMBER];//10名學生的分數printf("請輸入%d個學生的分數\n", NUMBER);for(i = 0; i < NUMBER; i++){printf("%2d號:", i + 1);scanf("%d", &tensu[i]);sum += tensu[i];}printf("總分:%5d\n", sum);printf("平均分:%5.1f\n", double(sum) / NUMBER);return 0;
}

該程序的關鍵部分是#define指令

#define a b? ?將該指令的a替換為b

在這里,a稱為宏名。為了易于與變量名區分我們通常用大寫字母來表示。

在本程序中,宏名為NUMBER,被替換為10.?

在程序中使用宏,不僅能在一個地方進行統一管理,而且通過為常量定義名稱還可以使程序更加易讀,如果再加上注釋,效果更明顯。

程序中的10等常量被稱為幻數(不清楚具體表示什么值),引入對象式宏后就可以消除程序中的幻數了。另外使用宏可以提高程序的質量。

?注意

不要在程序中直接使用數值,最好通過宏的形式定義出它們的名稱。定義宏的時候不要忘記加上注釋!


數組元素的最大值和最小值

我們來求出分數大最大值和最小值,即數組元素的最大和最小值

#include<stdio.h>#define NUMBER 10//學生人數int main()
{int i;int tensu[NUMBER];//5名學生的分數int max, min;printf("請輸入%d個學生的分數\n", NUMBER);for(i = 0; i < NUMBER; i++){printf("%2d號:", i + 1);scanf("%d", &tensu[i]);}min = max = tensu[0];for(i = 0; i < NUMBER; i++){if(tensu[i] > max)  max = tensu[i];if(tensu[i] < min)  min = tensu[i];}printf("最高分:%d", max);printf("最低分:%d", min);return 0;
}

賦值表達式的判斷

對于數值類型的判斷我們在前面的數據類型講到過,現在我們來看看什么是賦值表達式的判斷?

在賦值時的判斷結果中,與賦值后做操作數的類型和值相同,例如int n=2.22判斷結果為n=2.

對于上面求最大值、最小值中由于賦值運算符=,具有結合性,所以可以看為

min = (max = tensu[0])

例如tensu[0]=20,那么min和max和值都為20.

C語言經常使用這樣的賦值方法,如a = b =0就可以把0同時賦值給a和b,但是對于初始值的聲明并不適用。

比如,int a = b = 0;不可這樣進行初始化

應該這樣,int a = 0, b = 0;當然也可以分開聲明。

?我們把上面求求最大值的流程來寫出來:

求tensu[0]—tensu[4]的最大值:

max = tensu[0];

if(tensu[1] > max) max = tensu[1];

if(tensu[2] > max) max = tensu[2];

if(tensu[3] > max) max = tensu[3];

if(tensu[4] > max) max = tensu[4];

?對與求最小值的流程也是一樣這里我們便不再贅述了。


數組的元素個數

雖然通過定義宏來變更數組元素個數十分簡單,但是每次都需要進行更改重新編譯后執行,因此我們可以定義出一個較大的數組,從開頭取出我們需要的部分。我們來對求學生分數進行下更改

#include<stdio.h>#define NUMBER 80//人數上限int mian()
{int i, j;int sum;//學生人數int tensu[NUMBER];//學生分數int bunpu[11] = {0};printf("請輸入學生人數");do{scanf("%d", &sum);       //選擇學生的人數在復合的規定內if(sum < 1 || sum > NUMBER){printf("請輸入1—%d的數", NUMBER);}}while(sum < 1 || sum > NUMBER);printf("請輸入學生的人數:%d\n", sum);for(i = 0; i < sum; i++){printf("%2d號:", i + 1);do{scanf("%d", &tensu[sum]);     //輸入學生成績在1—100內if(tensu[sum] < 0 || tensu[sum] > 100){printf("\a請輸入1—100內的數值:\n");}}while(tensu[sum] < 0 || tensu[sum] > 100);bunpu[tensu[i] / 10]++;}puts("-----分布圖-----");printf("		100:");for(j = 0; j < bunpu[10]; j++)//100分的分布圖{putchar('*');putchar('\n');}for(i = 9; i >= 0; i--){printf("%3d - %3d:", i * 10, i * 10 + 9);for(j = 0; j < bunpu[i]; j++)//不到100分的分布圖{putchar('*');putchar('\n');}}return 0;
}

在本程序中,我們使用了int[11]數組bunpu來存放分數的分布。

求分布的表達式較為復雜,利用整數/整數舍去小數部分來進行遞增的,如下

tensu[i] 為0—9時,bunpu[0]遞增

tensu[i] 為10—19時,bunpu[1]遞增

……………………………………

tensu[i] 為80—89時,bunpu[8]遞增

tensu[i] 為90—99時,bunpu[9]遞增

tensu[i] 為100時,bunpu[10]遞增

通過上述循環,tensu[i]的分數就保存在數組bunpu中了。


?結語

數組就是我們向內存訪問請求存放數據內存的地方,然后我們通過數組的聲明為其確定類型、名稱,再通過初始化后,通過進行下表運算符就可以對數組進行訪問使用了,當然我們還可以不進行初始化,通過使用for循環對數組進行挨個賦值,再進行數組的遍歷就可以使用了。

創建好數組后一般不能更改數組元素的個數,但是我們可以通過對象式宏來進行任意的對數組元素進行更改。

最后,天氣漸冷,大家一定要做好保暖措施,鍛煉身體,預防流感!

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

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

相關文章

SwinIR: Image Restoration Using Swin Transformer

SwinIR 簡介 論文地址&#xff1a;SwinIR: Image Restoration Using Swin Transformer 代碼&#xff1a;SwinIR ? 本文提出了一個基于swin transformer的圖像超分模型swinIR。其中SwinIR分為三部分&#xff1a;淺層特征提取、深層特征提取和高質量圖像重建模塊。 現階段問…

WordPress如何通過header給頁面發送原生HTTP頭

在WordPress中&#xff0c;你可以使用header() 函數來發送原生HTTP頭。這個函數通常在主題文件&#xff08;例如header.php&#xff09;或者插件中使用。以下是一個簡單的例子&#xff0c;演示如何在WordPress中使用header() 函數發送原生HTTP頭&#xff1a; <?php // 在主…

19.java程序設計-基于SpringBoot的博客管理系統的設計與實現

摘要 隨著信息技術的迅速發展&#xff0c;博客作為一種重要的信息傳播和交流工具&#xff0c;逐漸在互聯網上占據重要地位。為了滿足用戶對個性化博客管理的需求&#xff0c;本研究設計并實現了一種基于Spring Boot框架的博客管理系統。 本系統通過采用前后端分離的架構&…

【算法題】密鑰格式化 (js)

!](https://img-blog.csdnimg.cn/direct/bf9a3d781a8043c997593260c0a8306f.png) 第一部分的字符可以少于… const str "5F3Z-2e-9w"; const str1 "2-5g-3-J"; function solution(num, str) {const arr str.split("-");const head arr[0];…

【C++11(三)】智能指針詳解--RAII思想循環引用問題

&#x1f493;博主CSDN主頁:杭電碼農-NEO&#x1f493; ? ?專欄分類:C從入門到精通? ? &#x1f69a;代碼倉庫:NEO的學習日記&#x1f69a; ? &#x1f339;關注我&#x1faf5;帶你學習C ? &#x1f51d;&#x1f51d; C11 1. 前言2. 為什么要有智能指針?3. RAII思想…

30.如何在Spring所有Bean創建完后做擴展?

如何在Spring所有Bean創建完后做擴展? 哪里才算所有的bean創建完了。 首先是所有的配置bean會注冊成BeanDefinition 然后根據BeanDefinition進行循環調用一個一個的getBean進行生產。 循環完所有的BeanDefiniton,通過BeanFactory的getBean方法生成所有的Bean 這個循環結…

LightDB - 支持substring_index 函數[mysql兼容]

從 23.4 版本開始&#xff0c; LightDB 支持 mysql 的substring_index 函數。下面對這個函數進行介紹 substring_index(str, delim, count ) 這個函數用于從指定字符串str中返回到達分隔符delim出現次數(count)之前的子字符串。。具體見之后用例&#xff1a; mysql 中介紹&a…

【BUG】微信小程序image不會隨著url動態變化

問題描述&#xff1a; 第一次打開界面&#xff0c;顯示的是默認頭像而不是用戶頭像&#xff0c;似乎image里面的src只要第一次有值就不會再更新了 解決 不要給src里面的變量設置初始值&#xff0c;而是直接賦空值

信息安全、網絡安全和數據安全的相互關系

最近正在開展安全方面的相關工作&#xff0c;因此就對這些概念做了一些分析&#xff0c;參考各種介紹和書籍&#xff0c;結合自身的認識&#xff0c;總結起來如下&#xff0c;信息安全、網絡安全、數據安全和基礎設施安全的關系究竟是什么&#xff0c;信息安全概念最大&#xf…

DevOps搭建(七)-安裝Jenkins詳細步驟

這里我們用Docker進行安裝 1、拉取Jenkins鏡像 Jenkins download and deployment 選擇LTS長期支持的版本,接著點擊Docker鏈接進入 找到上面的版本,并copy拉取鏡像的命令 docker pull jenkins/jenkins:2.426.1-lts 2、docker-compose安裝Jenkins 首先創建安裝目錄/home/f…

STM32 cubeMX 呼吸燈實驗

文章代碼使用 HAL 庫。 文章目錄 一、1.PWM原理二、LED 原理圖三、使用cubemx 配置 led四、PWM 相關函數五、PWM占空比占空比計算六、PWM 呼吸燈重要代碼總結 呼吸燈 一、1.PWM原理 PWM全稱為脈沖寬度調制&#xff08;Pulse Width Modulation&#xff09;&#xff0c;是一種常…

擁有大量蝦皮買家號有哪些好處

擁有眾多Shopee買家賬號&#xff0c;無疑是賣家們獲取極大優勢的一項策略。多賬號的運用不僅有助于賣家在Shopee平臺上獲得更為豐富的流量&#xff0c;更能夠在關鍵詞排名和銷售表現等方面為其帶來顯著提升。 首先&#xff0c;多個Shopee買家賬號的靈活運用&#xff0c;使賣家能…

前后端(JAVA)實現AES對稱加解密方式

文章目錄 前后端&#xff08;JAVA&#xff09;實現AES對稱加解密方式1 對稱加密分類以及概括1.1 加密安全等級 DES < 3DES < AES < RC1.2 DES1.3 3DES1.4 AES1.5 RC 2 前后端實現AES對稱加解密方式3 后端AES對稱加解密&#xff08;ECB和CBC模式&#xff09;工具類4 前…

【Python百寶箱】從傳感器到云端:深度解析Python在物聯網中的多面應用

邁向智能未來&#xff1a;Python與物聯網生態系統的完美融合 前言 隨著物聯網技術的不斷發展&#xff0c;Python作為一種靈活且強大的編程語言&#xff0c;逐漸成為物聯網開發的重要工具之一。本文將深入探討物聯網領域中常用的Python庫和框架&#xff0c;涵蓋了從輕量級通信…

JavaScript <有道翻譯之數據解密‘23年12月06日版‘>--案例(三)

前言: 記得上半年還是去年,有道翻譯還是直接返回明文數據;現在也跟著,用接口返回加密數據了; 娛樂一下,破他的密文數據... 成品效果圖: js部分: 對于找他的密文數據有點費時,針對密文--->搜他地址和啟動器不是特別容易,輾轉多時(搜:descrypt/json.parse 結合使用更快),有圖…

通訊錄實現

下方是頭文件的代碼 #define _CRT_SECURE_NO_WARNINGS #include <assert.h> #include<stdio.h> #include<string.h> #include<stdlib.h>#define NAME_MAX 20 #define SEX_MAX 6 #define TELE_MAX 12 #define ADDR_MAX 30 #define MAX 100 #define D…

swing快速入門(四)

注釋很詳細&#xff0c;直接上代碼 上一篇 增加內容 流式布局范例 import java.awt.*;public class swing_test_2{public static void main(String[] args){//創建一個窗口對象Frame framenew Frame("test");//設置窗口大小frame.setSize(800,800);//這里演示的是…

Gateway全局異常處理及請求響應監控

前言 我們在上一篇文章基于壓測進行Feign調優完成的服務間調用的性能調優&#xff0c;此時我們也關注到一個問題&#xff0c;如果我們統一從網關調用服務&#xff0c;但是網關因為某些原因報錯或者沒有找到服務怎么辦呢&#xff1f; 如下所示&#xff0c;筆者通過網關調用acc…

中小企業管理者如何培育團隊精神?

某石油工程有限公司總經理曾提問&#xff1a;“作為中小企業的管理者如何才能更好的激發團隊精神呢&#xff1f;” 每個企業都向往和號召團隊精神&#xff0c;但是往往事與愿違。在各種羨慕嫉妒恨的情緒影響下&#xff0c;難免會產生一些落差&#xff0c;影響到團隊精神。 所…

超聲波清洗機會損傷物品嗎?一文明白超聲波清洗機有哪些優點

正確使用超聲波清洗機且買對超聲波清洗機是不會對清洗物品造成傷害的&#xff01; 一、超聲波清洗機工作原理是如何的&#xff1f; 超聲波清洗機的工作原理是利用超聲波產生的空化振動來清潔物體。當超聲波在清洗液中傳播時&#xff0c;它會產生微小的氣泡和振動&#xff0c;這…