数组:把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的形同类型数据元素的集合称为:数组
一维数组的初始化
(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();
}
}
}