作用:编辑本段回目录
在给定的范围内求出符合设定条件的记录个数。
算法基本思想:编辑本段回目录
用一个条件语句判断当前记录是否符合给定条件,符合则统计个数加一。用循环实现对所有记录的操作。
举例说明:编辑本段回目录
例一、从键盘敲进任意个(少于255个)字符,然后求出其中某一个字母的个数(如大写字母A)。
分析:用一个字符串变量来接受从键盘输入的字符,然后从第一个字符开始对每一个字符进行处理,如果是A则个数加一,最后把总的统计个数输出。
programjjzx(input,output);
type
str=string[255];
var
st:str;
n,i,j:integer;
begin
writeln(‘请输入一行字符:‘);
readln(st);
j:=lenth(st);{把字符串的实际长度赋给j}
n:=0;
fori:=1tojdo
iford(st[i])=65thenn:=n+1;
writeln(‘你输入的字符是:‘,st);
writeln((‘其中字符A的个数和:‘,n)
end.
使用什么方法来统计算法、代码的执行时间编辑本段回目录
模板程序:
#include<time.h>
#include<iostream>usingnamespacestd;intmain()
{
time_tt;
//一些初始化的东西
t=clock();//开始时候的GET,clock()函数用于获得系统当前时间
//你需要计时的代码,算法,语句等等
cout<<"Timeconsumed:"<<clock()-t<<endl;
//结束时候获得差值
return0;
}
用clock()函数能够精确到1ms,但是它不是标准化所推荐的而且工业化程序也不容许使用<time.h>
2.使用GetTickCount
这个和clock()相同,只是它比较标准,GetTickCount可以到18-20ms进度
3.汇编指令
前面的都是在MS级别逗留的计时,当我们需要统计一个语句使用时间的时候,我们通常经过多次循环来求总时间。
缺点:1)由于需要统计的语句耗时可能比循环需要的JMP,INC指令耗时还要少(尤其JMP指令很慢),所以统计并不精确,大多耗时为循环使用时间
2)编译器对于循环有优化,可能与单语句的汇编代码不同造成统计结果无参考意义
所以我们能不能避免这些问题呢?可以使用
直接读取CPU开机以来执行的机器周期数,一条汇编指令:RDTSC(就是ReaDTimeStampCount)精度可以达到ns级别。(准确地说精度是1/你的CPU的时钟频率,这也是极限)使用:longHighStart,LowStart,HighEnd,LowEnd;
longnumhigh,numlow;__asm//使用汇编混编
{
RDTSC
movHighStart,edx
movLowStart,eax
}
//此处放上你的算法或代码,语句等等
__asm
{
RDTSC
movHighEnd,edx
movLowEnd,eax
//获取两次计数器值得差
subeax,LowStart
cmpeax,0
jgL1
negeax
jmpL2L1:movnumlow,eax
L2:sbbedx,HighStart
movnumhigh,edx
}unsignedlongtimer=(numhigh<<32)+numlow;//得出最终结果(单位时NS)