约定大于编程
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