侧边栏壁纸
博主头像
小新笔记坊

笔耕学思悟,细绘生活卷。

  • 累计撰写 52 篇文章
  • 累计创建 23 个标签
  • 累计收到 49 条评论

目 录CONTENT

文章目录

C语言学习笔记

小新笔记坊
2024-05-20 / 0 评论 / 0 点赞 / 34 阅读 / 0 字 / 正在检测是否收录...

语法

输入输出函数

输出:printf("%d,%d\n",i,c);

输入: scanf("%d%d",&a,&b);

整形(指没有小数部分的数据):%d

单个字符输出:%c

整个字符串输出(自带\0):%s

浮点型输出:%f

常量

定义:程序中不会被修改的值,程序中的固定值。

整型常量: 0、-3

实型常量: 4.6、-1.23

字符常量: ‘a’、‘b’

字符串常量:“abc”

定义常量(通过宏命令的方式,凡是a都代表30):#define a 30

变量

整型变量

  1. 短整型 short int a=0;

  2. 基本整型 int a=0;

  3. 长整型 long int a=0;

字符型变量

char a='r';

注:char类型统一只占一个字节。

浮点型变量

  1. 单精度 float a=0.0;

  2. 双精度 double a=0.0;

  3. 长双精度 long double a=0.0;

变量名合法性

注:字符只能有大小写、英文字母、数字和下划线。且必须以字母或下划线开头,并且不能是C语言的关键字。

数值常量:+001、0xabcd、2e2(表示10^2)

非数值常量:'\'、0f

运算符

优先级

初等运行符——>单目运算符——>算术运算符——>关系运算符——>逻辑运算符——>条件运算符——>赋值运算符——>逗号运算符

初等运算符:数组下标“[]”、括号“()”、成员或对象选择“.”、指针“->”

单目运算符:运算对象为一个变量的运算符。

算术运算符:“+”、“-”、“*”、“/”、“%”、“++”、“--”

关系运算符:“<”、“<=”、“==”、”>”、“>=”、“!=”

逻辑运算符:与或非

条件运算符:“?:”

赋值运算符:“=”

条件运算符

max = a>b ? a:b

注:如果a>b,将a赋值给max;如果a<b,将b赋值给max。

逗号运算符

a=3*5 , a*4

注:先求解表达式1,再求解表达式2,整个逗号表达式值取表达式2。

这样做的意义:为了在只能写一条表达式的地方写多条表达式而设计的。

for (int i = 0, j = SIZE - 1; i < j; ++ i, -- j)
{
    b=1,c=2;
    printf("%d\n",b>c?b++:c++);    //最后值是2
}

强制类型转换

float a;
b=(int)a;

注: 只不过是赋值到b的数据的类型为int,a本身的类型不变的。

switch判断

switch (a){
        case 1:printf("Monday\n");
        case 2:printf("Tuesday\n"); 
        case 3:printf("Wednesday\n"); 
        case 4:printf("Thursday\n"); 
        case 5:printf("Friday\n"); 
        case 6:printf("Saturday\n"); 
        case 7:printf("Sunday\n"); 
        default:printf("error\n");
    }

注:比较变量a与所有case,如果与任意case的值相等,执行该case及其后的所有语句;如果a与所有case值不相同,执行default;如果想实现当a与case值相等时,执行case后语句跳出switch,可在对应case后添加break跳出判断。case后的值可以是整形、字符型、浮点型等各个类型。

三种循环结构

do while循环

注:do while不同于其它循环,是先执行循环体,再进行判定条件。

do
   {
    printf("%d\n",i);
   }
while(i<0);

while循环

注:先判定条件,再执行循环体。

for循环

注:先判定条件,再执行循环体。

continue

跳过本次循环:continue

数组

整型数组

1行1列:int a[2]={0,1,2};

3列4行:int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{7,8,9}};

字符数组

系统自动后面加\0,所以算3个字符:char c[3]="ab";

这种情况系统不会后面追加\0 :char c[2]={'a','b'};

将两个字符串连接

<string.h>
strcat(str1,str2);

复制字符串

<string.h>
strcpy(str1,str2);   //将str2覆盖到str1
strcpy(str1,str2,2);   //将str2最前面2个字符覆盖到str1

比较字符串是否相等

strcmp(str1,str2);   //比较两个字符串是否相同,如果相同则返回0

测试字符串长度,不包括\0

strlen(str1);    //直接返回str1长度

指针

&p:指针也是一个变量,此代表编译器为变量p分配的地址,故实际上该变量就是地址。

p:代表指针p指向的一个地址,故实际上该变量就是地址。

*p:代表指针p指向的一个地址的值,故实际上该变量就是指针所指向地址里存的变量。

int **p:二级指针,代表p指向的地址里存放一个int类型指针。

*(&c)='a' :表示将‘a’赋给&c所指向的变量,指针就是地址。

函数指针

/*声明*/
int max(int a,int b);
int (*pf)(int,int);
pf=max;       //将max函数的入口地址发送给pf
(*pf)(x,y);   //相当于调用max函数

数组指针

char *str[5]={"a","b","c","d","e"};     //定义5个char类型指针分别指向5个字符串
	for(int i=0;i<5;i++)
	{
		printf("%s\n",*(str+i));    //每次输出1个字符串,后指针地址+1
	}

枚举

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
/*如果THU=1,则后面FRI、SAT、SUN分别为2、3、4*/

取余

0%2=0

1%5=1

2%5=2

3%5=3

位运算符

与:&

或:|

异或:^

取反:~

流程图

起止框:椭圆

输入输出框:四边形

判断框:棱形

处理框:长方形

算法

排序——升序(从小到大)

要求:7个元素按从小到大排序。

选择排序

思路:

第1次从7个元素中选择值最小元素,将其与数组中第1个元素交换;

第2次从第2个元素起的7-1个元素中选择值最小的元素,将其与第2个元素交换;

依次类推......

	int str[7]={1,5,2,3,2,4,5},min=0;
	for(int i=0;i<6;i++)
	{
		for(int j=i+1;j<7;j++)
		{
			if(str[i]>str[j])
			{
				min=str[i];
				str[i]=str[j];
				str[j]=min;
			}
		}
	}
/*外层循环遍历长度-1,内层循环遍历全部从第二个元素开始,判断条件进行交换*/

冒泡排序

思路:

比较相邻数字的大小,若第一个数比第二个数大,则相互交换;

针对所有数(除了最后一个)重复上述步骤,直到没有任何一对数字需要比较为止。

	int str[7]={1,5,2,3,2,4,5};
	int min=0;
	for(int i=0;i<7;i++)
	{
		for(int j=0;j<7-i-1;j++)
		{
			if(str[j]>str[j+1])    //如果相邻的数大于,则交换位置
			{
				min=str[j];
				str[j]=str[j+1];
				str[j+1]=min;
			}
		}
	}

查找

折半查找

思路:

折半查找只能在升序状态的数组才能进行查找

	/*折半查找*/
	int cos=0,sin=0;
	while(cos<=7-1)
	{
		sin=(cos+7-1)/2;
		if(str[sin]>1)
		{
			cos--;
		}
		else if(str[sin]<1)
		{
			cos++;
		}
		else
		{
			printf("已找到!值为:%d,下标为:%d",str[sin],sin);
			printf("\n");
			break;
		}
	}

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
    1. 支付宝打赏

      qrcode alipay
    2. 微信打赏

      qrcode weixin

评论区