Linux C 之数组和函数

数组:把具有相同类型的若干变量按有序的形式组织起来,这些序排列的形同类型数据元素的集合称为:数组

 

 

一维数组的初始化

(1)可以只给部分元素赋初值,例如:int a[10]={0,1,2,3}; 只给a[0]~a[3]四个元素赋初值,其他元素的默认为0

(2)只能给元素逐个赋值,不能给数组整体赋值。例如:int  a[5]={1,1,1,1,1,};正确。  int a[5]=1;错误

 

变量的存储类型:

 

关于初始化:全局数组若不初始化,编译器将其初始化为零。

                     局部数组若不初始化,内容为随机值,

                     局部变量如不赋初值,内容为随机值,

静态局部变量如不初值,编译时系统会自动将其赋值(整型变量为0.指针为NULL),

动态局部变量如不赋初值,内容为随机值,

也就是一句话:不管定义什么种类的变量最好赋初值,指针赋值为NULL。

 

gets(str)与scanf("%s",str)的区别:
gets(str)允许输入的字符串含有空格  直到出现换行字符或读到文件末尾为止,最后加上NULL作为字符串结束。
scanf()不能输入空格和回车

 

标准库函数:  输入:库函数的输入由回显(输入的时候就显示在屏幕上面)的还有不回显的,
其中getch()是不回显的,不带缓冲的 接受一个字符getchar()是回显的

 

    (1)静态局部变量 static
               第一次进入函数调用变量时初始化,以后每次进入函数,此变量保持上一次的值,具有记忆特性,
              作用域:本函数范围内
              生存周期:整个程序运行的周期
    (2)静态全局变量 static
             在函数外定义,作用范围被限制在所定义的文件
             不同文件静态全局变量可以重名,但作用域不冲突
             生存周期:整个程序运行的周期

(3)局部变量也可以定义为register 型,告诉系统对其分配地址时尽量将其分配在寄存器中,以提高访问速度

 

3 、全局变量尽量少用,破坏函数的封装性(封装性),还有因为在程序执行整个过程中都占用资源

一源文件中,允许全局变量和局部变量同名,它们代表不同的对象,分配不同的单元,互不干扰。

4、预处理功能
(1)文件包含  #include
(2)宏定义    #define
(3)条件编译  #if  #endif
 其中还可以进行文件包含处理,c语言提供了#include命令用来实现“文件包含”的操作,例如:
   可以定义:#include"file2.c"  :但(我)不建议这样用。

5、使用带参的宏定义最好加上括号,例如:#define  SQ1(y)  (y)*(y)  和  :#define  SQ2 (y)  y*y    如果是表达式的话就会出现不是自己想要的结果    例如:a=SQ1(1+1)  和a=SQ2(1+1)  这两个结果运行出来时不一样的

6、宏替换不占运行时间,只占编译时间,而函数调用占运行时间.

7、条件编译的作用:
    (1)防止头文件被重复引用
     #ifdef   _ _LD_H_ _
     #define  _ _LD_H_ _
       .........
     #endif
     还有个作用就是:条件编译是为了代码能在不同的环境中都编译通过,通用性更好。

函数:

8、在函数被调用之前,形参不占内存。
    实参可以使常量、变量、表达式
    必须制定形参的类型
    实参对形参的数据传递时“值传递”,即单项传递。
    用return语句来获得返回值,不指定函数类型,则默认返回值为整型
9、在已经定义好的函数中不能再定义其他的函数了
10、一个源文件中定义的函数只能被本文件中的函数调用,而不能被其它文件中的函数调用,其定义形式:static  类型说明符 函数名(形参表)
   也可以防止几个文件中的函数重名,

 

下面是打字游戏:

/*************************************************************

**   名称及其要求:打字游戏
**   注释:
     1)随机函数
           srand((unsigned)time(NULL));
           num=rand()%26;//num:0->25
          'a' +num

     2)getchar() 
           include<conio.h>
          ch=getch();
     3)时间函数
           start_time=time(NULL);//可以返回系统当前时间,以秒为单位
           start_time=time(NULL);

     4)所需头文件
    #include <conio.h>
    #include <time.h>
    #include <math.h>
    #include <stdio.h>
    system("cls");//清空屏幕


*************************************************************/

    #include <stdio.h>
    #include <conio.h>
    #include <time.h>
    #include <math.h>
    #include <stdlib.h>


void start(void)
{
       printf("\n");
       printf("\n");
       printf("******************************************\n");
       printf("* 输入过程中无法退!                     *\n");
       printf("* 请按所给字母敲击键盘!                 *\n");
       printf("* 按任意键开始测试,按下首字母开始及时! *\n");
       printf("* 输入出错则以_表示!                    *\n");
       printf("******************************************\n");

}

void function(void)
{
      int i,right=0,right_rate=0;
      int num[26]={0};
      char In_put,In_error='-';
      char ch[26]={0};
      int second_start=0;   //系统的当前时间*/

      srand((unsigned)time(NULL));
    

      for(i=0;i<26;i++)
      {
              num[i]=rand()%26;   //num:0->25
       }

      for(i=0;i<26;i++)
      {
             ch[i]='a'+num[i];
             printf("%c",ch[i]);
      }
      printf("\n");

      for(i=0;i<26;i++)
      {
    
             In_put=getch(stdin);
             if(i==0)
             second_start=time((time_t*)NULL);


             if(In_put==ch[i])
             {
                     putchar(ch[i]);
                     right++;
             } 
            else
                    putchar(In_error);
       }
       second_stop=time((time_t*)NULL)-second_start;
       right=right%26;
       printf("\n");
       printf("完成输入!\n");
       printf("用时 %d s\n",second_stop);
       printf("正确率 %d %%\n",right);

       printf("按下Exe退出,空格键继续!\n");
    
}

void main(void)
{
  
       int esc=0;
       char renyijian=0;
       int ch_kong=0;
       start(); //输出一些说明书

       //输出随机数
       renyijian=getch();
       if(renyijian)
       {
               function();
       }
   
       while(1)
       {
                 ch_kong=getch();
                

                if(ch_kong==27)
                {
                          exit(0);
                           break;
                }
                else if(ch_kong==32)
                {
                          system("cls");//清空屏幕
                          start();
                          function();
                 }
       }     
}



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                    

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值