基础
- 变量
变量是用来保存数据的地方
类型名 变量名称
int price;
int a,b,c;
赋值和初始化
int a=0; 表示把右边的值给左边的变量;
赋值符号表示的是一种动作
C语言不要求做初始化 但是在使用的时候需要被赋一次值
int a=0;
常量
会变的是变量 不会变的是常量
const 是用来定义常量的 要赋初值 但是不能被修改
const int A=100;
浮点类型
带小数点的数叫做浮点数
与浮点数对应的是定点数 小数点的位置是固定的是定点数
double foot=12.22;
double bbb=12.333;
double c;
scanf("%lf",&c);
printf("%lf");
运算符和算子
运算符就是+ - * /
算子就是参与运算的
复合赋值
+= -+ 这种就是复合运算
递增和递减运算符
a++ 后缀
++a 前缀
注意前缀和后缀的不同 前缀是++后使用 后缀是使用后在++
- C语言数据类型
函数的定义和调用
函数是我们自己定义的方法 会接受参数 返回或者不返回值
void sum(int a,int b){ int i; int num=0; }
数组
int num[100];
指针
指针也是一个变量 与普通变量的是 指针存放的是地址值
如果要弄清楚指针就需要知道三个值
假设p是一个指针变量那么
p所存放的是一个地址值(具体是谁的地址值看赋值)
&p 是指针p自己的地址值
【*p 是指针p存放的地址所指向的值】
#include <stdio.h> int main(){ int *p1=NULL;//p1 现在存的是一个空值 int p=123;//普通变量p 存放的是一个正常的变量 p1=&p;//取p的地址值 把地址值赋值给p1 printf("p1=%d \n",p1);// 输出p1的值 是p的地址值 printf("&p1=%d \n",&p1);//p1自己的地址值 printf("&p=%d \n",&p); //输出 p的地址值 printf("*p1=%d \n",*p1);//p1存放的地址所指向的值 printf("p=%d",p);//p的值 return 0; }
多级指针
多级指针同 一级指针一样 存放的也是地址 存放的具体是谁的地址也还是要看赋值
一级指针指向的是普通变量的地址
二级指针指向的是一级指针的地址 三级指二级依次类推
创建了一个二级指针p
&p 就是p自己的地址值
p 存放的是一个地址值 比他小一级的指针的地址值
*p 就是比他小一级的指针所存放的地址值
**p 就是比他小一级的指针所存放的地址值所指向的值
#include <stdio.h> int main(){ int p=123;//普通变量p 值为123 int *p1=NULL;//一级指针p1 暂时存放的位空地址 int **p2=NULL;//二级指针p2 暂时存的为空地址 p1=&p;//一级指针存放的是变量p的地址值 p2=&p1;//二级指针存放的是p1的地址值 printf("&p1=%d \n",&p1);//p1的地址值 printf(" p2=%d \n",p2);//p2存放的地址值(为p1的地址值) printf("&p2=%d \n\n",&p2);//p2自身的地址值 printf(" p1=%d \n",p1);//p1存放的地址值 为p的地址 printf("*p2=%d \n\n",*p2);//p2指向的地址值 所存放的地址值 printf(" *p1=%d\n",*p1);//p1存放的地址所指向的值 printf("**p2=%d",**p2);//p2存放的地址值所指向的值的地址值所指向的值 return 0; }
枚举
枚举是C语言中用户自定义的一种数据类型
结构类型
声明一个结构 定义一些变量
struct point{
int x;
int y;
};
单纯声明一个结构
struct{
int x;
}
静态本地变量
static int c;
只做一次初始化 后面如果这个值改变 那么它也会保存住改变后的值不会再做其他的初始化了
静态本地变量类似于全局变量 全局生存期 本地作用域
static int all=1;
被调用后 all+2;等于三 后面再被main函数调用也是会从3开始不会再做初始化了
宏
“#”开头的就是编译预处理指令
#define PI 3.1415 编译预处理
- 带参宏定义
用5 来替换x
声明
如果想在项目里面的其他文件里面使用全局变量就需要使用一下语句来申明
- 链表
- 求平均数
#include <stdio.h>
int main(){
int a,b;
scanf("%d" "%d",&a,&b);
float c=(a+b)/2;
printf("%f",c);
return 0;
}
- 交换a b 的值
#include <stdio.h>
int main(){
int a=1;
int b=2;
int c;
c=a; a=b; b=c;
printf("%d %d",a,b);
return 0;
}
- 猜数游戏
#include <stdio.h>
#include <stdlib.h>
int main(){
int a=rand()%100+1;
int b;
int count=0;
do{
printf("输入数字");
scanf("%d",&b);
if(b>a){
printf("大了");
}else if(b<a){
printf("小了");
}
}while(a!=b);
printf("duil");
}
- 阶乘
#include <stdio.h>
int main(){
int a;
scanf("输入需要参加阶乘的数字",&a);
int i;
for(i=1;i<=a;i++){
i*=i;
}
printf("%d",i);
}
- 素数
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
int isprime;
int i;
for(i=2;i<x;i++){
if(x%i==0){
isprime=0;
break;
}
}
if(isprime==1){
printf("是");
}else{
printf("不是");
}
return 0;
}
- 函数求和
#include <stdio.h>
void add(int a,int b){
int num=0;
int i;
for(i=a;i<=b;i++){
num+=i;
}
printf("%d",num);
}
int main(){
add(1,10);
return 0;
}
- 输出数组中元素中的平均值 和大于平均值的数
#include <stdio.h>
int main(){
int num[100];
int cot=0;
double sum=0;
int x;
scanf("%d",&x);
while(x!=-1){
num[cot]=x;
sum+=x;
cot++;
scanf("%d",&x);
}
if(cot>0){
int i;
double avg=sum/cot;
for(i=0;i<cot;i++){
if(num[i]>avg){
printf("%d",num[i]);
}
}
}
return 0;
}
- 指针交换两个变量的值
#include <stdio.h>
void swap(int *a,int *b);
int main(){
int a=123;
int b=321;
printf("&a=%d,&b=%d \n\n",&a,&b);
swap(&a,&b);
printf("&a=%d,&b=%d \n",&a,&b);
printf("a=%d,b=%d \n",a,b);
return 0;
}
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
- 动态分配内存
#include <stdio.h>
#include <stdlib.h>
int main(){
int number;
int *a;
int i;
scanf("%d"&number);
a=(int *)malloc(number*sizeof(int)); //请求malloc(number*sizeof(int))个内存
for(i=0;i<number;i++){
scanf("%d",&a[i]);
}
free(a); //归还内存
}
- 字符串常用函数
//stycpy 拷贝
//strcat 字符串连接 结果返回第一个
//strchr 字符串中找字符
#include <stdio.h>
#include <string.h>
int main() {
char a[]="hello";
char b[]="hello";
printf("%d",strcmp(a,b)); //比较两个字符串
printf("%d",strlen(a));//strlen 查看数组的长度
return 0;
}