A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 枫叶路过123 中级黑马   /  2014-11-3 19:02  /  843 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天开始是复习之前学过的内容,写程序的时候,要尽可能的优化代码,尤其是循环语句,字符串就是字符数组,C语言没有单独处理字符串的功能。

字符串的处理函数:

strlen(str)返回字符串的有效长度,遇到’\0’结束;

strcat(str1,str2)字符串追加,会越界strncat(str1,str2,n)有效追加

strcmp(str1,str2)字符串比较,=返回0,>返回1,<返回-1;strncmp()

strcpy(str1,str2)字符串拷贝

sprintf(str,“”,a)格式化字符串str,结果输出到str

sscanf()格式化输入

strchr(str,‘’)查找指定字符的位置,作为首地址,返回一个数组,

strstr(str,str1)查找子串

strtok(str,str1)以str1分割字符串str,只取第一个str1之前的,往后调用需要使用null才可以依次显示出来,协议的解析时候有用。使用<tag>的时候

如果第一个是a输不出来。不适合使用<>。

atoi(str)返回一个int类型。atof()atol(),没有itoa(),使用sprintf()。

函数:C语言就是无数个函数构成的。

str1和str2的合并:第一步求得str1的长度,使用一个while循环,当遇到’\0’的时候就结束,包含一个计数器;第二步,再使用一个while循环,只要str2不是’\0’就继续,也包含一个计数器,同时第一个计算器也同时运算。

str1和str2的拷贝:只要str2的最后一个不是’\0’就给str1赋值。

函数的声明时候,需要在后面加一个分号。形参不可以给实参传递数据。多个源代码的编译,gcc-o a.c b.c多个.c档一起编译,在主函数使用其他.c档函数的时候,在前面声明一下,避免麻烦,将声明放到.h档中。预编译的时候要使用条件编译,这样会防止代码冗余,有时候出现重复定义的错误。而且也可以在中间加else。经常用在头档中。

使用宏定义可以讲代码改变成鬼都不认识的。Main()函数和exit()函数,return只是某个函数结束,程序并不结束,exit()函数无论在何处都会直接退出程序。

函数的递归:函数自己调用自己。原则:一定要有终止条件,否则是无限递归,会耗尽存储器。递归都可以用循环来实现。

递归求字符串的长度:由于字符串当作参数的时候,会丢失维度,这个我们需要一个变量来查看当前的下标。在每次调用的时候就给加1.

注:递归和循环最主要的区别是,循环需要一个量,递归的时候需要一个参数来替代,在函数里面的量是没有用的,因为每次调用的时候都会用到,每次初始化时候就会有恢复。

十进制转换为二进制:奇数的二进制最后一位一定是1,偶数的最后一位一定是0。1.用n对2取余;2.如果n>=2,递归,参数对2整除;3输出结果。如果输出放在步奏2前面,就是先序递归,否则,后序递归。

递归求和:终止条件就是当n==1的时候,否则sum(n-1)+n;

斐波那契数列:一个典型的数列,每一项都是前两项的和。

求1-n之间所有素数的和:

1.首先判断素数,从2到n-1之间,如果有一个可以整除n,那么就不是素数,否则就是素数。是返回1,不是返回0.

for(i=2;i<n;i++)//循环实现

{

if(n%i==0)

return 0;

}

return 1;

int issu(int n,int key)//递归实现

{

if(n<2)

return 1;

if(n==key)

return 1;

if(n%key==0)

return 0;

else

return issu(n,key+1);

}

2.对素数的求和,如果是素数就相加,否则往下递归。

递归会导致债的操作过多。

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马