c-大海-草率online版(并不打算弄不草率的版本


答题格式注意:

乘号写成[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JH1UTrdD-1666357177792)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017140713490.png)]这样子

程序填空有可能要打分号,注意题目

第1章 概述

c程序的基本单位是函数

c源程序必须且仅有一个main函数

c语言本身没有输入输出语句

第2章 算法

N-S流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpjWhJRp-1666357177794)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221016220114804.png)]

第3章 数据类型、运算符与表达式

一、预备知识

1. 进制转换

2进制、10进制、8进制、16进制的相互转换

其中10->8应算10->2->8,这样比较方便

2. 字节和位

8bit位=1Byte字节(Byte简写成B)

单位从小到大有B、KB、MB、GB、TB 等比,q=1024=210

3. 原码、反码和补码

对于正数而言,原码、反码、补码都是一样的。

例如short b = 6; b 的原码、反码、补码就是0000 0000 0000 0110

1、负数的原码

将一个整数转换成二进制形式,就是其原码。

例如short a = -18; 此时 a 的原码就是1000 0000 0001 0010。

2、负数的反码

负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是 0 变成 1,1 变成 0。

例如short a = -18; 此时 a 的反码是1111 1111 1110 1101。

3、负数的补码

负数的补码是其反码加 1。

例如short a = -18; 此时 a 的补码是1111 1111 1110 1110。

二、数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMHz5Wjs-1666357177795)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221016220424577.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xUy7yoro-1666357177796)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221016220435217.png)]

1. 标识符命名规范

标识符是用来标识变量名、常量名、函数名、数组名、类型名和文件名等的字符序列。

标识符的命名规范:

  1. 只能由字母、数字、下划线组成。且第一个字母不能是数字
  2. 大小写敏感
  3. 不能使用关键字

C语言总共有32个关键字:

auto		break		case
char		const		continue
default		do			double
else		enum		extern
float		for			goto
if			int			long
register	return		short
signed		sizeof		static
struct		switch		typedef
union		unsigned	void
volatile	while

2. 常量

1)浮点数常量

1、十进制:

必须要有小数点:像.0和0.都是合法的

浮点数常量的类型默认是double型,在浮点数常量后加f或F才认为它是float型

2、指数形式:

e或E之前必须有数字;指数必须位整数。如12.3e3,123E2,1.23e4。

规范化形式:小数点前必须且只有一位非零数字

2)整型常量

三种形式:

  • 十进制

  • 八进制:由0开头,如0123、011

  • 十六进制:由0x或0X开头,如0x123,0Xff

整型常量的类型:

  • 根据值所在的范围自动确定类型:如30000为int,65536为long int
  • 在整型常量后加l或L,让它成为long int型常量:如12为int,12L为long int
3)字符常量

用单引号括起来’x’

转义字符\代表的含义:

例:‘A’——‘\101’——‘\x41’——65

转义字符含义
\n换行
\t水平制表
\\反斜线
\’单引号
\"双引号
\ddd1~3位8进制代表的字符(‘\077’和’\77是一样的’)

要背的:

‘A’——65
‘a’——97
‘0’——48
‘\n’——10

4)字符串常量

用双引号"xxx"括起来

"hello"在内存中是 hello\0 占6个字符

""在内存中是 \0 占1个字符

3. 变量

int a; // 定义完未赋值时,a的值是随机的

int a=b=c=5; // 不合法

int a,b,c;
a-b-c-5;// 合法

可用sizeof(类型名/变量名)测量该类型/变量所占的字节数

4. 类型转换

1)自动转换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6wwIMnGM-1666357177797)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221016224342146.png)]

char c;
c=130;
printf(%d”,c);// 输出:-126  

int  a;
a=65536;
printf(%d”,a);// 输出:0
2)强制转换
// 注意:强制转换前一个括号不能省去
(double)(3/2) //这个的值为1.0
(double)3/2 // 这个的值为1.5
(int)3.6 // 值为3,精度损失

三、运算符和表达式

优先级运算符含义要求的运算符分量个数(默认2)结合方向(默认→)
1()
[]
->
.
圆括号
下标
指向结构体成员
结构体成员
2!
++

-
(类型)
*
&
sizeof
逻辑非
自增
自减
负号
类型转换
指针
地址
长度
1
3*
/
%
乘法
除法
取余
4+
-
6<
<=
>
>=
7==
!=
11&&
12||
13? :3
14=
+=、-=、*=、/=
15,逗号

/

两整数相除,结果为整数

%

%要求两侧均为整形数据,其运算结果的符号与被除数相同

++和–

int a=3,k,j;
k=(++a)+(++a);//5+5=10
a=3;
j=(++a)+(++a)+(++a);//5+5+6=16

+=和-=之类

a=12;
a+=a-=a*a;//最后a的值为-264

,逗号

方向:从左到右

整个逗号表达式的值等于最后一个表达式的值

a=15,a*4;//a=15,表达式的值为60
#include <stdio.h>
main()
{   int x,y=7;
    float z=4;
    x=(y=y+6,y/z);
    printf("x=%d\n",x); // 运行结果:x=3
}

==和<=之类

若a=0; b=0.5; x=0.3;
则 a<=x<=b的值为0

注意:应避免对实数作相等或不等的判断,如1.0/3.0*3.0==1.0的结果为0(false)

可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6

这是头文件<math.h>里的函数fabs(x),意思是取绝对值|x|

头文件math.h中只有俩考试会考:

  • sqrt(x)表示 x \sqrt{x} x
  • fabs(x)表示|x|

!和&&和||

注意短路特性:

a=1;b=2;c=3;d=4;m=1;n=1;表达式(m=a>b)&&(n=c>d)的结果为m=0,n=1,因为短路了右边就没运行

xx ? a : b

条件运算符可嵌套,如 x>0?1:(x<0?-1:0)

结合方向:自右向左。如:a>b?a:c>d?c:d 《==》 a>b?a:(c>d?c:d)

三个表达式类型可不同,表达式值取下图中较高的类型

如 x>y?1:1.5 //x>y时值为1.0;x<y时值为1.5

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eoSV2hBu-1666357177798)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221016224342146.png)]

第4章 输入与输出

c语言无输入输出语句,输入输出由函数实现:#include<stdio.h>

getchar()

char c;c=getchar();

putchar()

char a='B';putchar(a);

printf()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x4Cg5Ear-1666357177798)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221016230748390.png)]

main() {    unsigned int u=65535;    printf(”u=%d\n",u); //输出结果:u=-1}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xg17fDgx-1666357177799)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221016231112718.png)]

scanf()

变量的地址,常用取地址运算符&

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XUAZQfJT-1666357177800)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017083750356.png)]

scanf(""%3c%2c", &c1, &c2);输入abcde回车,则c1=‘a’, c2=‘d’

scanf("%4d%2d%2d", &yy, &mm, &dd);输入19991015回车,则yy=1999, mm=10, dd=15

分隔符:一般以空格、TAB或回车键作为分隔符。也可自定义其它字符做分隔符

scanf("%d%o:%x", $a, &b, &c);输入123□123:123回车,则a=123, b=83, c=291

说明:

1)用“%c”时,空格和转义字符作为有效字符输入
2)输入数据时,遇以下情况认为该数据结束:
  1. 遇空格、TAB、回车
  2. 遇宽度结束
  3. 遇非法输入(如%d接收到字符)
3)输入函数留下的垃圾
int x;char ch;scanf("%d", &x);scanf("%c", &ch);输入123回车;得到x=123, ch=10;

第5章 选择结构

switch(表达式){    case E1: 语句组1;        break;    case E2: 语句组2;        break;   	[default: 语句组;    	break;]}这里表达式只能为整型或字符型,不能是浮点数

第6章 循环结构

do{    ...}while(表达式);注意:do while语句中,最后的分号不要漏掉

第7章 数组

下标可以是常量或整型表达式:int a[1+1]

数组名为首个元素的地址常量,不能ch++,可以ch+1

所以scanf("%s", ch);这里不用取地址符&

一、一维数组

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

  • 数组不初始化,其元素值为随机数

  • 数组部分初始化时,剩余的为0(对于字符串,剩余的初始化为\0)

  • 当给全部数组元素赋初值时,可不指定数组长度。如int a[] = {1,2,3};

二、二维数组

  • 分行初始化:
    • 部分初始化,剩余的为0,如int a[2][3]={{1,2},{4}}得到{{1,2,0},{4,0,0}}
    • 第一维长度可省略初始化,如int a[][3]={{1},{4,5}}得到{{1,0,0},{4,5,0}}
  • 不分行初始化:
    • int a[2][3]={1,2,4};(这个例子也是部分初始化)得到{{1,2,4},{0,0,0}}
    • int a[][3]={1,2,3,4,5};(这个例子也是第一位长度省略)得到{{1,2,3},{4,5,0}}

三、字符数组和字符串

char c="A"写法错误

讲字符串长度时,不包含\0

用"%s"输出时,遇’\0’结束

字符串处理函数

包含在头文件string.h

puts(str_arr)

输出字符串,输出完换行

gets(str_arr)

例 输入"How"回车

  1. scanf("%s", a);处理时,回车还留在缓冲区里。scanf遇到空格或回车停止
  2. gets(a);处理时则没有。gets遇回车停止

1.2.两者都会在最后自动添加’‘\0’

strcat(stra_arr1, str_arr2 )

把str_arr2连到str_arr1后面

说明:

  1. str_arr1必须足够大
  2. 连接前,两串均以’‘\0’结束;连接后,str_arr1的’\0’取消,新串最后加’\0’
strcpy(str_arr1, str_arr2)

将str_arr2拷贝到str_arr1中去。

char a[10];a="china";//是错的// 应该用:strcpy("china", a);
strcmp(str_arr1, str_arr2)

字符串比较不饿能用==,必须用strcmp

strlen(str_arr)

计算字符串长度,不包括’\0’在内

char s[] = "\x69\072\n";长度为3

char s[] = "\x69\082\n";长度为1

第8章 函数

函数参数传入顺序:自右向左

int i=3;printf("%d,%d", i++, ++i);// 输出4,4

函数的返回值:

// 返回值类型未定义则默认为intmax(){    return 6.34f;}// 最后返回的是整型6

函数中可以无return,则到最后自动返回

当被调函数定义在主调函数后面时,应进行声明

不允许函数嵌套定义,但允许嵌套调用

递归调用——求最大公约数(辗转相除法):

int gcd(int a, int b){    int t;    do{        t=a%b;        a=b;        b=t;    }while(b!=0);    return(a);}

最小公倍数=数1*数2/最大公约数

int lcm(int a, int b){    int t;    t=a*b/gcd(a.b);    return (t);}

数组名作函数参数是地址传递

变量的存储属性

变量的存储类型

  • auto——自动型(默认)
  • static——静态型
  • extern——外部型

extern:

定义:在函数外定义,可为本文件所有函数共用

有效范围:从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件

若外部变量与局部变量同名,则外部变量被屏蔽

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcAJjp7Y-1666357177801)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017110418250.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1onMJq9j-1666357177801)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017110441899.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5f3Xl80r-1666357177802)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017110557048.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hvZ3AqVk-1666357177803)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017110740497.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t6PtrDnk-1666357177803)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017110857638.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Clw6iXWf-1666357177804)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017111511252.png)]

第9章 预处理命令

#define

#define POWER(x) x*xx=4;y=6;z=POWER(x+y);宏展开:z=x+y*x+y; //答案为34一般写成:#define POWER(x) ((x)*(x))宏展开:  z=((x+y)*(x+y)); // 答案为100

#include

第10章 指针

指针变量占2个字节

指针定义未赋值时,指针里的值为随即地址

指针p1+指针p2是错的

int a[11]={1,2,3};int *p=a;// a++不行,p++可以,a+1也可以如果p=&a[3]p[2]的值为a[5]
char *cp="Hello";()int *p={1,2,3};(×)//---------------------------char str[10], *cp;int a[10], *p;str = "Hello";(×)cp = "Hello";(√)a={1,2,3};(×)p={1,2,3};(×)

对于二维数组:

a[0][2]=*(a[0]+1)=*(*(a+0)+1)

第11章 结构体、共用体和枚举类型

一、结构体

struct xxxx{    xxx xx;    xxx xx;};

结构体定义不分配内存,使用(有变量)才分配

引用方式:xxxx.xx

指针引用方式:p->xx

二、共用体

共用体变量任何时刻都只有一个成员存在

共用体长度=最长成员所占字节数

引用:

起作用的成员是最后一次存放的成员

不能再定义共用体变量时初始化

案例1

void main(){    union int_char{        int i;        char ch[2];    }x;    x.i=24897;    printf("i=%o\n", x.i);    printf("ch0=%o,ch1=%o\nch0=%c,ch1=%c\n",          x.ch[0], x.ch[1], x.ch[0], x.ch[1]);}/*运行结果:i=60501ch0=101,ch1=141ch0=A,ch1=a*/  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gog5dvEK-1666357177805)(D:\Users\玄离\Pictures\Typora\c语言-大海\image-20221017130300258.png)]

案例2

#include<stdio.h>void main(){	union{		long b;		char c[4];	}s;	s.b=0xa0000L;	s.c[0]+='A';	printf("%d%c\n", s.c[2],s.c[0]); //输出10A}

三、枚举类型

enum weekdays {Sun,Mon,Tue,Wed,Thu,Fri,Sat};

枚举元素作为常量是有值的──定义时的顺序号(从0开始),所以枚举元素可以进行比较,比较规则是:序号大者为大

枚举元素的值也是可以人为改变的:在定义时由程序指定。

例如,

enum weekdays {Sun=7, Mon=1 ,Tue, Wed, Thu, Fri, Sat};

则Sun=7,Mon=1,从Tue=2开始,依次增1。

第12章 文件

处理文件的函数有:打开fopen(),关闭fclose()。读写fputc()、fgetc()、fpinrtf()、fscanf()

只需注意fopen(“打开路径”,“打开模式”)的第二个参数:

r读 w写 a追加

rt和r是一样的

r+和r必须已存在该文件。w和a和w+和a+可以不存在该文件,不存在时会自动新建

r+与w+的区别:w+会先清空文件

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值