C语言 第一~五章

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
C语言基础知识
第一章 C语言概述
第二章 数据类型及其运算
第三章 顺序结构
第四章 选择结构
第五章 循环结构
第六章 函数
第七章 数组
第八章 指针
第九章 字符串
第十章 变量的作用域与存储类
第十一章 编译预处理
第十二章 结构体与共用体
第十三章 位运算


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • C语言基础知识
      • 一、进制转换
      • 二、字符在计算机内部的表示
  • 第一章 C语言概述
      • 一、程序
      • 二、结构化程序设计
      • 三、简单的C程序
      • 四、C语言标识符
  • 第二章 数据类型及其运算
      • 一、数据类型
        • (一)、整型数据
        • (二)、实型数据
        • (三)、字符型数据
      • 二、常见运算符
      • 三、赋值表达式
      • 四、自加自减与逗号运算符
  • 第三章 顺序结构
      • 一、赋值语句
      • 二、数据的输出
      • 三、数据的输入
      • 四、复合语句和空语句
      • 五、空瓶子交换原理、和差差
  • 第四章 选择结构
      • 一、关系运算与逻辑运算
            • (一)、关系运算
            • (二)、逻辑运算
      • 二、if语句
            • (一)单分支的if语句
            • (二)双分支的if语句
            • (三)条件运算符
            • (四)switch语句
  • 第五章 循环结构
      • 一、while语句
      • 二、do-while语句
      • 三、**`while与do-while语句的区别`**
      • 四、for语句
      • 五、break 与 continue 语句
            • (一)break 语句
            • (二)continue 语句
      • 六、循环的嵌套


C语言基础知识

一、进制转换

1、进位计数制
(D)十进制 ——无下标,默认十进制
(B)二进制 二进制转十进制:8421
(O)八进制
(H)十六进制
2、非十进制转为十进制
规则:按权展开计算
方法:

  1. 写上标
  2. 按权展开
  3. 求和

3、十进制转为非十进制
方法:

  1. 整数:转几除几,倒取余
  2. 小数:转几乘几,正取整

二、字符在计算机内部的表示

ASCII码:美国信息交换标准码采用7位二进制进行编码
0000000B~1111111B
ASCLL码范围:0~127 共128个编码

  1. A~Z:65 ~ 90
  2. a~z:97 ~ 122
  3. 0~9:48 ~ 57
  4. 空格(space):32

大写转小写:大写ASCLL+32=小写ASCLL
小写转大写:大写ASCLL-32=小写ASCLL


第一章 C语言概述

一、程序

1、由高级语言编写的程序称为源程序

  • 高级语言
  • 低级语言

2、由C语言编写的程序扩展名为.c(源文件/程序),经过编译后生成文件的扩展名为.obj(目标文件/程序),经过链接后生成文件的扩展名为.exe(可执行文件/程序)。

.c————(编译)————→.obj————(链接)————→.exe
(编辑————编译————链接————执行)

3、C语言源程序的执行过程为:编译链接

二、结构化程序设计

C语言是一种结构化的程序设计语言,它提供了三种基本结构语句,结构化程序通常由三种基本结构组成,包括顺序结构、选择/分支结构、循环结构

三、简单的C程序

C程序的特点:

  1. C程序由函数组成函数是组成C程序的基本单位。一个程序中包含1~多个函数。
  2. C程序总是由主函数开始执行,由主函数开始执行,由主函数结束,主函数的位置是任意的
  3. 每条语句最后加分号代表结束。
  4. 语句是组成C程序的最小单位
  5. 一行可写一条多条语句,一条语句也可写成一行或多行。
  6. 单行注释://
    多行注释:/* */

四、C语言标识符

1、标识符的组成:

  • 标识符由字母数字下划线祖成
  • 开头不能是数字,标识符区分大小写

2、 标识符的分类

选项中既有关键字,又有用户标识符,优先选择用户标识符

  1. 关键字:32个均为小写字母,例:int

  2. 预定义标识符:
    scanf(输入函数)、printf(输出函数)、
    include(文件包含)、define(宏定义)

  3. 用户标识符:C语言关键字不能用于用户标识符


第二章 数据类型及其运算

一、数据类型

1、基本数据类型

  • C语言的数据类型有基本数据类型和非基本数据类型。
    常见的基本数据类型包括:整型实型(浮点型)字符型
  • 常量:在程序运行过程中,其值不可改变的量。
    eg:123、‘a’
  • 变量:在程序运行中,其值可以改变的量。
    eg:int a;float f;
(一)、整型数据

1、整型常量

  • %d十进制:345,-345
  • %o八进制:023,065(前导0)
  • %x十六进制:0x123,0Xabc(前导0x或0X)

2、整型变量
未赋值的变量默认为随机值
%d输出:整型变量只接受整型部分

  • int 基本型 TC系统占2个字节;VC系统占4个字节
  • short 短整型 占2个字节
  • long 长整型 占4个字节
  • unsigned 无符号型(了解)
(二)、实型数据

1、实型常量

  • 小数点式:
    由数字、正负号、小数点组成。
    eg:0.11;-5.0;-.23
    组成规则:
    (1)必须有小数点;
    (2)小数点至少一边有数字。

  • 指数形式:
    由E或e组成
    eg:12.34E+2→12.34*10^+2;-3.e+2;
    组成规则:
    (1)E/e左右两边都要有数字;
    (2)指数部分必须是整数(E/e的右边为整数)

严格要求的E/e左边如果是小数点式的话,小数点左侧必须有且只有一位非0值。

2、实型变量
%f:实型小数,保留6位小数(不足6位补0,超过6位四舍五入)

  • 单精度:float 占4个字节
  • 双精度:double 占8个字节
    实型变量未说明情况下默认double型

例:(看字节数最大的

int x;float y;double z;,则表达式x*z-y的值的类型是double
(三)、字符型数据

1、字符常量

  • (1)常规字符常量:‘a’、'6’单引号括起一个字符

  • (2)转义字符常量:
    ‘\n’:回车换行
    ‘\t’:横向跳格(Tab)'\t'跳八列,\t加上\t前所有字符共8位,用空格补齐。
    ‘\b’:左移覆盖
    ‘r’:回车(光标回到行首,并不换行)
    ‘\’:反杠\
    ‘\’’:单引号'
    ‘\‘’’:双引号"
    ‘\ddd’:1~3位八进制整数表示的1个字符
    ‘\xhh’:1~2位十六进制整数表示的1个字符 eg:‘\x56’

  • (3)字符串常量 :“ABCD” 双引号括起多个字符
    一个字符占1个字节——‘A’:占1个字符
    一个汉字占2个字节——“A”:占2个字符
    字符串中要有'\0'(可省略)作为字符串结束的标志
    " ":为空字符串

2、字符变量
char——占1个字节
%c:输出字符原型
%d:输出字符的ASCLL码值
给字符型变量赋值只能赋1个字符

字符不能加减:
法1:要转为ASCLL码值
法2:字符+整型:字符向后移整型位
字符-字符:距离差(整数)

二、常见运算符

1、算术运算符

  • 基础的算术运算符
    +、-、*、/、%(取余)
    (1)a/b:若a、b均为整型,结果为整型不四舍五入
    ---------------若a、b其中任意1个为实型,结果为实型。
    (2) %(取余):出现负数,余数的符号与被除数一致(与%左边的数一致)
    ------------------------ 小%大→小

2、运算符的优先级与结合性

  • 优先级:次序
    ()–→+(取正)、-(取负)–→ *、/、% --→+(加)、-(减)
  • 结合性:方向
    ()、*、/、%、+(加)、-(减):自左向右
    +(取正)、-(取负):自右向左

3、强制类型转换

  • (类型名)表达式
    eg:(int)2.0

三、赋值表达式

1、赋值运算符

形式:变量名=表达式 赋值符号左边只能是变量
优先级:仅高于逗号表达式
结合性:自右向左
说明:先计算表达式的值,然后将其赋值给变量

2、复合赋值运算符
+=、-=、*=、/=、%=

优先级:仅高于逗号运算符
结合性:自右向左

四、自加自减与逗号运算符

1、自加自减运算符
++变量、--变量、变量++、变量--
自加自减的运算对象必须是变量(单独变量)

  • 前值用法:++i 或 - -i(变量立即变化,前值用新值)
    说明:先将变量 i 的值加1或减1,然后在使用变量 i 的值。
  • 后值用法:i++ 或 i- -(后值及原值,用原值再变化)
    说明:先使用变量 i 的值,然后再将变量 i 的值加1或减1。
  • 拆分原则:自加自减在前,先加减1
    ---------------自加自减在后,后加减1

2、逗号运算符
表达式1,表达式2,.......,表达式n

说明:自左向右顺序求值,将表达式n的值作为整个逗号表达式的值
优先级:最低
结合性:自左向右


第三章 顺序结构

一、赋值语句

赋值语句构成:在赋值表达式的后面加上分号就构成了赋值语句。
eg:a=2;b=a+3; ++i;
赋值符号的左边只能是变量,不能是表达式

二、数据的输出

1、字符原样输出

int a = 123;
float f = 123.45;
char c = 'a';
printf("a=%d,f=%f,c=%c\n",a,f,c);
printf("<%d,%f,%d>\n",a,f,c);
输出结果:a=123,f=123.450000,a
		 <123,123.450000,97>

2、指定宽度输出

指定>实际:左补空格
指定<实际:原样输出

in a = 234;
printf("a=%4d\n",a);// %4d:4位十进制整数(位数不够,左补空格)
printf("a=%2d\n",a);// %2d:2位十进制整数
输出结果:a= 234
		 a=234

3、

%m.nf m:代表数据总长
. n:代表小数位数四舍五入
. 小数点占一位

指定>n:四舍五入
指定

float f = 24.35678;
printf("f=%8.3f\n",f);
printf("f=%11.6f\n",f);
输出结果:f=  24.357
		 f=  24.356780

4、

int a = 1,b = 2;
printf("%d\n",(a,b));// 一个输出项,(a,b)逗号运算=b
printf("%d\n",a,b);//只一个输出格式,输出a
输出结果:2
		 1

5、
int定义的整型范围:-32768~32767(int数据范围)
32767+1=-32768

int a = 32767,b = 1;//假定int型占2个字节
printf("%d\n",a+b);
输出结果:-32768

无符号65535==有符号-1

6、
无符号数据范围:0~65535
%u:无符号十进制整数

unsigned int a = 65535,b = 1;
printf("%u\n",a+b);
输出结果:0

三、数据的输入

1、&:取地址运算符
整型数据输入格式,如果没有其他符号分隔,用空格或回车分隔

int x,y;
scanf("%d%d",&x,&y);
printf("%d,%d\n",x,y);
现要给x赋值2,y赋值5
输入写法:2 5
输出结果:2,5

2、字符原样输入

int a,b;
scanf("a的值:%d,b的值:%d",&a,&b);
printf("%d,%d\n",a,b);
现要给a赋值1,b赋值2,
则输入写法:a的值:1,b的值:2
输出结果:1,2

3、指定输入数据的宽度

输入宽度不得少于指定宽度

int a,b,c;
scanf("%1d%2d%3d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);
现从键盘输入:9876543210
输出结果:987654

4、实型数据输入

输入数据时,不能指定小数位数

错误示范:
float f;
scanf("%4.2f",&f);×

5、字符的输入与输出
(1)输入写法:%c前不能随便加空格

char c1,c2;
scanf("%c%c",&c1,&c2);
printf("%c,%c\n",c1,c2);
若给c1赋值字符A,c2赋值字符B
正确的输入写法为:AB
输出为:A,B

(2)字符输入函数:getchar
(3)字符输出函数:putchar
getchar,putchar只针对字符的输入和输出

char ch;
ch = getchar();
putchar(ch);

四、复合语句和空语句

1、复合语句:{ a=2;b=3;c=a+b; }

2、空语句: ;

五、空瓶子交换原理、和差差

1、空瓶子交换原理

输入两个整数a和b,将其值交换后输出
设:输入1 2
int a,b,t;
scanf("%d%d",&a,&b);
t=a;a=b;b=t;
printf("%d,%d\n",a,b);

2、和差差

输入两个整数a和b,将其值交换后输出
设:输入1 2
int a,b;
scanf("%d%d",&a,&b);
a=a+b;b=a-b;a=a-b;
printf("%d,%d\n",a,b);

第四章 选择结构

一、关系运算与逻辑运算

C语言中的逻辑值:C语言将非0值当作真(1),0值当作假(0)

(一)、关系运算

1、关系运算符
>、>=、<、<= > ==(等于),!=(不等于)
优先级:前四者高于后两者
结合性:自左往右比较

2、关系表达式
成立———1
不成立——0

(二)、逻辑运算

1、逻辑运算符
!(非),&&(与),||(或)
优先级:!→ && → ||
结合性:!:自右向左
------&&、||:自左向右
&&运算优先级高,先结合为一个式子(不先算);后从左向右计算

表达式 等价于 表达式!=0
!表达式 等价于 表达式==0

2、逻辑表达式

&&:且(条件同时满足)
有0出0;全1才1

0&&0=0、 0&&1=0、 1&&0=0、 1&&1=1

||:或(只满足一个即可)
有1出1;全0才0

0||0=0、 0||1=1、 1||0=1、 1||1=1

!:取反

!0=1、 !1=0

3、短路运算

  • 0&&:短路
  • 非0&&:继续
int a = 1;b = 2;c = 3;
执行表达式(a>b)&&(c=1)后c的值是3
  • 非0||:短路
  • 0||:继续
int a = 1;b = 2;m = 2;n = 2;
执行表达式(m=a<b)||++n后,n的值是2

二、if语句

(一)单分支的if语句

if(条件)语句;

一个if条件只能控制一条语句

1.以下代码功能:a,b,c排序

main()
{
	float a,b,c,t;
	scanf("%f,%f,%f",&a,&b,&c);
	if(a>b) { t=a;a=b;b=t; }//复合语句
	if(a<c) { t=a;a=c;c=t; }
	if(b<c) { t=b;b=c;c=t; }
	printf("%f",c);
}
输入:1.1,3.1,2.1
输出:1.100000
(二)双分支的if语句

if(条件) 语句1;
else 语句2;

就近原则:
else总和上面的、离它最近的、未配对的if进行配对

1、if条件若为赋值语句,只有赋0值为假(赋字符为真)

int a=1;c=5;
if(c=a+=1) printf("来输出我\n");
else printf("不输出我\n");

输出结果:来输出我

2、无论条件真假,经过自加自减变量都会加1或减1

int x;
scanf("%d",&x);
if(x++>5) printf("%d\n",x);//条件执行后x自加1
else printf("%d\n",x--);

1.从键盘输入数字6,则输出结果为7
2.从键盘输入数字4,则输出结果为5
(三)条件运算符

条件?值1:值2

执行过程:左真右假条件为真结果为值1,条件为假结果为值2

优先级:仅高于赋值与逗号
结合性:自右向左

已知a=1,b=2,c=3,d=4,x=5,则语句x=(a>b?a:c<d?c:d);执行后x的值为3.
a>b:条件
a:值1
c<d?c:d为值2
(四)switch语句
  1. switch语句的执行过程是先进入再向下
  2. case后面的表达式必须为整型常量,整型常量表达式,字符常量
  3. case后的数值是无序的。
  4. case1和case2可共用一个语句。
  5. default表示”其他“分支,可有可无,位置任意。
1int x,a=0,b=0;
scanf("%d",&x);
switch(x)  //()中可以为常量、变量、表达式,但不能为实型
{
	case 0:a++;  //case后的表达式:整型常量,常量表达式或字符常量(对应的ASCLL码值)
	case 1:b++;
	default:a++;b++;  //default为其他
}
printf("%d,%d\n",a,b);

输入0	输出22
输入1	输出12
输入2	输出11

例2:i=0,无case0时,返回default并执行该语句及以下语句。

2.1switch(i)
{
	default:printf("%d",i);
	case 1:printf("%d",i);
	case 2:printf("%d",i);
}
输出结果:000112
2.2#include 
main()
{
	int x=2;
	switch (x<0)
	{
	case 1:printf("1");
	default:printf("3");
	case 2:printf("2");
	}
}
输出为:32

例子2.3:输出为空

例子2.3
#include 
main()
{
	int x=2;
	switch (x<0)
	{
	case 1:printf("1");
	case 2:printf("2");
	}
}
例子:2.4
#include 
main()
{
	int x=2;
	switch (x>0)
	{
	case 1:printf("1");
	case 0:printf("0");
	default:printf("3");
	
	}
}
输出:103
例子:2.5
#include 
main()
{
	int x=2;
	switch (x>0)
	{
	case 1:printf("1");
	default:printf("3");
	case 0:printf("0");
	}
}
输出:130

第五章 循环结构

一、while语句

while(条件) 语句;

条件 就是 范围、为关系表达式时可判断真假
执行过程:先判断条件,当条件为真时执行循环语句,直到条件为假循环结束。

  • 循环和if一样,条件后只能控制一条语句。
  • 循环三要素:初值、条件、增量。
  • 循环次数:看条件成立多少次。

1.输出在循环体内部,循环几次输出几次;
输出在循环体外部,只输出一个总值。

1int n=1;
while(n<=3)
{
	printf("%d\n",n);
	n++;
}
输出结果:1
		 2
		 3	
  1. x%10:取末位
    x/10:消末位
2int x=1234,s=0;
while(x!=0)
{
	s+=x%10;  //循环累加
	x/=10;
}
printf("%d\n",s);
输出结果:10

二、do-while语句

do 语句;
while(条件);为一个语句

while后分号不可省略,代表循环语句结束。

执行过程:先执行语句,再判断条件,当条件为真时继续执行循环语句,直到条件为假循环结束。

循环次数:条件成立次数
循体(循环语句 )执行次数:循环次数+1

int i=1,s=0;
do
{ s=s+i;i++; }  //s=s+i循环累加
while(i<=3);
printf("%d",s);
输出结果:6
循环次数:2次
循体执行次数:3

三、while与do-while语句的区别

1.do-while语句至少执行一次,while语句可能一次也不执行。
2.do-while语句结束的标志是while后面的分号。

1.求输入整数的个位数字之和

#include 
main()
{
	int i,sum=0;
	scanf("%d",&i);
	while(i!=0)
	{
		sum+=i%10;
		i/=10;
	}
	printf("sum is %d\n",sum);
}

2、求输入整数的个位数字之积

#include 
main()
{
	int i,j=1;
	scanf("%d",&i);
	while(i!=0)
	{
		j*=i%10;
		i/=10;
	}
	printf("j is %d\n",j);
}

四、for语句

for(初值;条件;增量) 语句;

		┌————————————---┐
		↓			    |
		↓   T		    |
初值——→条件---——→语句——→增量
		|F
		↓
	   结束

1.i=1,for( ;条件;增量) 语句;----------------(省略式1,执行式2)
2.for(i=1; ;i++) s=0+i;--------------------(省略式2,默认条件为真[1])-----死循环程序
3.for(i=1;i<20; ) { s=s+i;i++; }-----------(省略式3,回执式2)-------------i++为增量
4.for( ; ; ) 语句;--------------------------(3式都可省)-------------------分号不能省略且只有2个
5.for(x=1,y=1;y&&(x>4);x–) ;--------------(空循环体)

五、break 与 continue 语句

(一)break 语句
  • break;
  • 跳出终止当前循环
  • break在谁内部就跳出谁
例子:
main()
{
	int i;
	for(i=0;i<3;i++)
	switch(i)
	{
		case 1:printf("%d",i);
		case 2:printf("%d",i);break;  //跳出switch语句
		case 3:printf("%d",i);
	}
}
输出:0112
(二)continue 语句
  • continue;
  • 功能:结束本次循环继续

continue:1.while循环----------返回条件
2.do-while循环-------返回条件
3.for循环------------返回式3增量

#include 
main()
{
	int y;
	for(y=12;y>0;y--)
	if(y%3==0)
	{
		printf("%d",--y);
		continue;
		printf("%d",y--);
	}
	printf("\n");
}
输出:11852

六、循环的嵌套

  • 循环次数:内循环次数×外循环次数
例子;
int i,j,s;
for(i=2;i<4;i++)
	for(s=0,j=3;j<5;j++) //内层循环当作外层循环语句
	s+=i*j;
printf("%d\n",s);
  • 更相减损法 求 最大公约数
例子:
int a=18,b=11;
while(a!=b)
{
	while(a>b) a-=b; //为假时返回到条件
	while(b>a) b-=a;
}
printf("%d,%d\n",a,b);
输出:1,1

例子:

下面程序完成判断某一个数 m 是否为素数,
如果是则输出”m是素数!“,
否则就输出”m不是素数!“,请选择填空:
main()
{
	int i,m;
	scanf("m=%d",&m);
	for(i=2;i<m;i++)
	{
		if(m%i==0)
		{
			printf("%d不是素数!\n",m);break;
		}
		else continue;
	}
	if(i==m) printf("%d是素数!\n",m);
}

你可能感兴趣的:(c语言,学习)