- UID
- 32468
注册时间2007-6-1
阅读权限10
最后登录1970-1-1
周游历练
该用户从未签到
|
本贴引自第八阁论坛:http://bbs.chinadbg.cn/forum-7-1.html
还有飞翔技术论坛:http://www.powk.net/bbs/forumdisplay.php?fid=4&page=1
1到100奇数和或偶数和,思路:用循环从1到100,用求余“%”或取整“floor”判断是奇偶。
非常高兴看到大家的支持,你们发的程序,请在第二天加上注释。(主要是有错的程序)
这里主要让大家知道基础的变量初始化,条件判断,循环,和打印程序,还有基础的语法,还有一个任务找错!!。我写的是C代码,其它代码各个朋友自己理解一下,也可以PM发贴人。也可以发提问
以下是C代码,求[1到100的奇数或偶数和]
我写的是偶数,这个程序也有错啊!!!- #include "stdio.h"
- #include <math.h>/*这里的两个头文件引用的方法不同,主要是区别在程序在编译是的寻找的范围*/
- main/*这里少了一个()*/
- {
- int i,j=0;/*这里要改一下:int j=0; float i=0;*/
- for( i=1; i<=100;i++)
- {
- if (i/2==floor(i/2))/*floor是取整函数,包函在math.h头文件中*/
- {
- j+=i;
- }
- }
- printf("%d\n",j);
- getch();
- }
复制代码 java 代码 求1-100的偶数和- public static void main(String[] args){
- int sum = 0;
- for(int i=2;i<=100;i++){
- if(i%2==0)
- sum = sum+i;
- }
- System.out.println("The sum is "+sum);
- }
复制代码 VC滴:这里C的别一种写法可以用%求余来做奇偶断定- #include "stdio.h"
- void main()
- {
- unsigned short sum_odd =0;
- unsigned short sum_even = 0;
- for (int i = 1; i <= 100; i++)//从1--100,呵呵,注释够详细了吧
- {
- if (0 == i%2)//判断是否偶数
- {
- sum_even += i;//偶数累加
- }
- else
- sum_odd += i;//奇数累加
- }
- printf("The sum of even number is %d\n", sum_even);
- printf("The sum of odd number is %d\n", sum_odd);
- }
复制代码 DELPHI的写法,也看到了别一个循环的用法,在其它语言中一样可以用。- procedure TForm1.Button1Click(Sender: TObject);
- var
- i,j:Integer;
- begin
- j:=0;
- i:=0;
- while i<100 do
- begin
- i:=i+1;
- if i mod 2=0 then continue; // x mod Y 结果为X除于Y的余数; continue 直接执行下一个循环
- j:=i+j;
- end;
- Button1.Caption:=IntToStr(j);//用按键名显示结果
- end;
复制代码 我也来凑凑,
下面是VB写的- Dim ji As Integer
- Dim ou As Integer
- Dim i As Integer
- ji = 0
- ou = 0
- For i = 1 To 100 '这是FOR语句循环
- If i Mod 2 = 0 Then ’判断是否奇偶
- ji = ji + i
- Else
- ou = ou + i
- End If
- Next
- Print ji ’输出奇数
- Print ou
复制代码- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; Sample code for < Win32ASM Programming >
- ; by
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; Sum.asm
- ; 求1+2+3……100中偶数和奇数的和
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 使用 nmake 或下列命令进行编译和链接:
- ; ml /c /coff Sum.asm
- ; rc Sum.rc
- ; Link /subsystem:windows Sum.obj Sum.res
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .386
- .model flat, stdcall
- option casemap :none
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; Include 文件定义
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- include windows.inc
- include user32.inc
- includelib user32.lib
- include kernel32.inc
- includelib kernel32.lib
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 数据段
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .data
- szBuffer byte 1024 dup (?)
- .const
- fmt db "偶数和是:%d 奇数和是:%d", 0
- szCaption db "求1+2+3……100中偶数和奇数的和", 0
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 代码段
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .code
- start:
-
- mov eax, 0
- mov ebx, 0
- mov ecx, 1
-
- LP: test ecx, 01
- jne L_ODD
-
- add eax, ecx
-
- jmp L_NEXT
-
- L_ODD: add ebx, ecx
- L_NEXT: inc ecx
- cmp ecx, 100
- jle LP
-
- invoke wsprintf, addr szBuffer, addr fmt, eax, ebx
- invoke MessageBox,NULL,offset szBuffer,offset szCaption,MB_OK
- invoke ExitProcess,NULL
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- end start
复制代码 我来个汇编的~无错的~上面有人发过了,我改进一下,主要是.if .while 这些Masm伪指令的使用,以及Masm32里macros.asm里提供的几个宏的使用~~~- .586
- .model flat,stdcall
- option casemap:none
- include windows.inc
- include user32.inc
- includelib user32.lib
- include D:\Program Files\RadASM\Masm32\macros\macros.asm ;这个是我电脑里的路径,自己改改~~macros.asm里提供了很多方便的宏~推荐自己打开来看一下
- .data?
-
- szMsg db 56 dup(?)
-
- .code
- Main proc
-
- xor eax,eax
- xor ebx,ebx
- mov ecx,1
- .while ecx <= 100
- .if ecx & 1
- add eax,ecx
- .else
- add ebx,ecx
- .endif
- inc ecx
- .endw
- invoke wsprintf,offset szMsg, SADD('奇数和:%d,偶数和:%d'), eax, ebx
- invoke MessageBox,NULL, offset szMsg, offset szMsg, MB_OK or MB_ICONINFORMATION
- ret
- Main endp
- end Main
复制代码 既然是逆向小组,我们怎么也得来点反汇编了吧,下面是反汇编HH写的汇编语言的代码- 00401000 mov eax, 0
- 00401005 mov ebx, 0
- 0040100A mov ecx, 1
- 0040100F test ecx, 1 ;判断ECX中的数是否偶
- 00401015 jnz short 0040101B
- 00401017 add eax, ecx ;偶数相加
- 00401019 jmp short 0040101D
- 0040101B add ebx, ecx ;奇数相加
- 0040101D inc ecx
- 0040101E cmp ecx, 64 ;与64H=100D比较判断是否到了最大范围
- 00401021 jle short 0040100F
- 00401023 push ebx ; <%d> 压入wsprintfA的参数1(偶数和)
- 00401024 push eax ; <%d> 压入wsprintfA的参数2(奇数和)
- 00401025 push 00402014 ; Format = "偶数和是:%d 奇数和是:%d"
- 0040102A push 00403000 ; s = 2131.00403000
- 0040102F call <jmp.&user32.wsprintfA> ; wsprintfA
- 00401034 add esp, 10
- 00401037 push 0 ; Style = MB_OK|MB_APPLMODAL
- 00401039 push 00402030 ; Title = "求1+2+3",A1,"",AD,"",A1,"",AD,"100中偶数和奇数的和"
- 0040103E push 00403000 ; Text = ""
- 00401043 push 0 ; hOwner = NULL
- 00401045 call <jmp.&user32.MessageBoxA> ; MessageBoxA
- 0040104A push 0 ; ExitCode = 0
- 0040104C call <jmp.&kernel32.ExitProcess> ; ExitProcess
- 00401051 int3
- 00401052 jmp dword ptr [<&user32.wsprintfA>] ; user32.wsprintfA
- 00401058 jmp dword ptr [<&user32.MessageBoxA>>; user32.MessageBoxA
- 0040105E jmp dword ptr [<&kernel32.ExitProces>; kernel32.ExitProcess
复制代码原帖由 21st[P.Y.G] 于 2007-8-12 00:13 发表
我也继续~
language: c
#include
int main()
{
printf("偶数和:%d\n",(2+100)*((100-2)/2+1)/2);
printf("奇数和:%d\n",(1+99)*((99-1)/2+1)/2);
return 0;
}
1 高斯小学时候发明的公式:等差数列和=(首项+末项)*项数/2
2 stdio.h是c的。你c++用它是多此一举。
3 iOStream.h是老库,不需要标准名字空间。
4 void main(),不管是c还是c++,这种写法都是绝对的错误。 main函数必须返回int |
|