約定大於編程
1. C語言編程驗證「哥德巴赫猜想」,任何大於2的偶數都是兩個素數之和。
#include<stdio.h>
intisPrime(int);
intmain(){
intn;
for(n=4;n<=100;n+=2){
inti;
for(i=2;i<=n/2;i++)
if(isPrime(i)&&isPrime(n-i)){
printf("%d=%d+%d
",n,i,n-i);
break;return0;}
intisPrime(intn){inti;if(n<2)return0;if(n==2)
return1;
else
for(i=2;i*i<=n;i++)
if(n%i==0)
return0;
return1;
2. 約定優於配置是什麼意思
約定優於配置(convention over configuration),也稱作按約定編程,是一種軟體設計範式,旨在減少軟體開發人員需做決定的數量,獲得簡單的好處,而又不失靈活性。
本質是說,開發人員僅需規定應用中不符約定的部分。例如,如果模型中有個名為Sale的類,那麼資料庫中對應的表就會默認命名為sales。只有在偏離這一約定時,例如將該表命名為"procts_sold",才需寫有關這個名字的配置。
3. 匯編語言編程
; 本程序在MASMPlus 1.2集成環境下通過編譯,經過調試,運行正確。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:輸出一個字元
; 入口:dl=要顯示的字元
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr endp
; -------------------------------------
; 功能:輸出回車換行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -------------------------------------
; 功能:取游標位置
; 入口:無
; 出口:DH=行號,DL=列號
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -------------------------------------
; 功能:置游標位置
; 入口:Cursor_Row=行坐標; Cursor_Col: 列坐標)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
; -------------------------------------
; 功能:鍵盤輸入一個指定位數的十進制數字,將其轉換成二進制數並保存在指定的內存單元。
; 由於限定最大數據類型為字,所以,數字位數最多:5,最大無符號數:65536
; 約定:直接回車,視為數字0
; 入口:@@Digits=數字位數;di=保存輸入的數字首地址
; @@Type_Data=保存的數據類型,B=位元組類型,W=字類型。
; 出口:轉換後的二進制數保存在di所指的單元
Input_Digit Proc Near
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
push dx
push cx
push bx
push di
lea di,@@Save_Tmp
push di
cld
mov cl,@@Digits
xor ch,ch
push cx
@@Input: call GetCursor ;取游標位置
mov ah,1 ;從鍵盤接受一個字元
int 21h
cmp al,CR ;若鍵入的是回車,已經鍵入的數字不足N位
jz @@ASC_Dec ;轉去處理已經鍵入的數字
cmp al,KBBack
jz @@KB_Back ;若是回空鍵,重新輸入
cmp al,'0'
jb @@KBBack ;若低於數字'0',重新輸入
cmp al,'9'
ja @@KBBack ;若低於數字'9',重新輸入
jmp @@Save_Dig
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: call SetCursor ;置游標位置
jmp @@Input
@@Save_Dig: and al,0fh ;轉換成二進制數
stosb ;保存
loop @@Input ;接受下一個數字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;實際輸入的數字位數
xor bp,bp
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回車,沒有輸入任何數字,按輸入'0'處理
dec cx ;實際輸入的數字位數減1,准備把輸入的這一串數字轉換成二進制數
jcxz @@One_Digit ;若輸入的數字只有一位,轉去直接保存這個二進制數
mov bx,10
@@Mul_Ten: lodsb
cbw
add ax,bp
mul bx
mov bp,ax
loop @@Mul_Ten
@@One_Digit: lodsb
cbw
add ax,bp
@@Save_Ret: pop di
cmp @@Type_Data,'B' ;位元組類型?
jz $+5
stosw
jmp $+3
stosb
pop bx
pop cx
pop dx
ret
@@Digits db ? ;十進制數字位數
@@Type_Data db 'B' ;保存的數據類型。B=位元組類型,W=字類型
@@Save_Tmp db 16 p(?)
Input_Digit EndP
; -------------------------------------
; 功能:統計90以上,80~89,70~79,60~69,60以下學生個數
; 入口參數:AX=分數
Statics_Score Proc Near
push di
push dx
push ax
mov dl,10 ;除數
div dl ; 除10
cmp al,5 ; >5,及格
ja $+4
mov al,5 ; <=5,不及格
sub al,5 ; 減5,分數段計數地址偏移量
cbw ;
push ax
pop di
inc Score_Tab[di] ; 計數
pop ax
pop dx
pop di
ret
Statics_Score EndP
; -------------------------------------
; 功能:把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
; 入口:AX=二進制數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov BYTE ptr [di],'$'
dec di
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 p(?)
Dec_ASCII EndP
; -------------------------------------
; 功能:把AL中的二進制無符號數作為小數轉換成顯式的十進制ASCII碼,
; 並送顯示屏顯示,未考慮四捨五入
; 入口:AH=二進制數,BH=除數,CX=保留小數位數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_Frac Proc Near
push ax
mov dl,'.'
call Output_Chr ;顯示一個小數點
pop ax
mov bl,10 ;乘數
@@Dec_Frac: mov al,ah ;余數不為0,處理小數部分
mul bl ;余數乘10,繼續做除法
div bh ;除以除數,取商數作為結果的一位小數
or al,30h
mov dl,al
call Output_Chr ;顯示一位小數
loop @@Dec_Frac
ret
Dec_Frac EndP
; -------------------------------------
ID_Length equ 6 ;學號長度
Info_Students Struc ; 學生信息結構類型
ID_Student db ID_Length p(?) ;學號
Score_Student db ? ;成績
Info_Students EndS
; -------------------------------------
Students equ 20 ;學生人數
Prompt_Str db 'Student ID',2 p(20h) ;學號標題字元串
db 'Score',CR,LF ;成績標題字元串
db 10 p('-'),2 p(20h)
db 5 p('-'),CR,LF,'$'
Score_Tab db 6 p(0) ; 各分數段計數
prompt_Res db '00---59: $'
prompt_Ave db CR,LF,'Average: $' ;提示顯示平均分
Buffer_Data db ?,?,ID_Length+2 p(?) ;學號輸入緩沖區
Press_Key db CR,LF,CR,LF,'Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
mov @@Digits,3 ;十進制數字位數
mov @@Type_Data,'B' ;保存的數據類型。B=位元組類型,W=字類型
; -------------------------------------
; 顯示學號、成績標題,提示輸入學生信息
Output Prompt_Str
; -------------------------------------
; 輸入學號、成績
lea di,Score_Table ;學號、成績存放地址
mov cx,Students ;學生人數
cld
Input_Info: push cx
call GetCursor ;取游標位置
push di
lea di,Buffer_Data[2]
mov cx,(ID_Length+2)/2
mov ax,2020h ;填充空格
rep stosw
pop di
mov Buffer_Data,ID_Length+1 ;允許輸入的最多字元數
lea dx,Buffer_Data ;學號輸入緩沖區地址
mov ah,0ah
int 21h
lea si,Buffer_Data[2]
mov cx,ID_Length ;學號字元數
rep movsb ;寫入學生信息緩沖區
add Cursor_Col,12
call SetCursor ;置游標位置
call Input_Digit ;輸入成績
call Output_CTLF ;輸出一個回車、換行
pop cx
loop Input_Info ;輸入下一名學生信息
; -------------------------------------
; 建立學生信息鏈表
mov cx,Students ;學生人數
mov si,di ;保存鏈表地址
lea ax,Score_Table ;學生信息起始地址
@@L1: stosw ;保存學生信息地址
add ax,type Info_Students ;每名學生信息所佔內存容量
loop @@L1
; -------------------------------------
; 用冒泡排序法按成績降序排序
mov cx,Students ;學生人數
push si ;入棧保存鏈表地址
push cx ;保存學生人數
dec cx ;准備用冒泡排序法排序
@@Sorting: push cx ;入棧保存外循環次數
push si ;入棧保存數組地址
@@Compare: push si
pop di ;當前數組元素地址賦給目的變址寄存器,以備交換之用
lodsw ;將當前學生信息地址讀入AX
mov bx,ax
mov al,[bx.Score_Student] ;將當前學生成績讀入AL
mov bx,[si] ;相鄰的下一個學生信息地址
cmp al,[bx.Score_Student] ;當前學生成績與相鄰的下一個學生成績相比較
jae @@NextOne ;若大於或等於,不作數據交換,處理下一個數組元素
mov ax,[di] ;若小於,讀入當前學生信息鏈表節點
xchg ax,[si] ;交換鏈表元素
mov [di],ax ;保存數值較大者節點地址
@@NextOne: loop @@Compare ;處理下一個數組元素
pop si ;數組地址出棧
pop cx ;外循環次數出棧
loop @@Sorting ;下一趟比較
call Output_CTLF
; -----------------------------------------
; 按成績降序顯示所有學生信息
Output Prompt_Str ;顯示學生信息標題
pop cx ;彈出學生人數
pop si ;彈出鏈表地址
xor bx,bx ;總成績初值
@@List_Info: push cx ;保存學生人數
call GetCursor ;取游標位置
lodsw ;讀入鏈表的一個節點
push si ;入棧保存鏈表地址
mov si,ax
push si ;入棧保存學生信息地址
lea si,[si.ID_Student] ;學號地址
mov cx,ID_Length ;學號字元串長度
@@Dsip_ID: lodsb ;讀入一個字元
cmp al,0dh ;回車符?
jz @@L2 ;是,學號顯示結束
mov dl,al
call Output_Chr ;顯示一個字元
loop @@Dsip_ID ;下一個字元
@@L2: add Cursor_Col,12
call SetCursor ;置游標位置
pop si ;彈出學生信息地址
lea si,[si.Score_Student] ;成績地址
lodsb ;讀入成績
xor ah,ah
add bx,ax ;累加總成績
call Statics_Score ;統計各分數段人數
call Dec_ASCII ;把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
call Output_CTLF
pop si ;彈出鏈表地址
pop cx ;彈出學生人數
loop @@List_Info ;下一個節點(學生信息)
mov al,Score_Tab[5] ;取100分人數
add Score_Tab[4],al ;加到90-100分數段
; -------------------------------------
push bx ;入棧保存總分
call Output_CTLF
call Output_CTLF
mov bl,59h
mov cx,5
lea si,Score_Tab ;各分數段計數數組首地址
lea dx,prompt_Res ; 統計結果字元串地址
List_Res: mov ah,9 ;顯示分數段提示信息
int 21h
lodsb ;讀入計數值
xor ah,ah
call Dec_ASCII ; 顯示統計結果
call Output_CTLF ;輸出一個回車、換行
mov al,bl
inc al
daa
mov bl,al
push cx
mov cl,4
xor ah,ah
shl ax,cl
shr al,cl
or ax,3030h
xchg ah,al
mov WORD ptr Prompt_Res,ax
mov al,bl
add al,9
mov bl,al
xor ah,ah
shl ax,cl
shr al,cl
or ax,3030h
xchg ah,al
mov WORD ptr Prompt_Res[5],ax
pop cx
loop List_Res
; -------------------------------------
; 計算並顯示平均分
call Output_CTLF
call Output_CTLF
Output prompt_Ave ;提示顯示平均分
pop ax ;總分出棧
mov bx,Students ;學生人數
div bl ;平均分取整數部分
mov bh,ah ;保存余數
xor ah,ah
call Dec_ASCII ;顯示平均分
mov ah,bh ;余數
mov bh,bl ;除數
mov cx,2 ;保留小數位數
call Dec_Frac ;把AL中的二進制無符號數作為小數轉換成顯式的十進制ASCII碼
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意鍵結束程序
mov ah,1
int 21h
mov ah,4ch ;結束程序
int 21h
Score_Table: ;學生成績存儲區
Code ENDS
END Start ;編譯到此結束
4. 使用springmvc怎麼配置
1、清晰的角色劃分:前端控制器(DispatcherServlet)、請求到處理器映射
(HandlerMapping)、處理器適配器(HandlerAdapter)、視圖解析器(ViewResolver)、處理器或頁面控制器
(Controller)、驗證器( Validator)、命令對象(Command 請求參數綁定到的對象就叫命令對象)、表單對象(Form
Object 提供給表單展示和提交到的對象就叫表單對象)。
2、分工明確,而且擴展點相當靈活,可以很容易擴展,雖然幾乎不需要;
3、由於命令對象就是一個POJO,無需繼承框架特定API,可以使用命令對象直接作為業務對象;
4、和Spring 其他框架無縫集成,是其它Web框架所不具備的;
5、可適配,通過HandlerAdapter可以支持任意的類作為處理器;
6、可定製性,HandlerMapping、ViewResolver等能夠非常簡單的定製;
7、功能強大的數據驗證、格式化、綁定機制;
8、利用Spring提供的Mock對象能夠非常簡單的進行Web層單元測試;
9、本地化、主題的解析的支持,使我們更容易進行國際化和主題的切換。
10、強大的JSP標簽庫,使JSP編寫更容易。
………………還有比如RESTful風格的支持、簡單的文件上傳、約定大於配置的契約式編程支持、基於註解的零配置支持等等。
5. C語言編程
一,輸入一個非負數,計算以這個數為半徑的圓周長和面積。
#include
void
main()
{
const
float
PI=3.14f;
//定義常量PI=3.14後加f表示是float類型的
float
r=0,l,s;//定義成float表示半徑,面積,周長可為小數
do{
printf("請輸入一個非負數的圓的半徑值:");
scanf("%f",&r);
}while(r<0);
//do
...
while();表示控制用戶輸入的要是個非負數,如果是負數就讓重新輸入,不用循環直接輸入也可以,這樣就省略了輸入數據的驗證了
l=2*PI*r;
s=PI*r*r;
printf("半徑為%-8.3f的圓的周長為%-8.3f,面積為%-8.3f!\n",r,l,s);
//%-8.3f:
(-)表示左對齊,(8)表示數據總長度為8位,(.3)表示小數保留3位
}
二,輸入任意大小的3個整數,判斷其中是否有兩個奇數一個偶數。若是則輸出YES,不是則輸出NOT(要求用條件表達式進行判斷,不使用if語句)。
條件表達式:表達式1?表達式2:表達式3
功能:如果表達式的結果為真,即成立的意思,就執行表達式1,如果為假,就執行表達式3
#include
void
main()
{
int
num[3];//大小為3的整型數組用來存三個整數
int
check=0;//定義一個輔助變數存儲偶數的個數
int
i;
for(i=0;i<3;i++)//循環,次數為3,用來輸入三個整數
{
printf("請輸入第%d個整數:",i+1);
scanf("%d",&num[i]);
num[i]%2==0?check++:check;//條件表達式
}
check==1?printf("YES\n"):printf("NO\n");
}
//可能你還學過數組和循環,給你改一下,但是最好學會用循環和數組,很重要
#include
void
main()
{
int
num1,num2,num3;
int
check=0;
int
i;
printf("請輸入第1個整數:");
scanf("%d",&num1);
num1%2==0?check++:check;
printf("請輸入第2個整數:");
scanf("%d",&num2);
num2%2==0?check++:check;
printf("請輸入第3個整數:");
scanf("%d",&num3);
num3%2==0?check++:check;
check==1?printf("YES\n"):printf("NO\n");
}
三,輸入三角形的邊長,求三角形面積(面積=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2).
#include
#include//數學函數sqrt();
void
main()
{
float
a,b,c;
float
area;
float
s;
printf("請輸入第1條三角形的邊長:");
scanf("%f",&a);
printf("請輸入第2條三角形的邊長:");
scanf("%f",&b);
printf("請輸入第3條三角形的邊長:");
scanf("%f",&c);
if(a+b>c
&&
a+c>b
&&
b+c>a)//進行判斷,三角形任意兩邊的和大於第三邊,&&表示同時滿足
{
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形的面積為%-8.3f",area);
}
else
{
printf("您輸入的三條邊的長度,不能都成一個三角形!");
}
}
6. 「約定優於配置」是什麼意思
約定優於配置,也稱作按約定編程是一種軟體設計範式。
7. 怎樣把java編程語言更加系統的學好
兩個方面來講
關於學習方法方面
關於學習的教程方面
學習方法
1 「溫故知新,三省吾身」
雖然古人雲,書讀百遍其義自見,但不斷重復的閱讀書籍,敲出一樣的「Hello World」,還不如有意識地總結回顧看過的書,學過的知識。 只需要每天話很碎片的一點時間總結並作出調整。今天都學到了什麼?今天自己有進步一點點嗎?
2 「實踐出真知、勤學苦練,從失敗中總結並學習」
看技術書籍要多寫書中的代碼,在初學階段哪怕對著書本敲也沒有什麼問題。認真完成書中留的習題,在自己沒有盡最大努力的情況下面不要去看答案。 不要怕犯錯,每一次犯錯都是自己進步的機會。
3「多總結問題的解決方案,多寫可復用的代碼,拒絕復制粘貼」
每天把工作中遇到問題的解決方案總結一下,想想為什麼要這么做,是什麼導致了這個BUG,導致BUG的根本原因是什麼。 是自己的邏輯混亂,粗心大意,還是程序框架太復雜?做需求的時候,要盡量避免復制粘貼,不要讓代碼裡面有重復代碼。
4、「對於自己想要學習的內容,制訂一下計劃,有節奏地學習」
即便是學霸也會有感覺學習不夠高效的時候。所謂計劃趕不上變化,經常會由於一些突發情況把原本的學習計劃打亂,導致學習效果打折扣。 因為學習一個東西怕的就是三天打漁,如果能夠持續地學習一個東西,我可以把它學習地很好。
5「條條大道通羅馬,嘗試使用不同的編程來解決一個問題」
在遇到一個沒有顯而易見解決方案的問題時,你可能費了好大功夫想出一個方案,但是千萬要記得,該方案不一定是最優的,而且很大可能還存在一個更佳的方法。而這個方法只需要你退後一步,換個思路,或者與同事討論一下就可以得出。 另外,習慣了面向對象,何不嘗嘗函數式編程?每年學習一門新的不同範式的編程語言,可以極大地開拓你的眼界,給你一些不一樣的解題思路。
6「學習有度、勞逸結合」
參加體育鍛煉,去戶外走走,運動能夠增強人的記憶力,並且有時候還能產生靈感。想要成為大神,身體好是前提條件。
7「向別人解釋你的知識,多與人討論」
多寫博客,多分享自己的所學所思,這些對於學習者自身也是非常有益的。通過用別人能夠理解的語言來解釋你學到的東西, 本身就要求你對該知識充分理解。
8「保持學習的專注」
很多知識沒有足夠的專注力和足夠多的時間是很難學好的,保持學習的專注尤其重要。 因為人的大腦在專注模式下面,神經細胞更活躍,你學的東西更容易從短期記憶變成中長期記憶。 而且在高度專注下面,你的解決問題的能力也會提高,原本看起來復雜的東西,在專注面前說不定就不是事了。
9「揚長補短」
發現並找到自己的不足相對來說是比較容易的,但是要補齊短板就非常不易了。 因為人總是有畏難思想的,拖延症是怎麼來的,就是你的大腦出於本能去做一些讓自己分泌更多多巴胺的事情。 如果自己英語不好,就要下決心把英語攻克。如果自己數學不行,就要下死力氣掌握數學。 補齊短板就像修真小說里要飛升一樣,做好萬全准備渡劫,才能得到升仙。
10「要學會鼓勵自己」
為什麼游戲可以讓你上癮,因為它有反饋,有獎勵機制。 學習java是非常枯燥的,如果有了這個獎勵機制,也許自己就更容易堅持了呢。
學習從來就不是一件容易的事,只有養成一些好的學習習慣才能讓我們事半功倍,也會增加一些堅持的動力!
關於學習教程
上面說了那麼多學習方法的介紹,但如果沒有一個好的學習教程,即便再努力也學不到什麼有用的技術,如果沒有完整的學習路線,便猶如無頭蒼蠅一般漫無目的。
學習路線:
1.javaSE
此路線配套教程非常適合零基礎的學員觀看,本套Java教程中講解了Java開發環境搭建、Java基礎語法、Java面向對象。每一個知識點都講解的非常細膩,由淺入深。
![](http://www.ultimate-communications.com/images/loading.jpg)
這套JavaSE的視頻教程呢是今年全新的JavaSE301集全套教程,包含的知識點可謂是非常多的,就先列幾個亮眼的知識點。
1:單項鏈表、雙向鏈表、哈希表/散列表和二叉數 數據結構的講解。
2:講集合時先從數組擴容講起,過度到集合,確實不錯,深入淺出比較容易理解。
3:String創建幾個對象,這個可以說全網最牛,不過例子舉的有點猥瑣,總是講小哥哥與小姐姐的故事。
4: 源碼分析分析講的特別到位,尤其是HashMap的工作原理和源碼分析,真正的把jdk源碼翻了一遍,要是拿著這個去面試絕對是秒殺級神器。
5:使用多線程模擬用戶去ATM取錢講的也非常不錯,後續還提了一個小Timer定時任務類相當全面。
6:使用反射創建對象,調用方法,訪問欄位的值講的也相當的詳細,尤其IO+Properties+Reflect的綜合案例對後期理解jdbc相當有幫助。
原文:https://www.hu.com/question