【C语言连载四】--------数组、字符串、函数、递归、预编译、宏定义

内容简介:

1、数组

2、字符串

3、函数(声明与定义,rand函数)

4、递归

5、预编译

6、宏定义(带参数/不带参数)


一、数组
  语法定义: 类型   数组名 [ 元素个数 ]
 
数组声明: int a[5];
 
注意:类型必须一致
             [ ]
必须是常量,绝对不能使用变量
 
初始化:定义数组时初始化元素
                
先定义数组变量,再初始化元素
 
遍历数组:把数组中的元素都取出来
  计算数组a中元素个数:
             int count = sizeof( a ) / sizeof( int );

二维数组:
//定义:3表示数组中元素个数,2 表示里面二维数组的个数
int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
printf(“value is %d \n”,a[1][0]);  //3


二、字符串
  用字符数组存储字符串   “\0” 表示字符串结束
  char str[ ] = “”;
  计算字符串中字符的个数 :int length = strlen(str);
【1】字符串数组的初始化:
        (1)char a[3] = {‘x’, ‘y’, ‘\0’};
        (2)char b[3] ;
                 b[0] = ‘x’;    b[1] = ‘y’;   b[2] = ‘\0’;
        (3)char c[3] = “xy”;
        (4)char *d  = “xy”;
                 //指针类型    //这种要获取长度的话,无论字符串多长,
                                         他所得的结果均为8;因为他获得的是
                                         指针所占字节长度,指针指向字符串所在地址。
【2】获取字符串的长度:
        (1)int len = sizeof( str ) / sizeof( char ) -1;
        (2)int len = ( int ) strlen ( str );
【3】字符串的遍历:
         char str = “hello world”;
   (方法1)int len = sizeof( str ) / sizeof( char ) -1;
                   for(int i = 0; i < len; i++){
                         printf(“%c ”,str[ i ] );
                    }
                   
   (方法2)导入头文件:#include <string.h>
                 int len = ( int ) strlen ( str );

三、函数
 1、 函数的定义:
            返回值类型   函数名 ( 形参列表 )
             {
                  
函数体
             }
    // 注意:
(1)函数名称通常以小写字母开头
(2)函数被调用时,形参会被分配内存,使用完后,内存被栈内存回收
(3)函数的定义是不能重复的,只可以定义一次
(4)函数可以没有返回值和形参,但必须要有( )
(5) 若函数没有返回值,则用void 表示返回类型
(6)返回值为void时,可不写return;若要写, return后面不带任何值,只加“;”结尾
(7) return标志函数结束, return后面的语句将不再执行
(8)在函数体中,不能再嵌套定义函数。
(9)默认情况下,函数名不能重复定义,即使类型不一样也不行

  2、 声明函数:  //告诉编译器在后面有这样一个函数
int sum(int a, int b);   //声明
int sum(int a, int b) { }   //定义
     //  注意:
        (1)函数只能定义一次,但可以 声明多次 声明的尾部要添加分号
        (2) 声明时的形参可以与定义的时候形参不一样,甚至可以没有
        (3)只有前面声明过的函数才能被后面的函数调用
        (4)可以在前面声明函数,在后面定义函数
        (5)在C语言中,在.C文件中定义函数实现,在 .h文件中定义函数声明
                                     多文件开发                          头文件
二、rand  函数
  产生随机数,需要导入 <stdlib.h> 头文件
      // 产生随机数,需要导入头文件: #include <stdlib.h>
   
int random = rand () % 10 ;
   
// 运行的结果总是一样的
   
   
// 所以,取随机值,我们通常会设置随机种子,一般以时间为种子
   
// 这种方法要导入头文件: #include <time.h>
   
srand (( unsigned ) time ( NULL )); // 注意: NULL 必须大写!!!
   
for ( int i = 0 ; i < 10 ; i++) {
       
int random = rand () % 10 // %10 ,表示随机取 [0 10 )间的整数
       
printf ( "rand is %d \n" ,random);
    }
   
// 方法二:不需设置时间种子
   
int random = arc4random () % 10 ; //arc4random() 表示随机取值不重复
    printf("rand is %d \n",random);
四、递归调用
  当前函数调用自己
  注意:在递归调用时,应该有跳出条件,满足条件时,使用 return 跳出函数
阶乘:
int jiecheng( int value){
    if( value == 1){
         return value;
    }
    return value * jiecheng(value - 1);
}
五、预处理
#include <>   &&   #include “ “ 
     (1)#include <>
          直接在系统目录下查找文件,一般库文件使用此种方式,标准查找
     (2)#include “ “ 
          先在当前编译目录下查找文件,若没有,再到系统目录下查找

六、宏定义
  【1】不带参数宏定义
  语法定义:#define   宏名   宏内容
        #define   PI    3.14
 (1)宏名一般全用 大写字母(与变量名区分,或小写 k 开头),但小写也没语法错误
 (2) 宏内容尽量用括号
 (3)对程序中用“ ” 括起来的字符串内的内容,不进行宏的替换操作
 (4) 在编译之前,预处理时将程序中所有宏名替换成右边的宏内容
 (5)  宏名的作用域:从定义位置到文件结束。如需要终止宏定义,可用 #undef 宏名
  【2】带参数的宏定义
#define 宏名 (参数列表)  表达式
        #define   average(a, b)    (a + b) / 2
      使用:int a =  average(1, 3);
{1}注意:
   (1)宏名与参数之间不能有空格,
   (2)表达式里面要带参数,否则无意义
{2}与函数的区别:
   (1)宏定义不涉及参数类型匹配、参数传递、返回值问题
   (2)函数调用在程序运行时执行宏替换只在编译预处理阶段进行
            所以,带参数的宏(执行效率) > 函数
三、条件编译
 (1)在预编译时,根据条件选择编译代码。//不满足条件时,根本不会编译
 (2)注意:是编译进去,不是执行,和 if—else不一样
 (3) 使用条件编译,编译的条件变量只能是整型字符型
 (4)如无输出之类,条件编译可以写到main函数外面。
#define  MAX  11
 int  main  ( ){
     //条件编译:
    #if  MAX == 0
        printf(“ MAX  is  0  \n”);
    #elif  MAX > 0       //<====>else if
        printf(“ MAX  >  0  \n”);
    #else  MAX < 0
        printf(“ MAX  <  0  \n”);
    #endif
 }

//判断MAX是否定义,如果定义了,条件为真:
#if defined( MAX )   <====> #ifdef MAX
#endif

//判断MAX是否定义,如果定义了,条件为假:
#if  !defined( MAX )   <====> #ifndef MAX
#endif


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值