C语言学习笔记

目录

第三章  顺序结构

字符输入函数:

格式输出函数:

格式输入函数: 

第四章  选择结构

第五章 循环结构 

第六章  函数

 函数的定义及返回值:

函数的调用:

函数之间的值传递:(不用做计算)

总结:

第七章 数组

一维数组:

 二维数组:

第八章 指针与变量

指针:

指针与一维数组:

指针与二维数组:

函数与指针: 

第九章 字符数组与字符串

第十章 变量 

变量的作用域

变量的存储类

第十一章 编译预处理

短路规则:当有足够条件确定表达式的值后,剩余部分将不再被计算

例:a=2,b=3,c=4;a>1|| b++>2||c--!=0  结果为1,a=2,b=3,c=4

等价:n等价于n!=0            !n等价于n==0

第三章  顺序结构

c语句分为五类:

控制语句函数调用语句表达式语句空语句复合语句

C不提供输入输出语句,输入输出是由函数完成。

字符输入函数:

例:从键盘输入一个大写字母,将其转换成小写

#include<stdio.h>
int main(){
    char ch;
    ch=getchar();
    ch=ch+32;
    putchar(ch);
    return 0;

 注意:getchar()连续输入多个字符时,中间不能有空格和回车。因为空格也算一个字符

格式输出函数:

格式字符:%d    %f    %e    %c    %s            %f输出时小数点后自动保留六位

一个整数只要在0~255之间,也可以用字符形式输出。

修饰符:m

数据宽度大于m,按实际宽度输出;小于m时,+m左补空格;-m右补空格

a=1234;

printf("%3d",a);                 //a=1234

printf("%-5d",a);                //a=1234空格

printf("%5d",a);                  //a=空格1234 

 修饰符:.n

对实数表示输出n位小数,对字符串表示最多输出的字符个数

f=123.456;printf("%10.2f",f);         //f=空空空空123.46  6为四舍五入

a=2;printf("%%%d",a);  %%d输出%d,%%%d输出%2

格式输入函数: 

int a,b,c;

scanf("%d,%d,%d",&a,&b,&c);    //1,2,3

scanf("%d%d%d",&a,&b,&c);    //123 

 注意:除%c以外,其他格式符均忽略前导空白。%c中空格也算一个字符

 输入时不能规定精度   scanf("%4.2f",&a);   // 错误

第四章  选择结构

if语句:

if(表达式) 语句;

if(表达式1) 语句1;

else 语句2;

if(表达式) 语句;

else  if(表达式2) 语句2;

else  语句n;

     语句如果是复合语句要用{}引起来,缺省{}时,else和最近未配对的if配对

switch语句:

switch(表达式)

{case常量1:语句1;break;

case常量2:语句2;break;

case常量3:语句3;break;

default:语句n+1;break;}

第五章 循环结构 

goto 语句标号;

标号:语句;

while(表达式)

循环体语句;

do 循环体语句;

while (表达式);

for(式1;式2;式3)

{循环体语句;}

for(;;)无限循环,没有终止条件

第六章  函数

 函数的定义及返回值:

形参不可以是常量,只能是变量和表达式;

函数分类:

  • 用户角度:库函数和自定义函数
  • 函数形式:有参函数和无参函数

一般格式: 

函数类型   函数名(形参类型说明表)

{

      说明部分

      语句部分

}

 返回值:

  • void 无返回值型,返回但无值;
  • return 表达式;只能带回一个返回值
  • 返回值的类型由在定义函数时所指定的函数类型决定;

函数的调用:

递归调用:函数直接或间接的调用自己,称为函数的递归调用。除主函数外,任何函数都可以递归调用。

函数之间的值传递:(不用做计算)

简单变量做实参是值传递,传递方向为单项。

总结:

  1. 函数是构成C程序的基本单位,语句是最小单位;
  2. 一个C语言程序由若干函数组成;
  3. 主函数的位置是任意的,从主函数开始,同时结束于主函数;
  4. 实参类型可以与形参类型不一致,以形参的类型为准;
  5. 实参与形参各占用独立的存储单元;
  6. 函数应先定义后调用
  7. 函数不能嵌套定义,可以嵌套调用;
  8. 函数默认的类型为int型。
  9. 函数返回值的类型是由在定义函数时所指定的函类型决定的
  10. 函数直接或间接的调用自己称为递归调用,分为直接递归和间接递归。
  11. .main()函数(主函数)不能调用自己,其他函数都可以调用自己。
  12. 通过return语句,函数只能带回一个返回值;void表示函数无返回值
  13. 函数的实参传递分为值传递和地址传递。

第七章 数组

一维数组:

数据类型     数组名【常量表达式/常量】;   下标[]从0开始写a[0],a[1],a[2]

数组名表示内存首地址,是地址常量。   int   a[5];a为数组名

一维数组初始化:int a[5]={1,2,3,4};未赋值的元素默认为0;   {}中至少赋一个值

一维数组的引用:1.数组先定义,后使用2.逐个引用数组元素,不能一次引用整个数组

 二维数组:

数据类型     数组名【常量表达式】【常量表达式】;行*列=元素个数       

1.排序时按行排序2.分行初始化 3.行可以省略 int a[][3]={1,2,3,4,5,6};

二维数组的初始化:int a[2][3]={{1,2,3},{4,5,6}} ;{}{}两行

                        第0行第1列                      第0行第2列               第0行第3列 

123
456

 int a[2][3]={1,2,3,4,5,6} ;

             ^3表示3列,所以就分为123/456


第八章 指针与变量

指针:

指针即地址,变量即数值 

一、指针的定义

int *t ;    *指针说明符(说明t是指针)

二、指针的赋值

1.通过取地址运算符:&

int a,*p=&a;等价于int a,*p;p=&a;   *p=a;左加*=右去&

2.通过另一指针

int a,*p,*q;p=&a;q=p;

3.空指针的定义:

int *p=NULL;空指针定义后不能引用。

三、运算符

&:取地址运算符

*:取内容运算符

例:语句int *p;*p=0;存在着潜在的风险。对  步骤:1.定义2.赋值3.引用

四、函数之间的地址传递

实参形参双向,实参地址,形参指针

指针与一维数组:

数组名表示内存首地址   int   a[5];a为数组名

  1. a=&a[0]   a+i=&a[i]   *(a+i)=a[i]   
  2. 数组名即常量,不能++/--   
  3. 地址可以相减,但不可以相加

对一维数组的引用:    a[i]         *(a+i)

  1. 数组元素做实参---值传递
  2. 数组元素地址做实参---地址传递
  3. 数组名做实参---地址传递

指针与二维数组:

a是二维数组名,即二维数组的首地址,第0行的地址。

*,[]          *,[]

行地址->列地址->数组元素(内容)

*(a+1)+2 :第1行第2列的地址

*(*(a+2)+3) :第2行第3列的内容

a[1]+2 :第1行第2列的地址

*(a[2]+3) :第2行第3列的内容

二维数组的引用:a[i][j]        *(*(a+i)+j)        *(a[i]+j)          (*(a+i))[j]

数组指针: int (*p)[4]  说明:p为类型为int型数组的指针。数组长度为4

指针数组:int *q[3];q[0]、q[1]、q[2]均为int*  说明:q由三个指针变量构成的数组

函数与指针: 

函数指针:int (*p)();     说明:p是返回值为整型函数的指针,函数的类型可以是任何类型

指针函数:int *p();     说明:p是返回值为整型指针的函数

第九章 字符数组与字符串

字符数组的初始化:1.逐个字符赋值2.用字符串常量

char ch[6]={"hello"};字符串有无{}均可

hello\0

                       ch[0]            ch[1]           ch[2]         ch[3]         ch[4]             ch[5]

字符串结束标志‘\0’,“hello”在内存中占6个字节

char s[5]="ABCD!" ;字符数组,没有\0

ABCD!

字符串指针:char  *p="ABCD";首地址A指向p

字符串的输入与输出:char s[]="ABCD";printf("%s\n",s);------ABCD  从A开始输出直到遇到\0停下 

字符串数组: char s[][5]={"ABC","DEF"};*p=&s[0][0];printf("%s\n",p+5); -----DEF

                              P为A,P+5为D,从D开始输出遇零停下 

ABC\0\0
DEF\0\0

 字符串函数:

一、字符串长度函数(strlen)即所占的字节数,不包括\0

注意:\三位数表示一位八进制数

二、字符串复制函数

char s[20]="ABC";

char t[20]="DEF";

strcpy(s,t);//字符串t复制到字符串s中(后者完全替换前者)

printf("%s,%s\n",s,t);  ------ DEF,DEF

二、字符串连接函数

char s[20]="ABC";

char t[20]="DEF";

strcpy(s,t);//字符串t连接到字符串s之后(后者连接前者之后)

printf("%s,%s\n",s,t);  ------ABCDEF,DEF

三、字符串比较函数

strcmp("ABC","ABB")= 1    A=A,B=B,C>B

串1>串2---1;串1<串2-----负1;串1=串2-----0

数据:scanf|printf     字符:getchar|putchar   字符串:gets|puts

第十章 变量 

变量的作用域

 一、作用域:变量的有效范围

二、局部变量:在复合语句内部或函数内部定义的变量称为局部变量。作用域:自定义位置起,到复合语句或函数的结束。

三、1.C语言变量按其作用域分为局部变量全局变量,按其生存期分为静态变量动态变量
       2.函数的形式参数的作用域为该函数内,全局的外部变量与函数体内定义的内部变量重名时内部变量优先。

变量的存储类

一、自动型:auto (内存中)-----默认类型

          auto      int         a 
      存储类    类型名   变量名
说明:变量默认的存储类为auto型。

二、寄存器型:register(cpu中)

三、静态型:static(内存中)-----内部变量,内部函数,仅允许当前文件使用

int fun(int n)                                   n=2,s=4

{static int s=2;                              n=2,s=6   动态可以重新赋值,静态可以累计使用

S+=n;                                           

 return s;}                                     
main()

{int x=2;

printf("%d\n",fun(x));

printf("%d\n",fun(x));}---------------4,6

静态区:静态局部变量、全局或外部变量初始化在编译,初值为0
动态区:动态变量初值为随机值

静态区生存期:整个程序的结束

动态区生存期:函数调用的结束

四、extern------外部变量,外部函数,允许其他文件使用

第十一章 编译预处理

C语言提供的预处理功能主要有三种:宏定义,文件包含和条件编译。 宏定义不是C语句 
一、宏定义
#define 宏名 替换文本
#define 宏名(参数) 替换文本例如:#define  N   5
在C语言程序中,符号常量的定义要使用预处理命令。

例:#define k 2+3

k/k=2+3/2+3=2+1+3=6

按宏展开计算


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值