strcmp函数实现及详解

strcmp函数实现及详解
strcmp函数实现及详解

strcmp函数实现及分析

strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果,函数形式如下:

int strcmp(const char*str1,const char*str2);

其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定:

①str1小于str2,返回负值或者-1(VC返回-1);

②str1等于str2,返回0;

③str1大于str2,返回正值或者1(VC返回1);

strcmp函数实际上是对字符的ASCII码进行比较,实现原理如下:首先比较两个串的第一个字符,若不相等,则停止比较并得出两个ASCII码大小比较的结果;如果相等就接着比较第二个字符然后第三个字符等等。无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符'/0'为止,就能得出结果。strcmp算法的可以有多种,不过我觉的可以把这么多算法分为两种,一种是利用减法运算判断结果,另一种是利用比较运算(==)得出结果。

减法运算的实现的代码如下:

1int strcmp(const char*str1,const char*str2)

2{

3int ret=0;

4while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2)&&*str1) 5{

6str1++;

7str2++

8}

9

10

11if(ret<0)

12{

13return-1;

14}

15else if(ret>0)

16{

17return1;

18}

19return0;

20}

这个函数要注意一下几点

①使用*(unsigned char*)str1而不是用*str1。这是因为传入的参数为有符号数,有符号字符值的范围是-128~127,无符号字符值的范围是0~255,而字符串的ASCII没有负值,若不转化为无符号数这回在减法实现时出现错误。

例如str1的值为1,str2的值为255。

作为无符号数计算时ret=-254,结果为负值,正确

作为有符号数计算时ret=2,结果为正值,错误

②While循环中ret=*(unsigned char*)str1-*(unsigned char*)str2)&&*str1,最后与上str1也可以换成str2,因为前面已经做了相减,无论哪个先为‘\0’都会退出。因为最后与上str1是为了判断str1是否结束,即是否为‘\0’。

③这个函数没有判断参数为NULL时的情况,所以当传入NULL时程序会崩溃。网上看别人说商业化代码都会在调用strcmp前先判断是否为NULL,所以可以不用判断NULL;我在VC6上测试string.h中的strcmp(NULL,NULL),程序也会崩溃。这里可以根据实际情况来决定。

若要判断NULL按下面方法更改代码,可以在这个函数最前面加入断言

assert((NULL!=str1)&&(NULL!=str2))

但要注意断言assert是仅在Debug版本起作用的宏,是在Debug时做的无害测试。若想在Release版也可

以判断NULL,那我们必须用别的代码来判断。

可以在程序前面加入if判断

if((NULL!=str1)&&(NULL!=str2))

{

return0;

}

我用CFree5测试sting.h中的strcmp(NULL,NULL),程序返回值为0

(strcmp(NULL,str1)崩溃),这里我们可以返回其他的值如-2。

我们也可以在函数前面加入while判断

while((NULL!=str1)&&(NULL!=str2))

{

//strcmp实现代码

}

return0;

利用while就可以把每个字符都进行判断。

利用比较运算(==)算法如下

21

22int strcmp(const char*str1,const char*str2)

23{

24while((*str1)&&(*str1==*str2))

25{

26str1++;

27str2++;

28}

29

30

31if(*(unsigned char*)str1>*(unsigned char*)str2)

32{

33return1;

34}

35else if(*(unsigned char*)str1<*(unsigned char*)str2) 36{

37return-1;

38}

39else

40{

41return0;

42}

43}

函数注意点和上面一样,有一点要注意不要为了简洁而写成下面44

45int strcmp(const char*str1,const char*str2)

46{

47while((*str1)&&(*str1++==*str2++))//这里++会引起错误

48{

49NULL;

50}

51

52

53if(*(unsigned char*)str1>*(unsigned char*)str2)

54{

55return1;

56}

57else if(*(unsigned char*)str1<*(unsigned char*)str2)

58{

59return-1;

60}

61else

62{

63return0;

64}

65}

当str1为abcd,st2为abfd时,由于判断到第三个字符时while推出,而str指针又加了1,str都指向第四个字符输出结果为0,显然这是错误的。

这个函数也可以用for来实现

66int strcmp(const char*str1,const char*str2)

67{

68for(;*str1==*str2;str1++,str2++)

69{

70if(*str1=='\0')

71return0;

72}

73

74if(*(unsigned char*)str1>*(unsigned char*)str2)

75{

76return1;

77}

78else if(*(unsigned char*)str1<*(unsigned char*)str2)

79{

80return-1;

81}

82//如果只返回正负的话可以用return*(unsigned char*)str1-*(unsigned char*)str2;

83}

C字符串处理函数全

strcpy(char destination[], const char source[]); strcpy:将字符串source拷贝到字符串destination中。 strcpy函数应用举例 原型:strcpy(char destination[], const char source[]); 功能:将字符串source拷贝到字符串destination中 例程: #include #include void main(void) { char str1[10] = { "TsinghuaOK"}; char str2[10] = { "Computer"}; cout < #include void main(void) { char str1[10] = { "Tsinghua "}; char str2[10] = { "Computer"}; cout <

Proe中的常用函数关系

Proe中的部分函数关系 一、函数关系 sin 正弦Cos 余弦tan 正切asin 反正弦acos 反余弦atan 反正切sinh 双曲线余弦cosh 双曲线正弦tanh 双曲线正切spar 平方根exp e的幂方根abs 绝对值log 以10为底的对数ln 自然对数 ceil 不小于其值的最小整数floor 不超过其值的最大整数 二、齿轮公式 alpha=20 m=2 z=30 c=0.25 ha=1 db=m*z*cos(alpha) r=(db/2)/cos(t*50) theta=(180/pi)*tan(t*50)-t*50 z=0 三、蜗杆的公式da=8为蜗杆外径m=0.8 为模数angle=20压力角 L=30长度q直径系数d分度圆直径f齿根圆直径n实数

其中之间的关系 q=da/m-2 d=q*m df=(q-2.4)*m n=ceil(2*l/(pi*m)) 在可变剖面扫描的时候运用公式sd4=trajpar*360*n 在扫描切口的时候绘制此图形,其中红色的高的计算公式是sd5=pi*m/2 五、方向盘的公式sd4=sd6*(1-(sin(trajpar*360*36)+1)/8) 其中sd4是sd6的(3/4或者7/8),sin(trajpar*360*36的意思是转过360度且有36个振幅似的 六、凸轮的公式sd5=evalgraph("cam2",trajpar*360) r=150 theta=t*360 z=9*sin(10*t*360) 在方向按sin(10*t*360)的函数关系,9为高的9倍10为10个振幅似的 七、锥齿轮公式 m=4模数z =50齿轮齿数z-am=40与之啮合的齿轮齿数angle=20压力角b=30齿厚long分度圆锥角 d分度圆直径da齿顶圆直径df齿根圆直径db基圆直径关系:long=atan(z/z-am) d=m*z da=d+2*m*cos(long)

strlen,strcat,strcpy,strncpy,strcmp函数的比较

一、s trlen函数 strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); 【参数说明】s为指定的字符串。 strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0"。 【返回值】返回字符串s 的字符数。 注意一下字符数组,例如 char str[100] = "https://www.360docs.net/doc/b218545917.html,/cpp/u/biaozhunku/"; 定义了一个大小为100的字符数组,但是仅有开始的11个字符被初始化了,剩下的都是0,所以 sizeof(str) 等于100,strlen(str) 等于11。 如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如 char str[6] = "abcxyz"; strlen(str)的返回值将是不确定的。因为str的结尾不是0,strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。 注意:strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。 如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。 二、s trcat函数 strcat() 函数用来连接字符串,其原型为: char *strcat(char *dest, const char *src); 【参数】dest 为目的字符串指针,src 为源字符串指针。 strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个NULL。 注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

各种字符串处理函数示例(基本)

示例 1.字符串输出示例。 程序: #include void main(void) { char str[25]={"Welcome to our city!"}; puts(str); puts("Thank you!"); } 结果: 2.字符串输入实例。(注意比较gets与scanf和puts与printf的区别)程序: #include void main(main) { char str[20]; gets(str); puts(str); printf("*********\n"); scanf("%s",str); puts(str); } 结果: 3.测字符串长度函数strlen()的使用。 程序: #include #include void main(main) { char a[10]="program";

int x,y; x=strlen(a); y=strlen("abc13"); printf("%d\n%d\n\n",x,y); } 结果: 4.字符串连接函数的使用。 程序: #include #include void main(main) { char s1[20]="Hello",s2[6]="Word"; puts(s1); puts(s2); strcat(s1,s2); printf("%s\n",s1); } 结果: 修改后 程序: #include #include void main(main) { char s1[5]="Hello",s2[6]="Word"; puts(s1); puts(s2); strcat(s1,s2); printf("%s\n",s1); } 结果:

C++常用库函数atoi,itoa,strcpy.strcmp的实现

C++常用库函数atoi,itoa,strcpy.strcmp的实现 1.//整数转换成字符串itoa函数的实现 #include "stdafx.h" 1.//整数转换成字符串itoa函数的实现 #include "stdafx.h" #include using namespace std; void itoaTest(int num,char str[] ) { int sign = num,i = 0,j = 0; char temp[11]; if(sign<0)//判断是否是一个负数 { num = -num; }; do { temp[i] = num%10+'0'; num/=10; i++; }while(num>0); if(sign<0) {

temp[i++] = '-';//对于负数,要加以负号 } temp[i] = '\0'; i--; while(i>=0)//反向操作 { str[j] = temp[i]; j++; i--; } str[j] = '\0'; } 2. //字符串转换成整数atoi函数的实现 int atoiTest(char s[]) { int i = 0,sum = 0,sign; //输入的数前面可能还有空格或制表符应加判断 while(' '==s[i]||'\t'==s[i]) { i++; } sign = ('-'==s[i])?-1:1; if('-'==s[i]||'+'==s[i])

{ i++; } while(s[i]!='\0') { sum = s[i]-'0'+sum*10; i++; } return sign*sum; } 3.//字符串拷贝函数 #include "stdafx.h" #include #include #include using namespace std; char *srcpy(char *dest,const char *source) { assert((dest!=NULL)&&(source!=NULL)); char *address = dest; while(*source!='\0') {

高中常用函数性质及图像汇总

高中常用函数性质及图像 一次函数 (一)函数 1、确定函数定义域的方法: (1)关系式为整式时,函数定义域为全体实数; (2)关系式含有分式时,分式的分母不等于零; (3)关系式含有二次根式时,被开放方数大于等于零; (4)关系式中含有指数为零的式子时,底数不等于零; (5)实际问题中,函数定义域还要和实际情况相符合,使之有意义。 (二)一次函数 1、一次函数的定义 一般地,形如y kx b =+(k ,b 是常数,且0k ≠)的函数,叫做一次函数,其中x 是自变量。当0b =时,一次函数y kx =,又叫做正比例函数。 ⑴一次函数的解析式的形式是y kx b =+,要判断一个函数是否是一次函数,就是判断是否能化成以上形式. ⑵当0b =,0k ≠时,y kx =仍是一次函数. ⑶当0b =,0k =时,它不是一次函数. ⑷正比例函数是一次函数的特例,一次函数包括正比例函数. 2、正比例函数及性质 一般地,形如y=kx(k 是常数,k≠0)的函数叫做正比例函数,其中k 叫做比例系数. 注:正比例函数一般形式 y=kx (k 不为零) ① k 不为零 ② x 指数为1 ③ b 取零 当k>0时,直线y=kx 经过三、一象限,从左向右上升,即随x 的增大y 也增大;当k<0时,?直线y=kx 经过二、四象限,从左向右下降,即随x 增大y 反而减小. (1) 解析式:y=kx (k 是常数,k ≠0) (2) 必过点:(0,0)、(1,k ) (3) 走向:k>0时,图像经过一、三象限;k<0时,?图像经过二、四象限 (4) 增减性:k>0,y 随x 的增大而增大;k<0,y 随x 增大而减小 (5) 倾斜度:|k|越大,越接近y 轴;|k|越小,越接近x 轴 3、一次函数及性质 一般地,形如y=kx +b(k,b 是常数,k≠0),那么y 叫做x 的一次函数.当b=0时,y=kx +b 即y=kx ,所以说正比例函数是一种特殊的一次函数. 注:一次函数一般形式 y=kx+b (k 不为零) ① k 不为零 ②x 指数为1 ③ b 取任意实数 一次函数y=kx+b 的图象是经过(0,b )和(- k b ,0)两点的一条直线,我们称它为直线y=kx+b,它可以看作由直线y=kx 平移|b|个单位长度得到.(当b>0时,向上平移;当b<0时,向下平移)

二级c常用函数总结(1)

***************数学相关**************** 1、函数名称: abs 函数原型: int abs(int x); 函数功能: 求整数x的绝对值 函数返回: 计算结果 参数说明: 所属文件: <>,<> 使用范例: #include <> #include <> int main() { int number=-1234; printf("number: %d absolute value: %d",number,abs(number)); return 0; } 2、函数名称: fabs 函数原型: double fabs(double x); 函数功能: 求x的绝对值. 函数返回: 计算结果 参数说明: 所属文件: <> 使用范例: #include <> #include <> int main()

{ float number=; printf("number: %f absolute value: %f",number,fabs(number)); return 0; } 3、函数名称: sqrt 函数原型: double sqrt(double x); 函数功能: 计算x的开平方. 函数返回: 计算结果 参数说明: x>=0 所属文件: <> 使用范例: #include <> #include <> int main() { double x=,result; result=sqrt(x); printf("The square root of %lf is %lf",x,result); return 0; } 4、函数名称: pow 函数原型: double pow(double x,double y); 函数功能: 计算以x为底数的y次幂,即计算x^y的值. 函数返回: 计算结果

Excel常用函数详解

计算机二级考试MS_Office应用Excel函数 =公式名称(参数1,参数2,。。。。。) =sum(计算范围) =average(计算范围) =sumifs(求和范围,条件范围1,符合条件1,条件范围2,符合条件2,。。。。。。) =vlookup(翻译对象,到哪里翻译,显示哪一种,精确匹配) =rank(对谁排名,在哪个范围里排名) =max(范围) =min(范围) =index(列范围,数字) =match(查询对象,范围,0) =mid(要截取的对象,从第几个开始,截取几个) =int(数字) =weekda y(日期,2) =if(谁符合什么条件,符合条件显示的内容,不符合条件显示的内容) =if(谁符合什么条件,符合条件显示的内容,if(谁符合什么条件,符合条件显示的内容,不符合条件显示的内容)) SUM函数 简单求和。 函数用法 SUM(number1,[number2],…) =SUM(A1:A5)是将单元格 A1 至 A5 中的所有数值相加; =SUM(A1,A3,A5)是将单元格 A1,A3,A5 中的数字相加。 SUMIFS函数 根据多个指定条件对若干单元格求和。 函数用法 SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) 1) sum_range 是需要求和的实际单元格。包括数字或包含数字的名称、区域或单元格引用。忽略空白值和文本值。 2) criteria_range1为计算关联条件的第一个区域。 3) criteria1为条件1,条件的形式为数字、表达式、单元格引用或者文本,可用来定义将对criteria_range1参数中的哪些单元格求和。例如,条件可以表示为32、“>32”、B4、"苹果"、或"32"。 4)criteria_range2为用于条件2判断的单元格区域。 5) criteria2为条件2,条件的形式为数字、表达式、单元格引用或者文本,可用来定义将对criteria_range2参数中的哪些单元格求和。 4)和5)最多允许127个区域/条件对,即参数总数不超255个。 VLOOKUP函数 是Excel中的一个纵向查找函数,按列查找,最终返回该列所需查询列序所对应的值。

字符串处理函数大全

字符串处理函数大全 bcmp(比较内存内容)相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp 表头文件;include 定义函数;int bcmp ( const void *s1,const void * s2,int n); 函数说明;bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0。返回值;若参数s1 和s2 所指的内存内容都完全相同则返回0 值,否则返回非零值。 附加说明;建议使用memcmp()取代。 范例:参考memcmp()。 //================================================================ bcopy(拷贝内存内容)相关函数 memccpy,memcpy,memmove,strcpy,ctrncpy 表头文件;#include 定义函数;void bcopy ( const void *src,void *dest ,int n); 函数说明;bcopy()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址,不过参数src与dest在传给函数时是相反的位置。 返回值 ;附加说明建议使用memcpy()取代 范例 #include main() { char dest[30]=”string(a)”; char src[30]=”string\0string”; int i; bcopy(src,dest,30);/* src指针放在前*/ printf(bcopy(): “) for(i=0;i<30;i++) printf(“%c”,dest[i]); memcpy(dest src,30); /*dest指针放在钱*/ printf(…\nmemcpy() : “); for(i=0;i<30;i++) printf(“%c”,dest[i]); 执行 bcopy() : string string memcpy() :string sring //================================================================ bzero(将一段内存内容全清为零)相关函数 memset,swab 表头文件;#include 定义函数;void bzero(void *s,int n); 函数说明:bzero()会将参数s所指的内存区域前n个字节,全部设为零值。相当于调用memset((void*)s,0,size_tn); 返回值:附加说明建议使用memset取代

Creo常用函数

Creo(PROE)中关系式的理解 一)关系式中可以用下列数学函数式表达: 1)、正弦 sin( ) 2)、余弦 cos( ) 3)、正切 tan( ) 4)、反正弦 asin( ) 5)、反余弦 acos( ) 6)、反正切 atan( ) 7)、双曲线正弦 sinh( ) 8)、双曲线余弦 cosh( ) 9)、双曲线正切 tanh( ) 以上九种三角函数式所使用的单位均为“度”。 10)、平方根 sqrt( ) 11)、以10为底的对数 log( ) 12)、自然对数 ln( ) 13)、e的幂 exp( ) 14)、绝对值 abs( ) 15)、不小于其值的最小整数(上限值) ceil( ) 16)、不超过其值的最大整数(下限值) floor( ) 可以给函数ceil和floor加一个可选的自变量,用它指定要圆整的小数位数。 带有圆整参数的这些函数的语法是: ceil(parameter_name或number, number_of_dec_places) floor (parameter_name 或 number, number_of_dec_places) 其中的parameter_name或number意为参数名称或者一个带小数位的精确数值 后面跟随着的number_of_dec_places意为十进位的小数位数,是可选值: A)可以被表示为一个数或一个使用者自定义参数。如果该参数值是一个实数,则被截尾成为一个整数。 B)它的最大值是8。如果超过8,则不会舍入要舍入的数(第一个自变量),并使用其初值。C)如果不指定它,则功能同前期版本一样。 使用不指定小数部分位数的ceil和floor函数,其举例如下: ceil (10.2) 值为11 floor (10.2) 值为 10

关系中常用函数详解

在ProE中,我们的关系可以直接很多系统已经预定义好的函数,通过这些函数我们可以来进行一些特定的运算得到所期望的值,下面我们就对一些常用函数进行一个概括和总结,方便大家在使用的时候查阅。 1.数学函数 在proe中,我们可以使用丰富的数学函数,常用的函数列表如下: sin()、cos()、tan()函数 这三个都是数学上的三角函数,分别使用角度的度数值来求得角度对应的正弦、余弦和正切值,比如: A=sin(30) A=0.5? B=0.866?B=cos(30) ?C=tan(30) C=0.577 asin()、acos()、atan()函数 这三个是上面三个三角函数的反函数,通过给定的实数值求得对应的角度值,如:A=asin(0.5) A=30? B=60?B=acos(0.5) C=26.6?C=atan(0.5)

sinh()、cosh()、tanh()函数 在数学中,双曲函数类似于常见的(也叫圆函数的)三角函数。基本双曲函数是双曲正弦“sinh”,双曲余弦“cosh”,从它们导出双曲正切“tanh”等。 sinh / 双曲正弦:sinh(x) = [e^x - e^(-x)] / 2 cosh / 双曲余弦:cosh(x) = [e^x + e^(-x)] / 2 tanh / 双曲正切:tanh(x) = sinh(x) / cosh(x)=[e^x - e^(-x)] / [e^x + e^(-x)] 函数使用实数作为输入值 log()函数 求得10为底的对数值,如: A=log(1) A=0;? A=1;?A=log(10) ?A=log(5) A=0.6989...; ln()函数 求得以自然数e为底的对数值,e是自然数,值是2.718...;如: A=ln(1) A=0;? ?A=ln(5) A=1.609...;

C语言常用函数名及用法

字符函数和字符串函数 头文件:字符串函数头文件:#include 字符函数头文件:#include putchar:输出一个 putchar(a):输出字符变量a的值,(其中a可为字符变量,整形变量,字符常量,整形常量) getchar:输入一个字符 a=getchar(); putchar(a);结果为b printf(格式控制符,输出列表); scanf(格式控制符,地址列表); 输入形式与格式控制部分对应 1.当为两个连续输入时:scanf(“%d%d”,&a,&b); 输入量数据之间可为:一个或多个空格,也可以用enter,tab无逗号时输入时不能用逗号作分隔。 2.格式控制中两%d有两个空格,输入时两数据间应有两个空格或两个以上。 3.当为“:”时输入时应对应一样,当为:scanf(“a=%d,b=%d”,&a,&b);输入a=12,b=22。 4.当格式控制符为%c时,输入时空格与转义字符都作为有效字符记录在里面:scanf(“%c%c%c”,&a,&b,&c); 输入时:ab c↙空间不能插空格或其他符

5. Scanf(“%d%c%f”,&a,&b,&c); 输入时1234a123h26↙在输入遇到时空格回车 tab或其他非法输入就会认定输入完毕 Gets (字符数组):读入字符串函数 Gets(str)从键盘键入a b↙括号里为字符数组str的起始地址,Puts(字符数组):输出字符串函数 Strcat(字符数组1,字符数组2):字符串连接函数(2连接在1后面) Strcpy和strncpy:字符串复制函数 Strcpy(字符数组1,字符数组2):将2复制到1 数组1 要为数组名,字符串2可以为数组名或者字符串 Strncpy(str1,str2,2):将str2的前两个字符复制到str1,取代str1的前两个字符 Strcmp:字符串比较函数 Strcmp(str1,str2):相等则为0(对字符串自左向右逐个字母进行比较) Strlen(字符数组):测字符串的实际长度 Strlwr(字符串)将字符串转换为大写 Strupr(字符串)将字符串转换为小写

strcmp()函数的使用问题

使用strcmp()函数时常出现的问题 原型:int strcmp(char *str1,char *str2) 功能:把两字符串str1与str2进行比较,当str1>str2,函数返回1,当str1==str2时,函数返回0,当str1 #include #include int main() { printf("a与b的比较的结果:%d\n",strcmp("a","b")); printf("b与a的比较的结果:%d\n",strcmp("b","a")); printf("a与a的比较的结果:%d\n",strcmp("a","a")); return 0; } 执行结果: 功能相符。 2)问题引入 首先我们来看如下的编程 #include #include

#include int main() { char str1[2],str2[2]; printf("请输入第一个字符串:"); scanf("%s",str1); printf("请输入第二个字符串:") scanf("%s",str2); printf("%d",strcmp(str1,str2)); return 0; } 我们执行上程序如下: 你们看到没,结果是-1,这本来是等于0啊,可以为什么等于-1?现在我来解答这个疑问。你们看来str1与str2我给它们分配几个字符?对,我只给它们都只分配了两个字符,也就是说它们都是大小为2的字符数组。我们再去看一下程序,我们输入str1与str2是以什么样的方式进行输入的?对,它们都是以字符串的形式进行输入的。而我以前说过,你输入一个字符串,字符串是以’\0’作为结束标记的。假如你是从键盘输入字符串,当你以enter键来结束一个字符输入时,程序会在你输入的字符串中自动输入一个‘\0’。也就是说,字符串结束一定包括一个字符串结束符’\0’,’\0’也占一个字符。现在我们回过来看,strcmp函数是比较两字符串吧,从我们刚才的那种输入的方式,我实际输入的两字符是:str1=”ab\0”,str2=”ab\0”。两个字符都超出了我们给它们的分配的大小。于是这就是出现上面的情况的原因,错误的比较啊,同志们明白了吧。如果还不明白,我们来看下面的一个例子,程序的代码还是上明的代码。只是我们改变一下输入。

初中常用函数及其性质

一.正比例函数的性质 1.定义域:R(实数集) 2.值域:R(实数集) 3.奇偶性:奇函数 4.单调性:当k>0时,图像位于第一、三象限,y随x的增大而增大(单调递增);当k<0时,图像位于第二、四象限,y随x的增大而减小(单调递减) 5.周期性:不是周期函数。 6.对称轴:直线,无对称轴。、 二.一次函数图像和性质 一般地,形如y=kx+b(k、b是常数,且k≠0?)的函数,?叫做一次函数(?linear function).一次函数的定义域是一切实数. 当b=0时,y=kx+b即y=kx(k是常数,且k≠0?).所以说正比例函数是一种特殊的一次函数. 当k=0时,y等于一个常数,这个常数用c来表示,一般地,我们把函数y=c(c是常数)叫做常值函数(constant function)它的定义域由所讨论的问题确定. 一般来说, 一次函数y=kx+b(其中k、b是常数,且k≠0)的图像是一条直线. 一次函数y=kx+b的图像也称为直线y=kx+b. 一次函数解析式y=kx+b称为直线的表达式. 一条直线与y轴的交点的纵坐标叫做这条直线在y轴上的截距,简称直线的截距. 一般地,直线y=kx+b(k0)与y轴的交点坐标是(0,b).直线y=kx+b(k0)的截距是b. 一次函数的图像: k>0 b>0 函数经过一、三、二象限 k>0 b<0 函数经过一、二、三象限 k<0 b>0 函数经过一、二、四象限

k<0 b<0 函数经过二 、三、四象限 上面性质反之也成立 1.b 的作用 在坐标平面上画直线y=kx+b (k≠0),截距b 相同的直线经过同一点(0,b). 2.k 的作用 k 值不同,则直线相对于x 轴正方向的倾斜程度不同. (1)k>0时,K 值越大,倾斜角越大 (2)k<0时,K 值越大,倾斜角越大 说明 (1) 倾斜角是指直线与x 轴正方向的夹角; (2)常数k 称为直线的斜率.关于斜率的确切定义和几何意义,将在高中数学中讨论. 3.直线平移 一般地,一次函数y=kx+b(b0)的图像可由正比例函数y=kx 的图像平移得到.当b>0时,向上平移b 个单位;当b<0时,向下平移|b|个单位. 4.直线平行 如果k1=k2 ,b1b2,那么直线y=k1x+b1与直线y=k2x+b2平行. 如果直线y=k1x+b1与直线y=k2x+b2平行,那么k1=k2 ,b1b2 . 1.一次函数与一元一次方程的关系 一次函数 y=kx+b 的图像与x 轴交点的横坐标就是一元一次方程kx+b=0的解;反之,一元一次方程kx+b=0的解就是一次函数 y=kx+b 的图像与x 轴交点的横坐标.两者有着密切联系,体现数形结合的数学思想. 2.一次函数与一元一次不等式的关系 由一次函数 y=kx+b 的函数值y 大于0(或小于0),就得到关于x 的一元一次不等式kx+b>0(或kx+b<0).在一次函数 y=kx+b 的图像上且位于x 轴上方(或下方)的所有点,它们的横坐标的取值范围就是不等式kx+b>0(或kx+b<0)的解. 三.二次函数图像及其性质 1.定义:一般地,如果c b a c bx ax y ,,(2 ++=是常数,)0≠a ,那么y 叫做x 的一元二次函数. 2.二次函数2 ax y =的性质 (1)抛物线2ax y =)(0≠a 的顶点是原点,对称轴是y 轴. (2)函数2ax y =的图像与a 的符号关系: ①当0>a 时?抛物线开口向上?顶点为其最低点;②当0

OC常用函数

常用字符串函数 /************************************* ************************************* ***** 一.NSString ************************************* ************************************* *****/ /*----------------创建字符串的方法 ----------------*/ //1、创建常量字符串。NSString *astring = @"Welcome to 1000phone"; //2、通过实例化方法initWithString:实例化一个字符串对象 NSString *astring = [[NSString alloc] initWithString:@" I love iOS!"]; NSLog(@"astring:%@",astring);?[astring release]; //3、用标准c创建字符串: initWithCString:encoding:方法 const char *cString = "I love iphone";

NSString * aString = [[NSString alloc]initWithCString:cString encoding:NSUTF8StringEncoding];? NSLog(@"astring:%@",aString);?[aString release]; 或者:用initWithUTF8String:实例化一个字符串对象const char *p = " Welcome to Beijing!";?NSString *string = [[NSString alloc]initWithUTF8String:p]; //4、创建格式化字符串:占位符(由一个%加一个字符组成) int age = 23;?NSString *astring = [[NSString alloc] initWithFormat:@”I am %d”,age]]; NSLog(@"astring:%@",astring);?[astring release]; //5、通过静态方法创建字符串对象NSString * str1 = [NSString stringWithString:@"I love programming!"];?NSString * str2 = [NSString stringWithUTF8String:" I love programming!"]; NSString * str3 = [NSString

高考中常用函数模型归纳及应用

高考中常用函数模型.... 归纳及应用 一. 常数函数y=a 判断函数奇偶性最常用的模型,a=0时,既是奇函数,又是偶函数,a ≠0时只是偶函数。关于方程解的个数问题时常用。 例1.已知x ∈(0, π],关于方程2sin(x+ 3 π )=a 有两个不同的实数解,则实数a 的取植范围是( )A .[-2,2] B.[ 3,2] C.( 3,2] D.( 3,2) 解析;令y=2sin(x+3π ), y=a 画出函数y=2sin(x+3 π ),y=a 图象如图所示,若方程有两个不同的解,则两个函数图象有两个不同的交点, 由图象知( 3,2),选D 二. 一次函数y=kx+b (k ≠0) 函数图象是一条直线,易画易分析性质变化。常用于数形结合解决问题,及利用“变元”或“换元”化归 为一次函数问题。有定义域限制时,要考虑区间的端点值。 例2.不等式2x 2 +1≤m(x-1)对一切│m │≤2恒成立,则x 的范围是( ) A .-2≤x ≤2 B. 4 31- ≤x ≤0 C.0≤x ≤ 4 71+ D. 4 71-≤x ≤ 4 1 3- 解析:不等式可化为m(x-1)- 2x 2+1≥0 设f(m)= m(x-1)- 2x 2 +1 若x=1, f(m)=-3<0 (舍) 则x ≠1则f(m)是关于m 的一次函数,要使不等式在│m │≤2条件下恒成立,只需? ? ?≥-≥0)2(0 )2(f f ,解之可得答案D 三. 二次函数y=ax 2 +bx+c (a ≠0) 二次函数是应用最广泛的的函数,是连接一元二次不等式和一元二次方程的纽带。很多问题都可以化归和转化成二次函数问题。比如有关三次函数的最值问题,因其导数是二次函数,最后的落脚点仍是二次函数问题。 例3.(1).若关于x 的方程x 2 +ax+a 2 -1=0有一个正根和一个负根,则a 的取值范围是( ) 解析:令f(x)= x 2 +ax+a 2 -1由题意得f(0)= a 2 -1 <0,即-1<a <1即可。 一元二次方程的根分布问题可借助二次函数图象解决,通常考虑二次函数的开口方向,判别式对称轴与根的位置关系,端点函数值四个方面。也可借助韦达定理。

Strcat,strcpy,strcmp,Strlen函数原型

Strcat,strcpy,strcmp,Strlen函数原型 1、Strcat函数原型如下: #include #include #include char *strca(char *dst, const char * src) { char *dst_t; dst_t = (char *)malloc(sizeof(dst) + sizeof(src)); char *start = dst_t; assert(dst && src); while(*dst_t = *dst) { dst_t++; dst++; } while(*dst_t = *src) { dst_t++; src++; } *dst_t = '\0'; return start; } 下面,贴上一个我自己写的strcpy函数,以做比较;相比之下,我自己写的这个strcpy效率就显得低了。char * my_strcat(char *s, char *t) { int i; char *st, *p_st, *p_s, *p_t; st = (char *)malloc(strlen(s)+strlen(t)+1); if(st == NULL) { return NULL; printf("malloc fail!\n"); } p_st = st;

p_s = s; p_t = t; for(i = 0; i < strlen(s); i++) *(p_st++) = *(p_s++); for(i = strlen(s); i<(strlen(s) + strlen(t)); i++) *(p_st++) = *(p_t++); *p_st = '\0'; return st; } int main() { char *dst = {"wo ai "}; char *src = {"wo de guo jia !"}; printf("%s\n",strca(dst,src)); return 0; } 2、Strcpy函数原型如下: char *strcpy(char *strDest, const char *strScr) { char *address=strDest; assert((strDest != NULL) && (strScr != NULL)); while(*strScr) //是while(*strScr != ’\0’)的简化形式; { *strDest++ = *strScr++; } *strDest = '\0'; //当strScr字符串长度小于原strDest字符串长度return address; //时,如果没有改语句,就会出错了。 } 以下是在VC6.0中调试的例子,函数名用strcpya代替。 #include #include

三角函数常用公式

同角三角函数的基本关系式 倒数关系: 商的关系:平方关系: tanα ·cotα=1sinα ·cscα=1cosα ·secα=1 sinα/cosα=tanα= secα/cscα cosα/sinα=cotα= cscα/secα sin2α+cos2α=1 1+tan2α=sec2α1 +cot2α=csc2α 诱导公式 sin(-α)=-sinαcos(-α)=cosαtan(-α)=-tanαcot(-α)=-cotα sin(π/2-α)=cosαcos(π/2-α)=sinαtan(π/2-α)=cotαcot(π/2-α)=tanαsin (π/2+α)=cosαcos(π/2+α)=-sinαtan(π/2+α)=-cotαcot(π/2+α)=-tanαsin(π-α)=sinα cos(π-α)=-cosα tan(π-α)=-tanα cot(π-α)=-cotα sin(π+α)=-sinαcos(π +α)=-cosαtan(π+α)= tanαcot(π+α)=cotα sin(3π/2-α)=- cosαcos(3π/2-α) =-sinαtan(3π/2- α)=cotαcot(3π/2 -α)=tanαsin (3π/2+α)=- cosαcos(3π/2+α) =sinαtan(3π/2+ α)=-cotαcot (3π/2+α)=-tanα sin(2π-α)=-sinα cos(2π-α)=cosα tan(2π-α)=-tanα cot(2π-α)=-cotα sin(2kπ+α)= sinαcos(2kπ+α)= cosαtan(2kπ+α)= tanαcot(2kπ+α)= cotα(其中k∈Z) 两角和与差的三角函数公式万能公式 sin(α+β)=sinαcosβ+cosαsinβsin(α-β)=sinαcosβ-cosαsinβcos(α+β)=cosαcosβ-sinαsinβcos(α-β)=cosαcosβ+sinαsinβtanα+tanβtan(α+β)=——————1-tanα ·tanβtanα-tanβtan (α-β)=——————1+ tanα·tanβ 2tan(α/2) sinα=—————— 1+tan2(α/2) 1-tan2(α/2) cosα=—————— 1+tan2(α/2)

ztrans函数

function F = ztrans(varargin) %ZTRANS Z-transform. % F = ZTRANS(f) is the Z-transform of the scalar sym f with default % independent variable n. The default return is a function of z: % f = f(n) => F = F(z). The Z-transform of f is defined as: % F(z) = symsum(f(n)/z^n, n, 0, inf), % where n is f's symbolic variable as determined by FINDSYM. If % f = f(z), then ZTRANS(f) returns a function of w: F = F(w). % % F = ZTRANS(f,w) makes F a function of the sym w instead of the % default z: ZTRANS(f,w) <=> F(w) = symsum(f(n)/w^n, n, 0, inf). % % F = ZTRANS(f,k,w) takes f to be a function of the sym variable k: % ZTRANS(f,k,w) <=> F(w) = symsum(f(k)/w^k, k, 0, inf). % % Examples: % syms k n w z % ztrans(2^n) returns z/(z-2) % ztrans(sin(k*n),w) returns sin(k)*w/(1-2*w*cos(k)+w^2) % ztrans(cos(n*k),k,z) returns z*(-cos(n)+z)/(-2*z*cos(n)+z^2+1) % ztrans(cos(n*k),n,w) returns w*(-cos(k)+w)/(-2*w*cos(k)+w^2+1) % ztrans(sym('f(n+1)')) returns z*ztrans(f(n),n,z)-f(0)*z % % See also IZTRANS, LAPLACE, FOURIER. % Copyright 1993-2003 TheMathWorks, Inc. % $Revision: 1.20.4.2 $ $Date: 2004/04/16 22:23:22 $ % Trap for errors in input first. ifnargin>= 4 error('symbolic:sym:ztrans:errmsg1','ZTRANS can take at most 3 input variables'); end % Make f a sym and extract the variable closest to 'x'. f = sym(varargin{1}); % Find all symbolic variables in f. vars = [ '{' findsym(f) '}' ]; % Determine whether n is in the expression. varcheck = maple([ vars ' intersect {n}']); % If n is a symbolic variable, make it the default. Otherwise % let the variable closest to x be the variable of integration. ifisequal(varcheck,'{n}') var = sym('n');

相关文档
最新文档