Fork me on GitHub

C语言常考知识点

  1. 标准C语言编写的程序都是以main()作为开头,有且只能存在一个main

  2. 主函数中的语句用换括号{}括起来

  3. C语言是以分号;(英文中的分号)结尾的

  4. C程序总是以主函数开始执行,与它在程序中的位置无关

  5. 不能在注释中添加另一个注释

  6. C语言中没有提供专门的输入/输出的语句,输入/输出操作是通过调用C的标准库函数来实现的

  7. 负数是以补码的形式在电脑中储存的

  8. 一个函数包括声明部分执行部分

  9. C语言中的下标都是从0开始的

  10. 计算机中数组计算所占内存的方法

    • 一维数组在内存中占用的字节数为:数组长度 * sizeof(基类型)
    • 二维数组在内存中占用的字节数为:第一维长度 * 第二维长度 * sizeof(基类型)

C语言按字符读写文件

按字符读写文件

ANSI C提供了丰富的文件读写函数。包括按字符读写,按数据块读写,按格式读写等。

读写文件中的字符

​ 函数fgetc()用于从一个以只读或读写方式打开的文件上读字符。fgetc()函数的原型为:

1
int fgets(FILE *fp);

其中fp是由函数fopen()返回的文件指针。

功能:从fp所指的文件中读取一个字符,并将位置指针指向下一个字符。若读取成功则返回该字符,若读到文件末尾,则返回EOF(EOF是一个符号常量,在stdio.h中定义为-1)

​ 函数fputc()用于将一个字符写到一个文件上。fputc()的函数原型为:

1
int fputc(int c,FILE *fp);

其中fp是由函数fopen()返回的文件指针。c是要输出的字符(尽管C定义为int型,但只能写入低字节)

功能:将字符c写在文件指针fp所指的文件中。若写入错误,则返回EOF,否则返回字符c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include<stdlib.h>

int main() {
FILE *fp;
char ch;
fp = fopen("D:\\demo.txt","w"); //此处也许是编译器问题,我的Clion必须加上demo所在的盘位置才行
if(fp == NULL)
{
printf("Failure to open demo.text!\n");
exit(0);
}
ch = getchar();
while(ch != '\n')
{
fputc(ch, fp);
ch = getchar();
}
fclose(fp);

return 0;
}


可以在D盘的位置找到demo.txt 确实里边写的内容和我们输入的内容一致

注意:使用getchar()输入字符时,是先将所有字符送入缓冲区,直到键入回车换行符才从缓冲区逐个读出并赋值给变量ch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char ch;
int i;
fp = fopen("D:\\demo.bin","wb"); //此处也许是编译器问题,我的Clion必须加上demo所在的盘位置才行
if(fp == NULL)
{
printf("Failure to open demo.bin!\n");
exit(0);
}
for(i = 0; i < 128; i++)
{
fputc(i,fp);
}
fclose(fp);
fp = fopen("D:\\demo.bin","rb"); //此处也许是编译器问题,我的Clion必须加上demo所在的盘位置
if(fp == NULL)
{
printf("Failure to open demo.bin!\n");//否则这里会报错
exit(0);
}
while((ch = fgetc(fp)) != EOF)
{
putchar(ch);
}
fclose(fp);
return 0;
}

在程序倒数的while循环中,通过检查函数fgets()的返回值是否为EOF来判断是否读到文件末尾,若读到末尾就返回EOF,即-1。

除此之外,还可以使用函数feof()来判断是否读到文件末尾。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include<stdlib.h>
#include <ctype.h>
int main()
{
FILE *fp;
char ch;
int i;
fp = fopen("D:\\demo.bin","wb");
if(fp == NULL)
{
printf("Failure to open demo.bin!\n");
exit(0);
}
for(i = 0; i < 128; i++)
{
fputc(i,fp);
}
fclose(fp);
fp = fopen("D:\\demo.bin","rb");
if(fp == NULL)
{
printf("Failure to open demo.bin! \n");
exit(0);
}
while((ch = fgetc(fp)) != EOF)
{
if(isprint(ch))
printf("%c\t",ch);
else
printf("%d\t",ch);
}
fclose(fp);
return 0;
}

除本例使用的方法外,还可以使用函数feof()来判断是否读道文本的末尾

1
2
3
4
5
6
7
8
while(!feof(fp))
{
ch = fgetc(fp);
if (isprint(ch))
printf("%c\t",ch);
else
printf("%d\t",ch);
}

为了解决如果文本末尾的文件结束符又是一个-1,或不可打印字符不能被读出的问题

可以将isprint()判断是否可以打印字符改为函数iscntrl()判断,即将其改为:

1
if(!iscntrl(ch))

函数feof()总是在读完文件所有内容后再执行一次读文件操作(将文件结束符读走,但不显示)才能返回真(非0)值

读写文件中的字符串

从文件中读取字符串可使函数fgets()其函数原型为:

1
char *fgets(char *s, int n, FILE *fp);

作用:该函数从fp所指的文件中读取字符串末尾添加‘\0’,然后存入s,最多读n-1个字符。当读到回车符、到达文件尾或读满n-1个字符时,函数返回该字符串的首个地址。即指针s的值,读取失败时返回空指针NULL。

**函数ferror()**:用来检测是否出现文件错误,如果出现失误,则函数返回一个非0值,否则,函数返回0值

使用

1
2
if(ferror(fp))
printf("Error on file\n");

fputs()函数

1
int fputs(const char *s,FILE *fp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
#include<stdlib.h>
#define N 80
int main()
{
FILE *fp;
char str[N];
if((fp = fopen("D:\\demo.txt","a")) == NULL)
{
printf("Failure to open demo.text! \n");
exit(0);
}
gets(str);
fputs(str,fp);
fclose(fp);
if((fp = fopen("D:\\demo.txt","r")) == NULL)
{
printf("Failure to open demo.text! \n");
exit(0);
}
fgets(str,N,fp);
puts(str);
fclose(fp);
return 0;
}

该程序可以实现对文件进行书写,但不更改源文件中的内容

在每次运行上述程序时,从键盘输入的字符串都会被添加到demo.txt的末尾

​ 与gets()不同的是,fgets()从指定的流读字符串,读到换行符时,将换行符也作为字符串的一部分读到字符串中来。同理,与puts()不同的是,fputs()不会早写入文件的字符串末尾加上换行符。

按数据块读写文件

函数fread()和fwrite()用于一次读取一组数据,即按数据块读写文件。

fread()函数

函数的原型

1
unsigned int fread(void *buffer, unsigned int size, unsigned int countn, FILE *fp);

功能:fread()函数的功能是从fp所指的文件中读取数据块并存储到buffer指向的内存中。

参数的用途:buffer是待读入数据块的起始地址。size是每个数据块的大小(待读入的每个数据块的字节数)。count是最多允许读取的数据块个数(每个数据块size个字节)。

返回值类型:函数返回的是实际写入的数据块个数

块数据的读写使我们不再局限于一个只读取一个字符、一个单词或一行字符串,它允许用户指定想要读写的内存放大小,最小为1个字节,最大为整个文件。

此实例的程序的前提是在D盘中已经有了一个名为score.txt文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include<stdio.h>
#include<stdlib.h>
#define N 30
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long studentID;
char studentName[10];
char studentSex;
DATE birthday;
int score[4];
float aver;
}STUDENT;
void InputScore(STUDENT stu[],int n,int m);
void AverScore(STUDENT stu[], int n, int m);
void WritetoFile(STUDENT stu[],int n);
void PrintScore(STUDENT stu[], int n, int m);
int ReadfromFile(STUDENT stu[]);
int main()
{
STUDENT stu[N];
int n, m = 4;
printf("How many student?\n");
scanf("%d",&n);
InputScore(stu,n,m);
AverScore(stu,n,m);
WritetoFile(stu,n);
n = ReadfromFile(stu);
PrintScore(stu, n, m);
return 0;
}
void InputScore(STUDENT stu[],int n,int m)
{
int i,j;
for(i = 0; i < n; i++)
{
printf("Input record %d:\n",i+1);
scanf("%ld",&stu[i].studentID);
scanf("%s",stu[i].studentName);
scanf(" %c",&stu[i].studentSex);
scanf("%d",&stu[i].birthday.year);
scanf("%d",&stu[i].birthday.month);
scanf("%d",&stu[i].birthday.day);
for(j = 0; j < m; j++)
{
scanf("%d", &stu[i].score[j]);
}
}
}
void AverScore(STUDENT stu[], int n, int m)
{
int i, j, sum;
for(i = 0; i < n; i++)
{
sum = 0;
for(j = 0; j < m; j++)
{
sum = sum + stu[i].score[j];
}
stu[i].aver = (float)sum / m;

}
}
void WritetoFile(STUDENT stu[],int n)
{
FILE *fp;
int i,j;
if((fp = fopen("D:\\student.txt","w")) == NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
fwrite(stu, sizeof(STUDENT), n, fp);
fclose(fp);
}
int ReadfromFile(STUDENT stu[])
{
FILE *fp;
int i,j;
if((fp = fopen("D:\\student.txt","r")) == NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
for(i = 0; !feof(fp); i++)
{
fread(&stu[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
printf("Total student is %d.\n",i-1);

return i - 1;
}
void PrintScore(STUDENT stu[], int n, int m)
{
int i,j;
for( i = 0; i < n; i++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,stu[i].studentName,stu[i].studentSex,
stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
for(j = 0; j < m; j++)
{
printf("%4d",stu[i].score[j]);
}
printf("%6.1f\n",stu[i].aver);
}

}

/将输入的数据写入名为student.txt的文件中/

按格式读写文件

C语言允许按指定格式读写文件。函数fscanf()用于按指定格式从文件读数据。

函数原型为:

1
int fscanf(FILE *fp, const char *format,...);

参数作用:第一个参数为文件指针,第二个参数为格式控制参数,第三个参数为地址参数列表,后两个参数和返回值与函数scanf()相同。

fprintf()函数用于指定格式像文件写数据

函数原型为:

1
int fprintf(FILE *fp, const char *format,...);

参数作用:第一个参数为文件指针,第二个参数为格式控制参数,第三个参数为输入参数列表,后两个参数和返回值与函数printf()相同。

**用函数fscanf()和fprintf()进行文件的格式化读写,读写方便,容易理解,但输入时要将ASCLL字符转换成二进制数,输出时,要将二进制数转换为ASCLL字符,比较耗时。

以下实例函数可以实现对学生信息的采集,输入到文件中

需要做的准备为,在D盘建立名为score.txt的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include<stdio.h>
#include<stdlib.h>
#define N 30
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long studentID;
char studentName[10];
char studentSex;
DATE birthday;
int score[4];
float aver;
}STUDENT;
void InputScore(STUDENT stu[],int n,int m);
void AverScore(STUDENT stu[], int n, int m);
void WritetoFile(STUDENT stu[],int n,int m);
int main()
{
STUDENT stu[N];
int n;
printf("How many student?\n");
scanf("%d",&n);
InputScore(stu,n,4);
AverScore(stu,n,4);
WritetoFile(stu,n,4);
return 0;
}
void InputScore(STUDENT stu[],int n,int m)
{
int i,j;
for(i = 0; i < n; i++)
{
printf("Input record %d:\n",i+1);
scanf("%ld",&stu[i].studentID);
scanf("%s",stu[i].studentName);
scanf(" %c",&stu[i].studentSex);
scanf("%d",&stu[i].birthday.year);
scanf("%d",&stu[i].birthday.month);
scanf("%d",&stu[i].birthday.day);
for(j = 0; j < m; j++)
{
scanf("%d", &stu[i].score[j]);
}
}
}
void AverScore(STUDENT stu[], int n, int m)
{
int i, j, sum;
for(i = 0; i < n; i++)
{
sum = 0;
for(j = 0; j < m; j++)
{
sum = sum + stu[i].score[j];
}
stu[i].aver = (float)sum / m;

}
}
void WritetoFile(STUDENT stu[],int n, int m)
{
FILE *fp;
int i,j;
if((fp = fopen("D:\\score.txt","w")) == NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
fprintf(fp,"%d\t,%d\n",n,m);
for(i = 0; i < n; i++)
{
fprintf(fp, "%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,stu[i].studentName,stu[i].studentSex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
for(j = 0; j < m; j++)
{

fprintf(fp,"%4d",stu[i].score[j]);
}
fprintf(fp,"%6.1f\n",stu[i].aver);
}
fclose(fp);


}

该程序对文件内容的书写是会改变文件中的内容的

在对程序进行数据输入后,程序就自动退出了,可以通过用户自己到D盘找到score.txt文件去查看文件情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include<stdio.h>
#include<stdlib.h>
#define N 30
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long studentID;
char studentName[10];
char studentSex;
DATE birthday;
int score[4];
float aver;
}STUDENT;
void ReadfromFile(STUDENT stu[],int *n, int *m);//从文件中读取数据
void PrintScore(STUDENT stu[], int n, int m);//屏幕打印数据
int main()
{
STUDENT stu[N];
int n,m=4;
ReadfromFile(stu, &n, &m);
PrintScore(stu, n, m);
return 0;
}
void ReadfromFile(STUDENT stu[], int *n, int *m)
{
FILE *fp;
int i,j;
if((fp = fopen("D:\\score.txt","r")) == NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
fscanf(fp,"%d\t%d",n,m);
for(i = 0; i < *n; i++)
{
fscanf(fp,"%10ld",&stu[i].studentID);
fscanf(fp,"%8s",stu[i].studentName);
fscanf(fp,"% c",&stu[i].studentSex);
fscanf(fp,"%6d/%2d/%2d",&stu[i].birthday.year,
&stu[i].birthday.month,
&stu[i].birthday.day);
for(j = 0; j < 4; j++)
{
fscanf(fp,"%4d", &stu[i].score[j]);
}
fscanf(fp,"%f",&stu[i].aver);
}
fclose(fp);
}
void PrintScore(STUDENT stu[], int n, int m)
{
int i,j;
for( i = 0; i < n; i++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,stu[i].studentName,stu[i].studentSex,
stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
for(j = 0; j < m; j++)
{
printf("%4d",stu[i].score[j]);
}
printf("%6.1f\n",stu[i].aver);
}

}

此程序出了问题,不知问题出在程序还是文件,在深入学习了解后,我会对该程序进行改正

该程序原本的功能是用于对文件中的数据进行提取输出

C语句

C语句

C语句分为下列5类

  1. 控制语句

    • if()…else… (条件语句)
    • for()… (循环语句)
    • while()… (循环语句)
    • do while() (循环语句)
    • continue (结束本次循环语句)
    • break (中止执行switch或循环语句)
    • switch (多分支选择语句)
    • return (从函数返回语句)
    • goto (转向语句,在结构化的程序中基本不用goto语句)
  2. 函数调用语句

    函数调用语句由一个函数调用加一个分号构成

  3. 表达式语句

    表达式语句由一个表达式加一个分号构成

    一个表达式的最后加一个分号就成了一个语句

  4. 空语句

    就一个空格加;什么也不做

  5. 复合语句

    可以用{}把一些语句和声明括起来成为复合语句(又称语句块)

最基础的语句——赋值语句

赋值运算符

赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量

复合的赋值运算符

在赋值运算符“=”前加上其他的运算符,可以构成复合的运算符。

凡是二目运算符,都可以与赋值运算符一起组合成复合赋值符

赋值表达式

格式:变量 赋值运算符 表达式

赋值表达式的作用是将一个表达式的值赋给一个变量,因此赋值表达式具有计算和赋值的双重功能

赋值过程中的类型转换

  1. 将浮点数类型赋值给整数类型时,先对浮点数取整,即舍弃小数部分,然后赋予整型变量。
  2. 将整型数据赋值给单、双精度变量时,数值不变,但以浮点数类型储存到变量中
  3. 将一个double类型数据赋给float变量时,先将双精度数转换成单精度,即只取6~7位有效数字,存储到float型变量的4个字节中
  4. 字符型数据赋给整型变量时,将字符的ASCLL代码赋给整型变量
  5. 将一个占字节多的整型数据赋值给一个站字节少的整型变量或字符变量时,只将其低字节原封不动地送到被赋值的变量(即发生“截断”)

python蟒蛇绘制(python库函数的调用方法)

python蟒蛇绘制(python库函数的调用方法)

代码实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import turtle
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
turtle.circle(40, 80)
turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)

方法:使用绘制图形的turtle库

使用保留字import应用函数库

被调用的函数都使用了< a >.< b >()形式。通过使用函数库并利用函数进行编程的方法称为“模块编程”

利用import引用函数的两种方式

  • import<库名>

    <库名>.<函数名>(<函数参数>)

  • from <库名> import <函数名,函数名,…,函数名>

    from<库名>import * 其中,*是通配符,代表所有的函数

    在调用此函数时不在需要使用库名

    一般格式为<函数名>(<函数参数>)

以第一种方法

特点:采用< a >.< b >()方式调用库中函数,能够显示标明函数的来源,在引用较多库时代码的可读性更好。

在使用第一种引用方式,python解释器将< a >.< b >整体作为函数名。

以第二种方式

特点:能够直接应用库中函数,可以是代码更加简洁

在采用该种方式引用函数时,python解释器会将< b >作为函数名

Python程序语法元素分析

Python程序语法元素分析

程序的格式框架

python语言采用严格的“缩进”来表明程序的格式框架。

缩进指每一行代码开始前的空白区域,用来表示代码之间的包含和层次关系

代码编写中,缩进可以用Tab键实现,也可以用多个空格(一般是四个空格)实现,但两者不能混用。建议使用四个空格的编写方式

除了单层缩进,一个程序的缩进还可以“嵌套”从而形成多层缩进,python语言对语句之间的层次关系没有限制,可以“无限制”嵌套使用

注释

  • 单行注释 #
  • 多行注释‘’‘

命名与保留字

python 语言允许采用大写大写字母小写字母数字下划线、和汉字等字符给变量命名

但首字母不能是数字,中间不能出现空格,长度没有限制

注意:标识符对大小写敏感,python和Python是两个不同的名字

保留字

保留字(keyword),也称关键字,指被编程语言内部定义并保留使用的标识符。程序员在编写程序时不能定义与使用保留字相同的标识符

Python 3 的 33 个保留字列表

False def if raise
None del import return
Ture elif in try
and else is while
as except lambda with
assert finally nonlocal yield
break for not
class from or
continue global pass

字符串

python语言的字符串有两种序号体系:

  • 正向递增序号:以最左侧字符序号为0,向右依次递增,最右侧的字符序号为L-1
  • 反向递减序号:以最右侧字符序号为-1,向左依次递减最左侧的字符序号为-L

反向递减序号

<——————————————————

-11-10 -9 -8 -7 -6 -5 -4 -3 -2 -1

[H] [e] [l] [l] [o] [ ] [W] [o] [r] [l] [d]

0 1 2 3 4 5 6 7 8 9 10

——————————————————>

正向递增序号


python访问字符串的方法

python字符串也提供区间访问方式,采用**[N:M]**格式,表示字符串中从N到M(不包含M)的子字符串

N和M为字符串的索引序号,可以混合使用正向递增序号和反向递减序号

赋值语句

python语言中“=”表示“赋值”

python语言可以对变量一一赋值

也可以同步赋值多个变量

<变量1>,…,<变量N> = <表达式1>,…,<表达式N>


1
2
3
>>>t = x
>>>x = y
>>>y = t

1
>>>x, y = y, x

input()语句

无论用户在控制台输入什么内容,input()函数都以字符串类型返回结果

分支语句

使用方法如下:

if<条件一>

<语句块一>

elif<条件二>

​ <语句块二>

else:

​ <语句块N>

其中else 额立法 else都是保留字

eval()函数

eval(<字符串>)函数是python语言中十分重要的函数,它能够以python表达式的方式解析并执行字符串

即将输入的字符串转变成python语句来执行

python支持 + - * / **(幂运算)五种基本运算符

print()函数

当输出纯字符信息时,可以直接将待输出内容传递给print()函数,当输出变量时,采用格式化输出的方法,通过format()方法将待输出变量整理成期望输出的格式

1
print("转换后的温度为{:.2f}C".format(C))

具体来说就是print()函数用格式槽{}和format()方式将变量和字符串结合在一起输出

在上述的程序中{}表示一个槽位置,这个大括号里的内容由字符串后紧跟的format()方法中的参数C填充

循环语句

循环语句和分支语句相似,他们决定一个语句是否执行多次

基本结构为:

​ while(<条件>):

​ <语句块一>

​ <语句块二>

当条件结果为真(True)时,执行语句一,当条件结果为假(False)时,跳出循环,执行语句二

函数

函数可以分为两种:

  • 内置函数如print input eval等
  • 自造的函数,用保留字def定义函数

turtle库语法元素分析

绘图坐标体系

1
turtle.setup(650,350,200,200)

其对应的数据分别为:

turtle.setup(width, height, startx, stary)

参考数据:

width:窗口的宽度,如果值是整数,表示像素值;如果值为小数,表示窗口宽度与屏幕的比例

height:窗口的高度,如果值是整数,表示像素值;如果值是小数,表示窗口高度和屏幕的比例

startx:窗口左侧与屏幕左侧的像素距离,如果值是None,窗口位于屏幕水平中央

starty:窗口顶部与屏幕顶部的像素距离,如果值是None,窗口位于屏幕垂直中央

setup函数

画笔控制函数

1
2
turtle.penup()
turtle.pendown()

turtle.penup()

turtle.penup()其他形式turtle.penpu(), turtle.up()

作用:抬起画笔,之后移动画笔不绘制形状

参数:无

turtle.pendown()

turtle.pendown() 其他形式turtle.pd(),turtle.down()

作用:落下画笔,之后移动画笔将绘制形状

参数:无

turtle.pensize()

turtle.pensize(width)其他形式turtle.width

作用:设置画笔宽度,当无参数输入时,返回当前画笔宽度

参数如下:

width:设置的画笔线条宽度,如果为None或者为空,则函数返回当前画笔宽度

turtle.pencolor()

1
2
turtle.pencolor(colorstring)
turtle.pencolor(r,g,b)

作用:设置画笔颜色,当无参数输入时,返回当前画笔颜色

参数如下:

colorstring:表示颜色的字符串,比如,“purple”、“red”、“blue”等

(r,g,b):颜色对应的RGB数值,例如,(51,204,140)

很多RGB颜色都有固定的英语名字,这些英文名字可以作为colorstring输入到turtle.pencolor()函数中,也可以采用(r,g,b)形式直接输入颜色值

英文名称 RGB 十六进制 中文名称
white 255 255 255 #FFFFFF 白色
black 0 0 0 #000000 黑色
grey 190 190 190 #BEBEBE 灰色
darkgreen 0 100 0 #006400 深绿色
gold 255 215 0 #FFD700 金色
violet 238 130 238 #EE82EE 紫罗兰
purple 160 32 240 #A020F0 紫色

RGB颜色

拓展:RGB颜色是计算机系统最常用的颜色体系之一,它采用R(红色)、G(绿色)、B(蓝色)3种基本颜色及它们的叠加组成的各种各样的颜色

形状绘制函数

turtle.fd()

1
turtle.fd(252

turtle.fd(distance)其他形式turtle.forward(distance)

作用:向小海龟当前行进方向前进distance距离

参数:

distance:行进距离的像素值,当值为负数时,表示向相反方向前进

turtle.seth

1
turtle.seth(-40)

turtle.seth(to_angle) 其他形式turtle.setheading(to_angle)

作用:设置小海龟当前行进方向为to_angle,该角度是绝对方向角度值

**turtle库的角度坐标体系以正东方向为绝对0度,正西方向为绝对180度

turtle.circle()

1
turtle.circle(radius, estent=None)

参数:radius:弧形半径,当值为正数时,半径在小海龟的左侧,当值为负数时,半径在小海龟的右侧

​ extent:绘制弧形的角度,当不设置参数或参数设置为None时,绘制整个圆形

表白用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import turtle
import time
# 爱心的顶部
def LittleHeart():
for i in range(200):
turtle.right(1)
turtle.forward(2)
#输入表白语句
love = input('输入表白语句,默认I Love You:')
me = input("输入署名或者赠给谁,没有不执行:")
if love ==" ":
love = "I Love You"
#窗口大小
turtle.setup(width=900,height=500)
turtle.color("red","pink")
turtle.pensize(3)
turtle.speed(1)
turtle.up()
turtle.hideturtle()
turtle.goto(0,-180)
turtle.showturtle()
turtle.down()
turtle.speed(1)
turtle.begin_fill()
turtle.left(140)
turtle.forward(224)
LittleHeart()
turtle.left(120)
LittleHeart()
turtle.forward(224)
turtle.end_fill()
turtle.pensize(5)
turtle.up()
turtle.hideturtle()
turtle.goto(0,0)
turtle.showturtle()
turtle.color('#CD5C5C','pink')
turtle.write(love,font=('gungsuh',30),align="center")
turtle.up()
turtle.hideturtle()
time.sleep(2)
turtle.goto(0,0)
turtle.showturtle()
turtle.color('red','pink')
turtle.write(love,font=('gungsuh',30),align="center")
turtle.up()
turtle.hideturtle()
if me != ' ':
turtle.color('black','pink')
time.sleep(2)
turtle.goto(180,180)
turtle.showturtle()
turtle.write(me,font=(20,),align="center",move=True)
window = turtle.Screen()
window.exitonclick()


python math库函数

math库概括

模块编程:需要用import调用库的编程方式

简洁:math库是python提供的内置数学类函数库,因为复数类型常用于科学计算,一般计算并不常用,因此math函数不支持复数类型,仅支持整数和浮点数运算。

math函数一共提供了4个数学常数和44个函数。44个函数分为4类,包括16个数值表示函数,8个幂对数函数,16个三角对数函数和4个高等特殊函数。

math库解析

math库的数学常数(共4个)

常数 数学表示 描述
math.pi π 圆周率,值为3.141592656589793
math.e e 自然对数,值为2.718281828459045
math.inf 00 正无穷大,负无穷大为-math.inf
math.nan 非浮点数标记,NaN(not a number)

math库的数值表示函数(共16个)

函数 数学表示 描述
math.fabs(x) |x| 返回x的绝对值
math.fmod(x,y) x&y 返回x与y的模
math.fsum([x,y,…]) x+y+…. 浮点数精确求和
math.ceil(x) 向上取整,返回不小于x的最小整数
math.floor(x) 向下取整,返回不大于x的最大整数
math.factorial(x) x! 返回x的阶乘,如果x是小数或负数,返回ValueError
math.gcd(a,b) 返回a与b的最大公约数
math.frexp(x) x = m * 2 ^ e 返回(m,e),当x = 0,返回(0.0,0)
math.ldexp(x,i) x * 2^i 返回x*2^i运算值,mathfrexp(x)的反运算
函数 数学表示 描述
math.modf(x) 返回x的小数和整数部分
math.trunc(x) 返回x的整数部分
math.copysign(x,y) |x| * |y|/y 用数值y的正负号代替x的正负号
math.isclose(a,b) 比较a和b的相似性,返回True或False
math.isfinite(x) 当x不是无穷大或NaN,返回True;否则,返回False
math.isinf(x) 当x为正负无穷大,返回True;否则,返回False
math.innan(x) 当x是NaN,返回Ture,否则返回False

math库的幂对数函数(共8个)

函数 数学表示 描述
math.pow(x,y) x^y 返回x的y次幂
math.exp(x) e^x 返回e的x次幂,e是自然对数
math.expml(x) e^x-1 返回e的x次幂减1
math.sqrt(x) x^1/2 返回x的平方根
math.log(x[,base]) logbasex 返回x的对数值,只输入x时,返回自然对数
math.loglp(x) ln(x+1) 返回1+x的自然对数
math.log2(x) log2x 返回x的2对数值
math.log10(x) log10x 返回x的10对数值

math库的三角运算函数

函数 数学表示 描述
math.degrees(x) 角度x的弧度值转角度值
math.radians(x) 角度x的角度值转弧度值
math.hypot(x,y) 返回(x,y)坐标到原点(0,0)的距离
math.sin(x) sin x 返回x的正弦值,x为弧度值
math.cos(x) cos x 返回x的余弦值,x为弧度值
math.tan(x) tan x 返回x的正切值,x为弧度值
math.asin(x) arcsin x 返回x的反正弦值,x为弧度值
math.acos(x) arccos x 返回x的反余弦值,x为弧度值
math.atan(x) arctan x 返回x的反正切值,x为弧度值
函数 数学表示 描述
math.atan2(y,x) arctan y/x 返回y/x的反正切值,x为弧度值
math.sinh(x) sinh x 返回x的双曲正弦函数值
math.cosh(x) cosh x 返回x的双曲余弦函数值
math.tanh(x) tanh x 返回x的双曲正切函数值
math.asinh(x) arcsinh x 返回x的双曲反正弦函数值
math.acosh(x) arccosh x 返回x的双曲反余弦函数值
math.atanh(x) arctanh x 返回x的双曲反正切函数值

math库的高等特殊函数(共4个)

函数 数学表达 描述
math.erf(x) 高斯误差函数,应用于概率论,统计学等领域
math.erfc(x) 余补高斯误差函数,math.erfc(x) = 1 - math.erf(x)
math.gamma(x) 伽玛函数,欧拉第二积分函数
math.lgamma(x) ln(gamma(x)) 伽玛函数的自然对数
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信