C语言的常用语法

/*
* 一个函数中调用另外一个函数条件如下:
* 被调用函数必须是已经定义的函数(是库函数或者用户自己定义的函数)
*如果使用库函数,应该在本文件开头加相应的#include指令
*如果使用自己定义的函数,而该函数的位置在调用它的函数后面,应该声明
*/
#include<stdio.h>
  int main(){
    void print(int x,int y); //声明调用函数,还未调用
    int x,y;
    print(x,y); //直接调用函数
    return 0;
  }
  void print(int x,int y){
    ****
  }

printf() //输出语句
\n //换行符 scanf("%f,%f",&a,&b) //输入两个浮点数,逗号隔开数,比如:2.1,2.2
scanf() //键盘输入语句
float() //浮点语句 比如:2.3
char() //只能有一个字符,后面的会覆盖
int() //初始化,为整数
void() //初始化,空字符

自定义类型的三种方法:

  • 结构体:
    1.struct结构体名
    {成员列表} 数组名{数组长度};
    2.先声明一个结构体类型,然后再用此类型定义结构体数组;
    结构体类型 数组名[数组长度];
    如:struct Person Leader[3];
    结构体数组用法说明:对结构体数组初始化的形式是在定义数组的后面加上: = {初始表列};
    如:struct Person Leader[3]= {"LI",0,"ZHANG",0,"DENG",0};

  • 共用体 union 最后一项赋值,其余值初始化,写法和结构体大致相同

  • enum枚举类型:
    enum Weekday{sun,mon,tue,wed,thu,fri,sat};
    声明了一个枚举类型enum Weekday
    然后可以用此类型来定义变量
    enum Weekday workday,weekend;
    workday = mon; //正确
    weekend = sun; //正确
    Weekday = monday; //错误

库函数:
void *malloc(unsigned int size)

  • 作用是在内存的动态存储区分配一个长度为size的连续空间
  • 函数的值是所分配区域的第一个字节的地址,或者说,次函数是一个指针型函数,返回的指针指向该分配域的开头位置

void *calloc(unsigned N,unsigned size)

  • 作用是在内存的动态存储区中分配N个长度为size的连续空间,这个空间一般比较大,足以保存一个数组

void *free(void *p)

  • 其作用是释放指针变量P所指向的动态空间,使这部分空间能重新被其他变量使用。P应是最近一次调用malloc或calloc函数时得到的函数返回值

void *realloc(void *p,undigned int size)

  • 如果已经通过malloc函数或calloc函数获得动态空间,想改变其大小,可以用recalloc函数重新分配

首先,我们了解文件的概念。"文件"指存储在外部介质上数据的集合

  • 一批数据是以文件的形式存放在外部介质上的
  • 操作系统是以文件为单位对数据进行管理
  • 想找存放在外部介质上的数据,先按文件名找到所指定的文件,然后再从该文件读数据
  • 要向外部介质上存储数据也必须先建立一个文件(以文件名作为标志),才能向它输出数据

文件有不同的类型,在程序设计中主要用到两种
(1) 程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件的内容是程序代码。
(2) 数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据,或货物交易的数据等。

根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。

  • 数据在内存中是以二进制形式存储的,如果不加转换地输出到外存,就是二进制文件
  • 如果要求在外存上以ASCII代码形式存储,则需要在存储前进行转换
  • ASCII文件又称文本文件,每一个字节放一个字符的ASCII代码

在文件系统中,关键的概念是"文件类型指针”,简称”文件指针

  • 每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)
  • 这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名为FILE

打开和关闭文件:
C语言用fopen函数打开数据文件,fopen函数的调用方式为: fopen(文件名,使用文件方式)
fopen("a1","r")

  • 表示要打开名为"a1"的文件,使用文件方式为读入”

  • fopen函数的返回值是指向a1文件的指针

  • 用"r"方式打开的文件只能用于向计算机输入而不能用作向该文件输出数据,而且该文件应该已经存在,并存有数据,这样程序才能从文件中读数据。

  • 不能用"r"方式打开一个并不存在的文件,否则出错

  • 用“w”方式打开的文件只能用于向该文件写数据(即输出文件),而不能用来向计算机输入。如果原来不存在该文件,则在打开文件前新建立一个以指定的名字命名的文件。

  • 如果原来已存在一个以该文件名命名的文件,则在打开文件前先将该文件删去,然后重新建立一个新文件。

  • FILE *fp;

  • fp=fopen("al“w");//文件a1是否存在有不同处理

  • “a“方式打开, 如果希望向文件末尾添加新的数据(不希望删除原有数据),则应该用“a"方式打开·但此时应保证该文件已存在;否则将得到出错信。

  • 打开文件时,文件读写标记移到文件末尾

  • FILE *fp;

  • fp=fopen("a1",“a); //可以在文件a1末尾追加数据

关闭文件用fclose函数。

  • fclose函数调用的一般形式为: fclose(文件指针);例如:
  • (fp)fclose
  • 如果不关闭文件将会丢失数据。

文件读写字符:
fgetc(fp)

  • 从p指向的文件读人一个字符
  • 读成功,带回所读的字符,失败则返回文件结束标志 EOF(即-1)
    fputc(ch,fp)
  • 把字符 ch 写到文件指针变量 ip所指向的文件中
  • 输出成功,返回值就是输出的字符;输出失败,则返回 EOF(即-1)

文件读写:
格式化读写文件的一般调用方式:
fprintf(文件指针,格式字符串,输出列表);
fscanf(文件指针,格式字符串,输入列表);
如:
fprintf(fp,"%d,%6.2f",i,f);
fscanf(fp,"%d,%f",&i,&f);

二进制方式读写文件的一般调用:
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)

随机读写数据文件:
rewind函数的作用是使用文件标记重新返回文件的开头,此函数没有返回值

fseek(文件类型指针,位移量,起始点)

  • 起始点0代表‘文件开始位置’,1为‘当前位置’,2为‘文件末尾位置’
  • 位移量指以起始点为基点,向前移动的字节数,位移量应是long型数据(在数字的末尾加一个字母L)

ftell函数的作用是得到流式文件中文件位置标记的当前位置

  • 由于文件中的文件位置标记经常移动,人们往往不容易知道其当前位置,所以常用ftell函数得到当前位置,用相对于文件开头的位移量来表示。
  • 如果调用函数时出错(如不存在fp指向的文件)ftell函数返回值为-1L

递归的逻辑

#include<stdio.h>
  int main(){
    int age(int n); //声明调用函数,还未调用
    print('No.5,age:%d\n',age(5)); //直接调用函数
    return 0;
  }
  int age(int n){
    int c;
    if(n===1) c=10;
    else c=age(n-1)+2;
    return (c);
  }

posted @ 2023-04-07 10:49  夏季的雨  阅读(170)  评论(0)    收藏  举报