6.1 if語句

計算機語言和人類語言類似,人類語言是為了解決人與人之間交流的問題,而計算機語言是為了解決程序員與計算機之間交流的問題。程序員編寫的程序就是計算機的控制指令,控制計算機的運行。借助于編譯工具,可以將各種不同的編程語言的源程序轉換為計算機可以執行的機器語言。

?????? 計算機程序是計算機的控制指令,控制計算機完成特定的功能。我們編寫源程序的過程和建造房屋的過程類似,大致分為五個步驟。

?????? 第一步:設計程序的架構,類似于房屋設計。先設計好圖紙之后再進行下一步的建造工作。

?????? 第二步:準備程序需要的數據,相當于建造房屋的原材料。

?????? 第三步:分析程序功能實現的算法,相當于建造房屋的工藝流程。

?????? 第四步:編寫源程序——開始建造。

?????? 第五步:編寫完成后調試程序——建造房屋后的清理修補工作。

?????? 上述五個步驟中,最重要的就是程序的設計工作。如果設計出了問題,會導致后續工作的失敗。

針對功能較為復雜的程序,程序開發有一套標準的流程,我們將上述五個步驟進一步細化:

?????? 第一步:分析需求,設計程序結構框架;

?????? 第二步:數據定義,定義恰當的數據結構;

?????? 第三步:分析算法;

?????? 第四步:編寫偽代碼,即用我們自己的語言來編寫程序;

?????? 第五步:畫流程圖,使用Visio、Excel或者其他繪圖工具繪制算法流程和邏輯關系圖;

?????? 第六步:編寫源程序,其實就是將我們的偽代碼翻譯成計算機語言;

?????? 第七步:調試程序,修復程序中可能出現的BUG;

?????? 第八步:優化代碼,嘗試更好的設計方案,效率更高的算法,邏輯更為清晰簡潔明了。這一步可以使我們學到更多的東西,何樂而不為呢。

?????? 在今后的學習中,建議讀者嚴格遵循這樣的流程,養成良好的編程習慣,受益終身。

提示

請記住兩句話:

程序=數據結構+算法。

代碼量的多少是衡量程序員水平最客觀的標準。

數據結構是第二步要做的事情,算法是第三步要做的事情。

??????

數據結構就是將數據以什么樣的形式存儲到計算機內存。數據存儲需要考慮以下幾個問題:

1.以字節為單位,還是以字為單位,或者是其他大小的內存塊為單位存儲數據;

2.以連續的形式存儲(例如數組),還是不連續的形式存儲(例如鏈表)到計算機的內存;

3.數據是在剛加載程序時就存儲到內存(靜態分配內存),還是在程序的執行過程中存儲到內存(動態分配內存);

4.數據是以數值的方式存儲和引用,還是以地址的方式存儲和引用,還是兩種方式的組合。

5.數據是以什么樣的順序存儲,升序還是降序等。

選擇合適的數據結構非常重要,關系到程序執行的效率和功能的實現。好的數據結構,可以大大簡化程序功能實現的算法。

算法就是程序功能實現的具體流程。計算機程序中的算法和數學中的算法相似,但不完全相同,更多的時候,我們將程序中的算法稱為程序執行的流程和先后順序。

?????? 上述提示內容在剛開始學習時不要求理解,隨著代碼量的增加,會終有所悟。

在程序設計時需要使用三種基本的結構:順序結構、分支結構和循環結構。不論多么復雜的程序,都是由這三種結構組合而成。接下來,我們分別學習這三種程序設計結構的構建方法。

順序結構:按照指令代碼排列的先后順序執行,稱之為順序結構。

分支結構:指程序根據一定的條件有選擇的執行路徑。

循環結構:指在程序中需要反復執行某個功能而設置的一種程序結構,可以看成是一個條件判斷語句和一個向回轉向語句的組合。

順序結構相對比較簡單,分支結構和循環結構中必定包含順序結構語句塊,本書不再贅述。接下來我們將在本章講述分支結構的程序設計方法,下一章講述循環結構的程序設計方法。

本章學習知識概要:

????? if句

????? ese語句

????? switch語句

6.1 if語句

本節必須掌握的知識點:

??? ????示例十八

??? ????代碼分析

??? ????匯編解析

??? ????示例十九

??? ????代碼分析

??? ????匯編解析

什么是語句?在C語言中,語句大部分是由分號結尾的。

舉例

int a = 0;

int b = 1; int c = 2; int d = 3;

語句包括:賦值表達式語句、空語句、復合語句、函數表達式語句、控制語句等。

本章我們將要學習if語句、else if句和switch語句。

6.1.1 示例十八

if語句表達形式1

程序執行到if語句時,判斷表達式的值,如果結果為真(非0),則執行相應的語句。

if(表達式){

?????? statement

}

示例代碼十八

?????? ●第一步:分析需求,設計程序結構框架。

分析需求:判斷輸入的整數,是否能被2整除。

設計程序結構框架:分支結構(if語句形式1)if語句。

?????? ●第二步:數據定義,定義恰當的數據結構;

?????? int num;//定義一個int類型的整型局部變量。

?????? ●第三步:分析算法。

?????? 整數num除以2,如果余數為0,則可以被2整除。如果余數不為0,則不能被2整除。

?????? ●第四步:編寫偽代碼,即用我們自己的語言來編寫程序。

?????? int main(void) {

??? 定義一個int類型整型變量num;

??? 調用printf函數打印一個提示信息"請輸入一個整數:";

??? 調用scanf_s函數接收鍵盤輸入一個整數,并存入變量num;

??? if (num % 2) 如果條件為真(余數不為0)

??????? 調用printf函數輸出"您輸入的整數不能被2整除!";

??? system("pause");

??? return 0; ?????????????????????????????????????????????????????????????????????????????????????????????????? ??

}

圖6-1 示例十八流程圖

?????? ●第五步:畫流程圖,使用Visio、Excel或者其他繪圖工具繪制算法流程和邏輯關系圖;???? 【注】強烈建議讀者在編寫工程項目時,一定要寫偽代碼、畫流程圖,具體流程圖詳解見附錄D。 本書在后續章節中可能會由于節約篇幅的考慮,省略了部分流程。??????????

●第六步:編寫源程序,其實就是將我們的偽代碼翻譯成計算機語言;

/*

?? 判斷輸入的整數,是否能被2整除

*/

#include <stdio.h>

#include <stdlib.h>

int main(void) {

??? int num;

??? printf("請輸入一個整數:");

??? scanf_s("%d", &num);

??? if (num % 2)

??????? printf("您輸入的整數不能被2整除!\n");//單語句可以省略大括號

??? system("pause");

??? return 0;

}

輸出結果:

?????? 請輸入一個整數:3

您輸入的整數不能被2整除!

?????? ●第七步:調試程序,修復程序中可能出現的BUG;

參見反匯編代碼。

●第八步:優化代碼,嘗試更好的設計方案,效率更高的算法,邏輯更為清晰簡潔明了。

示例十九中我們將改用“if語句表達形式2(if/else結構)”。

6.1.2 代碼分析

示例十八由鍵盤輸入一個整數值存入變量num。然后采用num%2取模的算法作為if語句的條件,余數為0,條件為假,不會執行if語句塊內的printf語句。如果余數非零,條件為真,執行if語句塊內的printf語句。

?

總結

1.在C語言的語法中規定,大括號內的語句稱為語句塊,例如函數體、if語句塊、while語句塊,或者任意大括號內的語句塊。

2.如果語句塊內的語句為單語句,則可以省略大括號。如果大括號內的語句為復合語句,則不可以省略大括號。

3.C語言語句的縮進關系表示從屬關系,例如:

??? if (num % 2)

??????? printf("您輸入的整數不能被2整除!\n");//單語句可以省略大括號

printf語句的縮進表示該語句從屬于if語句塊。如果沒有省略大括號,則不存在任何疑義。

6.1.3 匯編解析

匯編代碼

;C標準庫頭文件和導入庫

include vcIO.inc

.data??????

num sdword? ?

.const????

szMsg1 db "請輸入一個整數:",0

szMsg2 db "%d",0

szMsg3 db "您輸入的整數不能被2整除!",0dh,0ah,0

.code?????

start:

?????? ;輸入整數num

?????? invoke printf,offset szMsg1

?????? invoke scanf,offset szMsg2,ADDR num

?????? ;

?????? mov eax,num

?????? mov ebx,2

?????? cdq? ?;被除數擴展到EDX:EAX

?????? idiv ebx

?????? .if edx

????????????? invoke printf,offset szMsg3

?????? .endif

?????? ;?????

?????? invoke _getch

?????? ret???????????????????????

end start

●輸出結果:

請輸入一個整數:3

您輸入的整數不能被2整除!

上述匯編代碼中,取模運算采用的是有符號數除法指令idiv。因為num為int類型的有符號整數,作為被除數需要使用cdq指令將其擴展為64位EDX:EAX,除數2存入ebx寄存器,然后使用idiv指令除以ebx,商保存在eax寄存器中,余數保存在edx寄存器中。接下來使用高級匯編偽指令.if,edx余數作為其條件表達式,如果edx不為0,則條件為真,執行下面的printf語句。

反匯編代碼

???int num;

??? printf("請輸入一個整數:");

002D1952? push??????? offset string "\xc7\xeb\xca\xe4\xc8\xeb\xd2\xbb\xb8\xf6\xd5\xfb\xca\xfd\xa3\xba" (02D7B30h)?

002D1957? call??????? _printf (02D104Bh)?

002D195C? add???????? esp,4?

??? scanf_s("%d", &num);

002D195F? lea???????? eax,[num]?

002D1962? push??????? eax?

002D1963? push??????? offset string "%d" (02D7B44h)?

??? scanf_s("%d", &num);

002D1968? call??????? _scanf_s (02D1154h)?

002D196D? add???????? esp,8?

??? if (num % 2)

002D1970? mov???????? eax,dword ptr [num]?

002D1973? and???????? eax,80000001h?

002D1978? jns???????? main+5Fh (02D197Fh)? ;符號位為0,最高位為0,即正整數時則跳轉

002D197A? dec???????? eax? ;為負整數時,最高位為1,先減1

002D197B? or????????? eax,0FFFFFFFEh? ;除最高位和最低位,其余各位置1

002D197E? inc???????? eax? ;最低位加1,如果最低位為1,則奇數+1為0,否則為偶數

002D197F? test??????? eax,eax? ;與運算,不保存結果,測試eax值是否為0

002D1981? je????????? main+70h (02D1990h)? ;如果eax為0則跳轉02D1990h地址處,否則為真

??? printf("您輸入的整數不能被2整除!\n");//單語句可以省略大括號

002D1983? push??????? offset string "\xc4\xfa\xca\xe4\xc8\xeb\xb5\xc4\xd5\xfb\xca\xfd\xb2\xbb\xc4\xdc\xb1\xbb2\xd5\xfb\xb3\xfd!\n" (02D7B48h)?

002D1988? call??????? _printf (02D104Bh)?

002D198D? add???????? esp,4?

??? system("pause");

002D1990? mov???????? esi,esp?

以上是C代碼的反匯編代碼,對比我們自己寫的匯編代碼,編譯器翻譯if(num%2)時有顯著不同。請讀者仔細閱讀注釋。這段反匯編代碼是通過判斷num為正整數還是負整數,是奇數還是偶數的方法,最終判斷是否可以被2整除。其中使用了兩個掩碼80000001h和0FFFFFFFEh。如果num的二進制數據位的最后一位為1,則為奇數,最后一位為0,則為偶數。

【注】不同的VS版本的反匯編代碼存在差異,但是功能和結果肯定沒有問題。

6.1.4 示例十九

if語句表達形式2

if語句是判斷表達式是否成立,當表達式成立時,則做相應的事情;當表達式不成立時,則做另一件事情。語法格式:

if (表達式)

? statement1

else

? statement2

解析:如果條件成立為真(不為0)時,則執行語句statement1;否則執行語句statsement2。

示例代碼十九

●第一步:分析需求,設計程序結構框架。

分析需求:判斷輸入的整數,是否能被2整除。

設計程序結構框架:分支結構(if語句形式2)if/else語句。

?????? ●第二步:數據定義,定義恰當的數據結構;

?????? int num;//定義一個int類型的整型局部變量。

?????? ●第三步:分析算法。

?????? 整數num除以2,如果余數為0,則可以被2整除。如果余數不為0,則不能被2整除。

?????? ●第四步:編寫偽代碼,即用我們自己的語言來編寫程序。

?????? int main(void) {

??? 定義一個int類型整型變量num;

??? 調用printf函數打印一個提示信息"請輸入一個整數:";

??? 調用scanf_s函數接收鍵盤輸入一個整數,并存入變量num;

??? if (num % 2) 如果條件為真(余數不為0)

??????? 調用printf函數輸出"您輸入的整數不能被2整除!";

??? else

??????? 調用printf函數輸出"您輸入的整數能被2整除!";

??? system("pause");

??? return 0;

}

?????? ●第五步:畫流程圖,使用Visio、Excel或者其他繪圖工具繪制算法流程和邏輯關系圖;?????

?????????????

????????????????????????????????????????圖6-2 示例十九流程圖

●第六步:編寫源程序,其實就是將我們的偽代碼翻譯成計算機語言;

/*

?? 判斷輸入的整數,是否能被2整除

*/

#include <stdio.h>

#include <stdlib.h>

int main(void) {

??? int num;

??? printf("請輸入一個整數:");

??? scanf_s("%d", &num);

??? if (num % 2)

??????? printf("您輸入的整數不能被2整除!\n");//單語句可以省略大括號

??? ??? else

??????? printf("您輸入的整數能被2整除!\n");//C語言中縮進表示從屬關系

??? system("pause");

??? return 0;

}

輸出結果:

測試1

請輸入一個整數:3

您輸入的整數不能被2整除!

測試2

請輸入一個整數:4

您輸入的整數能被2整除!

6.1.5 代碼分析

?????? 上述代碼,if語句的條件表達式(num % 2)如果為真,則執行if語句塊;如果條件為假,則執行else語句塊。同時輸出兩種情形,不存在任何遺留的情況。代碼邏輯更為清晰和完整,也更加人性化一些。

6.1.6 匯編解析

匯編代碼

?????? ;C標準庫頭文件和導入庫

include vcIO.inc

.data??????

num sdword? ?

.const????

szMsg1 db "請輸入一個整數:",0

szMsg2 db "%d",0

szMsg3 db "您輸入的整數不能被2整除!",0dh,0ah,0

szMsg4 db "您輸入的整數能被2整除!",0dh,0ah,0

.code?????

start:

?????? ;輸入整數num

?????? invoke printf,offset szMsg1

?????? invoke scanf,offset szMsg2,ADDR num

?????? ;

?????? mov eax,num

?????? mov ebx,2

?????? cdq??????????????? ;被除數擴展到EDX:EAX

?????? idiv ebx

?????? .if edx

????????????? invoke printf,offset szMsg3

?????? .else

????????????? invoke printf,offset szMsg4?

?????? .endif

?????? ;?????

?????? invoke _getch

?????? ret???????????????????????

end start

輸出結果:

測試1

請輸入一個整數:3

您輸入的整數不能被2整除!

測試2

請輸入一個整數:4

您輸入的整數能被2整除!

上述匯編代碼使用了高級匯編偽指令.if/.else語句,與C語言if/else語句完全相同。

反匯編代碼

??? int num;

??? printf("請輸入一個整數:");

00211952? push??????? offset string "\xc7\xeb\xca\xe4\xc8\xeb\xd2\xbb\xb8\xf6\xd5\xfb\xca\xfd\xa3\xba" (0217B30h)?

??? int num;

??? printf("請輸入一個整數:");

00211957? call??????? _printf (021104Bh)?

0021195C? add???????? esp,4?

??? scanf_s("%d", &num);

0021195F? lea ????????eax,[num]?

00211962? push??????? eax?

00211963? push??????? offset string "%d" (0217B44h)?

00211968? call??????? _scanf_s (0211154h)?

0021196D? add???????? esp,8?

??? if (num % 2)

00211970? mov???????? eax,dword ptr [num]?

00211973? and???????? eax,80000001h?

00211978? jns???????? main+5Fh (021197Fh)?

0021197A? dec???????? eax?

0021197B? or????????? eax,0FFFFFFFEh?

0021197E? inc???????? eax?

0021197F? test??????? eax,eax?

00211981? je????????? main+72h (0211992h);如果條件為假,即eax=0則跳轉0211992h地址處

??????? printf("您輸入的整數不能被2整除!\n");//單語句可以省略大括號;if語句塊

00211983? push??????? offset string "\xc4\xfa\xca\xe4\xc8\xeb\xb5\xc4\xd5\xfb\xca\xfd\xb2\xbb\xc4\xdc\xb1\xbb2\xd5\xfb\xb3\xfd!\n" (0217B48h)?

00211988? call??????? _printf (021104Bh)?

0021198D? add???????? esp,4?

00211990? jmp???????? main+7Fh (021199Fh)?

??? else

??????? printf("您輸入的整數能被2整除!\n");//C語言中縮進表示從屬關系;else語句塊

00211992? push??????? offset string ;"\xc4\xfa\xca\xe4\xc8\xeb\xb5\xc4\xd5\xfb\xca\xfd\xc4\xdc\xb1\xbb2\xd5\xfb\xb3\xfd!\n" (0217B68h)?

00211997? call??????? _printf (021104Bh)?

0021199C? add? ???????esp,4?

仔細閱讀上述反匯編代碼的注釋:

0021197F? test??????? eax,eax?

00211981? je????????? main+72h (0211992h);如果條件為假,即eax=0則跳轉0211992h地址處

if (num % 2)

?????? 如果條件為真,執行if語句塊

printf("您輸入的整數不能被2整除!\n");//單語句可以省略大括號;if語句塊

else

如果條件為假,執行else語句塊

??? printf("您輸入的整數能被2整除!\n");//C語言中縮進表示從屬關系;else語句塊

00211992? push??????? offset

練習

?????? 1、輸入一個整數,判斷是否可以被5整除。

?????? 2、輸入一個整數,判斷是否為奇數。

?????? 3、輸入學生的成績,判斷是否及格(大于等于60分及格)。

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

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

相關文章

基礎入門三大核心之HTML篇:WebP格式圖像全面解析 —— 起源、優勢、兼容性及在線壓縮方法

基礎入門三大核心之HTML篇&#xff1a;WebP格式圖像全面解析 —— 起源、優勢、兼容性及在線壓縮方法 歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以…

馮喜運:5.24黃金今日能否回調?日內國際黃金美原油操作策略

【黃金消息面分析】&#xff1a;在過去的半個世紀里&#xff0c;美國國債作為買入持有的投資手段&#xff0c;輕松超越了黃金。然而&#xff0c;如今債券作為終極避險資產的地位正面臨著前所未有的挑戰。傳統上&#xff0c;投資者將美國國債視為一種超安全的投資&#xff0c;因…

Java高級面試精粹:問題與解答集錦(二)

Java面試問題及答案 1. 什么是Java內存模型&#xff08;JMM&#xff09;&#xff1f;它的作用是什么&#xff1f; 答案&#xff1a; Java內存模型&#xff08;JMM&#xff09;定義了Java虛擬機&#xff08;JVM&#xff09;在計算機內存中的工作方式&#xff0c;包括程序計數器…

【源碼+文檔+講解】垃圾分類系統SSM

目 錄 摘 要 前 言 第1章 概述 1.1 研究背景 1.2 研究目的 1.3 研究內容 4 第二章 開發技術介紹 5 2.1Java技術 6 2.2 Mysql數據庫 6 2.3 B/S結構 7 2.4 SSM框架 8 第三章 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 經濟可行性 3.1.3 操作可行性 3.2 系統…

Word讓標題3現形

1 2這個玩意兒是管理樣式&#xff08;你找得我好慘啊啊啊啊&#xff09; 3點推薦

MINLP(Mixed-Integer Nonlinear Programming,混合整數非線性規劃)

MINLP&#xff08;Mixed-Integer Nonlinear Programming&#xff0c;混合整數非線性規劃&#xff09;問題是一類包含整數變量和連續變量的非線性優化問題。它結合了整數規劃&#xff08;IP&#xff09;和非線性規劃&#xff08;NLP&#xff09;的特征&#xff0c;因而比單純的整…

基于Vue的圖片文件上傳與壓縮組件的設計與實現

摘要 隨著前端技術的發展&#xff0c;系統開發的復雜度不斷提升&#xff0c;傳統開發方式將整個系統做成整塊應用&#xff0c;導致修改和維護成本高昂。組件化開發作為一種解決方案&#xff0c;能夠實現單獨開發、單獨維護&#xff0c;并能靈活組合組件&#xff0c;從而提升開…

JS-02對象的基本使用

目錄 1 創建一個對象 2 對象屬性操作 2.1 獲取屬性 第一種方式&#xff1a;.語法 第二種方式&#xff1a;[]語法 2種方式的差異 2.2 設置屬性 2.3 刪除屬性 3 案例 1 創建一個對象 創建一個對象&#xff0c;包含了兩個屬性&#xff0c;兩個方法&#xff1a; var studen…

17. FastDFS面試題匯總

Java全棧面試題匯總目錄-CSDN博客 1. 什么是FastDFS&#xff1f; FastDFS是用C語言編寫的一款開源的分布式文件系統。FastDFS為互聯網量身定制&#xff0c;充分考慮了冗余備份、負載均衡、線性擴容等機制&#xff0c;并注重高可用、高性能等指標&#xff0c;使用FastDFS很容易…

什么是線程安全?如何保證線程安全?

目錄 一、引入線程安全 &#x1f447; 二、 線程安全&#x1f447; 1、線程安全概念 &#x1f50d; 2、線程不安全的原因 &#x1f50d; 搶占式執行&#xff08;罪魁禍首&#xff0c;萬惡之源&#xff09;導致了線程之間的調度是“隨機的” 多個線程修改同一個變量 修改…

ESP8266實現獲取天氣情況

利用太極創客提供的ESP8266 心知天氣庫獲取天氣情況并顯示 心知天氣庫地址&#xff1a; ESP8266-心知天氣: 本庫主要功能為使用ESP8266物聯網開發板通過心知天氣 API 獲取天氣等信息。 clone到本地: git clone https://gitee.com/taijichuangke/ESP8266-Seniverse.git 安裝該…

跟著Kimi學習結構化提示詞:19套內置提示詞都在這里了!

大家好&#xff0c;我是木易&#xff0c;一個持續關注AI領域的互聯網技術產品經理&#xff0c;國內Top2本科&#xff0c;美國Top10 CS研究生&#xff0c;MBA。我堅信AI是普通人變強的“外掛”&#xff0c;所以創建了“AI信息Gap”這個公眾號&#xff0c;專注于分享AI全維度知識…

C++ Primer Plus第十六章復習題

1、考慮下面的 類聲明 class RQ1 { private:char * st; public:RQ1(){st new char [1]; strcpy(st,"");}RQ1(const RQ1 & rq){st new char [strlen(rq.st)1]; strcpy(st,rq.st);}~RQ1(){delete [] st};RQ & OPERATOR (cosnt RQ &rq); }; 將它轉換為使…

Java技術深度解析:高級面試問題與精粹答案(一)

Java 面試問題及答案 問題1&#xff1a;請解釋什么是Java虛擬機&#xff08;JVM&#xff09;以及它的作用是什么&#xff1f; 答案1&#xff1a; Java虛擬機&#xff08;JVM&#xff09;是一個可以執行Java字節碼的虛擬計算機。它是一個抽象的計算機&#xff0c;能夠通過軟件…

【筆記】樹(Tree)

一、樹的基本概念 1、樹的簡介 之前我們都是在談論一對一的線性數據結構&#xff0c;可現實中也有很多一對多的情況需要處理&#xff0c;所以我們就需要一種能實現一對多的數據結構--“樹”。 2、樹的定義 樹&#xff08;Tree&#xff09;是一種非線性的數據結構&#xff0…

作物水文模型AquaCrop---用于評估作物對水的需求、灌溉計劃和管理策略

AquaCrop是由世界糧食及農業組織&#xff08;FAO&#xff09;開發的一個先進模型&#xff0c;旨在研究和優化農作物的水分生產效率。這個模型在全球范圍內被廣泛應用于農業水管理&#xff0c;特別是在制定農作物灌溉計劃和應對水資源限制方面顯示出其強大的實用性。AquaCrop 不…

如何在海豚調度器自動監測報表是否跑出數據

在數據倉庫報表開發時,有的報表依賴的表多,雖然在海豚調度任務上是跑成功,但實際上沒有跑出數據來。開發人員負責的任務和表越來越多,每天去手動檢查費時費力,不去理睬默認是成功的,等到業務或產品發現問題時,又給人一種不專業不負責的感覺。 比較好的方式是用代碼進行自…

Python知識點復習

文章目錄 Input & OutputVariables & Data typesPython字符串重復&#xff08;字符串乘法&#xff09;字符串和數字連接在一起print時&#xff0c;要強制類型轉換int為str用input()得到的用戶輸入&#xff0c;是str類型&#xff0c;如果要以int形式計算的話&#xff0c…

SkyWalking 介紹及部署

1、SkyWalking簡介2、SkyWalking的搭建 2.1 部署Elasticsearch2.2 部署SkyWalking-Server2.3 部署SkyWalking-UI3、應用接入 3.1 jar包部署方式3.2 dockerfile方式3.3 DockerFile示例4、SkyWalking UI 界面說明 4.1 儀表盤 4.1.1 APM &#xff08;1&#xff09;全局維度&#x…

UBUNTU22.04無法安裝nvidia-driver-550 依賴于 nvidia-dkms-550 (<= 550.54.15-1)

類似的報錯信息&#xff0c;就是卡在了nvidia-dkms-550無法安裝 Loading new nvidia-550.40.07 DKMS files… Building for 6.5.0-15-generic Building for architecture x86_64 Building initial module for 6.5.0-15-generic ERROR: Cannot create report: [Errno 17] File e…