旧文新发,朝花夕拾。老友相聚,感触颇多。有那么一瞬间,什么都不想要,就想陪在好友身边,就想呆在小县城。计算机这条路,注定孤独!
用户编程时使用的名字
由字母(A-Z,a-z)、数字(0-9)、下划线组成
首字母不能是数字,可以是字母或下划线
严格区分大小写
不能与关键字相同
C语言的基本单位是函数
。
#include<stdio.h>
int main ()
{
//代码块
return 0;
}
main函数是程序的入口
一个C语言程序有且仅有一个
main函数
C语言代码变成可执行文件的四个步骤
预处理-编译-汇编-链接
二进制:由0和1组成,0b
开头。如0b101
八进制:由0-7组成,0
开头,如:062。八进制遇8进1,081这个数值就是非法的。因为在8进制中没有8这个数。
十进制:由0-9组成
十六进制:由0-9,A-F组成,0x
开头
32位操作系统下
实型数据的合法形式
实型有两种表示形式:
十进制小数形式:由数字和小数点组成。如:123.456、0.345、-56.79、0.0、12.0等
注意:12.和.48都是合法形式
指数形式:如:12.34e3(代表12.34*10**3)
e前e后必有数,e后必是整数
单引号
引起来的,如‘a’、‘0’
0
’对应的ASCII值是48
,字符‘A’
对应的ASCII值是65
、字符‘a
’对应的ASCII值是97
双引号
括起来的一串字符就被称为字符串\0
’,这是字符串的结束标识strlen
函数。计算的是‘\0’之前的字符个数%s
来指定printf()
的作用是将文本按格式输出到屏幕
使用之前需要先引入stdio.h
头文件
printf
函数在使用的时候,至少要有一个参数
printf
的基本结构
printf
(“第一部分,第二部分”); 把第二部分的值放到第一部分里,输出到控制台
printf
(“%d键%d联”,1,3); 将第二部分的1和3,直接放到第一部分里,然后输出到控制台。
1键3联
printf(“%d\n%d联”,1,3);
这里的’\n’是转义字符,是换行的意思
#include<stdio.h>
int main()
{
printf("一键三连,逢考必过");
return 0;
}
printf
(“%d键%d联”,1,3);
这里的%d是C语言中的占位符
,用于表示将来会被替换为其他值的位置
%2d,是表示这个占位符的宽度至少是两位,不满2位前面补空格
scanf()函数用于读取用户的键盘输入
scanf()函数的基本形式:scanf(“参数列表1”,参数列表2);
int a;
scanf("%d",&a);
从键盘输入一个数,scanf函数会将输入的数放到i按量a所在的位置
控制台输入的时候,要按照参数列表1的格式在控制台输入数据
int a;
scanf("a=%d,&a");
正确输入方式:a=10
控制台输入的内容必须和参数列表1中的内容一致。
scanf中参数列表二中,必须放地址。&a表示的是变量a的地址
scanf和指针使用
int main ()
{
int a=0;
int*pa=&a;
scanf("%d",pa);
return 0;
}
这里的指针pa拿到的就是变量a的地址。不足要再次取地址了。
scanf(“%d”,&pa); 这样写就是错误的。
scanf()限制输入的长度
输入数:12345678910
scanf(“%2d%3d%4d”,&a,&b,&c);
a的值12 b的值345 c的值6789
整数
。15%4=3++是一种自增的运算符,分为前置++和后置++。前置++(–),是先(–),再使用。
–是一种自减的运算符,分为前置–和后置–。后置++(–),是先使用,再++(–)。
int x=10;
int y=++x;//y的值是11,x的值是11
int z=x--;//z的值是11,x的值是10
int x=10;
int y=--x;//y的值是9,x的值是9
int z=x--;//z的值是9,x的值是8
=:简单的赋值运算符, 把右边操作数的值赋给左边操作数
a+=3 | 相当于 | a=a+3 |
---|---|---|
a-=3 | 相当于 | a=a-3 |
a*=3 | 相当于 | a=a*3 |
a/=3 | 相当于 | a=a/3 |
a%=3 | 相当于 | a=a%3 |
条件运算符也叫三目运算符,需要接收三个操作数的,形式如:表达式1?表达式2:表达式3
条件操作符的计算逻辑是:
若表达式1的值为真,则将表达式2的值作为整个条件表达式的取值。
若表达式2的值为假,则将表达式3的值作为整个条件表达式的取值。
逻辑非(!):若表达式为真,则逻辑非运算符使其为假;
若表达式为假,则逻辑非运算符使其为真。
逻辑与(&&):只有所有表达式都为真,整个逻辑表达式才为真
逻辑或(||): 只要有一个表达式为真,整个逻辑表达式为真
逗号表达式,就是用逗号隔开的多个表达式
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果
结构化程序有三种:顺序结构,选择结构,循环结构
if(x>0)
{
printf("x是一个正数。);
}
if(x>0)
{
printf("x是一个正数。");
}
else
{
printf("x不是一个正数。");
}
if(x>0)
{
if(x%2==0)
{
printf("x是一个正偶数。");
}
else
{
printf("x是一个正奇数");
}
}
else
{
printf("x不是一个正数。");
}
if(x>0)
{
printf("x是一个正数。");
}
else if (x<0)
{
printf("x是一个负数。");
}
else
{
printf("x的值为0");
}
基本形式:
switch(变量表达形式)
{
case 常量1:
语句;
break;
case 常量2:
语句;
break;
...
default:
语句;
break;
}
while(条件)
{
//循环体
}
特点:当条件为真时,循环体会一直执行
当条件为假时,循环停止
注意:
do
{
//循环体
}while (条件);
特点:
循环体至少执行一次(先执行,后判断条件)
注意点:
for (条件1;条件2;条件3)
{
//循环体
}
特点:for循环将初始化、条件判断和递增/递减操作集中再一行,非常适合计数型循环。
注意点:
每个条件都可以省略但分号不能省略,但循环条件为空时要小心死循环
break语句:立刻退出循环,不再执行后续循环体
for(int i=0;i<10;i++)//预计执行10次循环
{
if(i==3)
{
break;//实际只执行三次循环
}
}
continue语句:跳过本次循环的剩余部分,直接开始下一次循环
for (int i=0;i<10;i++)
{
if(i==3)
{
continue;
}
printf("%d",i);//这次循环不再执行
}
函数是一种用来完成特定任务的代码块,可以被多次调用
函数的作用:提高代码的复用性,简化复杂程序,增强可读性
函数的语法结构:
返回值 函数名(参数列表)
{
//函数体
}
int add(int a,int b)
{
int c=a+b;
return c;
}
函数声明:在使用函数前,需要声明他的返回类型和参数列表
//返回值 函数名(参数列表);
int add (int a,int b);
函数定义:完整的函数实现,包括函数体。
int add (int a,int b)
{
return a+b;
}
int main()
{
int a= 10;
int b= 20;
int sum=add(a,b)
printf("%d",sum);
return 0;
}
int add(int a,int b)
{
int c= a+b;
return c;
}
传值调用
传址调用:
main()函数的位置可以任意放置
练习:编写一个程序,其中自定义一个函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数
//如果是素数就返回1,如果不是就返回0
int Isp(int number)
{
if(number <=1)
{
return 0;
}
for (int i=2; i<number;i++)
{
if((number%i)==0)
{
return 0;
}
}
return 1;
}
int main()
{
int number;
printf("请输入一个整数:"/n);
scanf("%d",&number);
int ret=Isp(number);
if(ret==0)
{
printf("%d不是一个素数",number);
}
else
{
printf("%d是一个素数",number);
}
return 0;
}
数组是一种数据结构,用于存储一组相同类型的数据
数组中的元素在内存中是连续存放的
数组通过下标来访问元素,下标从0开始
数组的声明
数组的初始化
使用下标访问数组中的元素:array[下标]
下标是从0开始,并且下标是一个整数
下标越界将导致未定义行为
二维数组可以看作是”数组的数组“,即一个包含多个一维数组的数组。它用来表示矩阵或表格等二维数据
二维数组的声明格式:数据类型 数组名 [行数] [列数];
指针是一个变量,用来村发那个内存地址的变量
指针的声明形式为:
int *p;
int a=10;
int *p=&a;
printf("%d",*p);
//p存储的是a的地址
//*p表示对指针p进行解引用
//*p实际上就是变量a的值
一级指针:存储的是变量的地址,通过解引用(*p)可以获得该变量的值
二级指针:
数组名作为指针:在c语言中,数组名通常被看作是指向数组第一个元素的指针常量
数组索引和指针算术的等价性:数组索引操作实际上是一种指针算数
指针+整数:当我们对指针进行加法运算时,实际上是在移动指针所指向的内存位置。移动的距离取决于指针的类型
p是int*类型,每次+1,移动的距离是sizeof(int)
,也就是4个字节
结构体的定义和声明
结构体成员的访问