C语言入门_学习基本语句与运算符

举报
DS小龙哥 发表于 2024/01/31 14:27:03 2024/01/31
【摘要】 今天咱们要来一场关于C语言那些“骨灰级”知识的轻松畅谈。你是否还记得初次接触C语言时,面对位运算符、基本运算符、数据类型这些概念时的懵懂与好奇?又或者对变量声明、for循环、while循环、goto跳转、switch选择结构等语法元素有过琢磨不透的时候?这次的文章,就是要把这些看似琐碎实则关键的基础知识点,用咱老百姓都能听得懂的大白话给细细掰扯清楚。

今天咱们要来一场关于C语言那些“骨灰级”知识的轻松畅谈。你是否还记得初次接触C语言时,面对位运算符、基本运算符、数据类型这些概念时的懵懂与好奇?又或者对变量声明、for循环、while循环、goto跳转、switch选择结构等语法元素有过琢磨不透的时候?这次的文章,就是要把这些看似琐碎实则关键的基础知识点,用咱老百姓都能听得懂的大白话给细细掰扯清楚。

从神秘莫测的位运算符开始,带你领略二进制世界的魅力;接着聊聊那最常用的基本运算符,加减乘除背后的逻辑其实很简单。当然啦,没有数据类型和变量的日子就像炒菜没放盐,这里我们得好好说说它们怎么用、有何区别。

然后一起穿越到控制流程的世界:for循环像是跑马拉松,步步为营;while循环更像打太极,条件满足就不停歇;goto语句尽管老派却实用,关键时刻它能帮你瞬间转移战场;switch语句则是多面手,多个分支应对多种情况,灵活切换不在话下。

聊聊运算符优先级这个让不少新手头疼的问题,再揭秘如何通过强制转换把不同类型的数据“变戏法”地相互转化。


当前文章复盘C语言的: 位运算运算符、基本运算符、数据类型、变量、for语句、while语句、goto语句、switch语句、运算符优先级强制转换等。

一、变量的命名

变量的命名:   (13个字符)
1. A~Z  a~z
2. 0-9
3. _
4. 说明:  只能字母和数字开头。不能使用关键字。
    //左值和右值
    unsigned int a=123;  //4个字节
    const int b=456;
    char c='A';
    float d=123.456; //123.456 浮点数常量
    char *p="123456"; //"123456"字符串常量

二、常量数据格式

#include "stdio.h"//常量声明: U和L 表示无符号长整型
#define ABC 123UL
#define ABC 123ul
​
int main(void)
{
    //0b101010; //二进制表示形式
    //0x123;    //表示十六进制
    //123       //表示十进制
    int a=0x123;
    return 0;
}

三、运算符

3.1 逻辑非

#include "stdio.h"//常量声明: U和L 表示无符号长整型
#define ABC 123UL
​
int main(void)
{
    int a=0;
    if(!a)
    {
        printf("为真!\n");
    }
    
    int data=1234;
    printf("%d\n",!!data);  //1
    return 0;
}

3.2 位运算

&  :全11,有00
|   :全00,有11
^  :相同为0,不同为1
~1001
>> :右移运算,低位溢出高位补0
<< :左移运算符,高位溢出,低位补0

位运算符使用较多的地方: (1) 单片机里寄存器操作

(2) 协议加密解密、压缩算法、各种算法。

(3) 当做标志位使用

#include "stdio.h"
//系统里需要有8个状态位,需要存放8个状态位--------当做寄存器使用
int main(void)
{
    unsigned char a=0; //8个位  范围:0~7
    
    //如何将a第7位,置1呢?
    a|=1<<7;
    
    //如何将a第2位,置1呢?
    a|=1<<2;
    
    //将2的第3位和第4位置1
    a|=0x3<<3;
    
    //如何判断第7位是0还是1呢?
    if((a>>7)&0x1)
    {
        printf("第7位的值为真!\n");
    }
    else
    {
        printf("第7位的值为假!\n");
    }
    
    //bool sbit  位定义 。
    //bool a; sbit LED1=P1^1;
    return 0;
}

3.3 sizeof运算符

Sizeof运算符
#include "stdio.h"
int main(void)
{
    int a=1234;
    printf("%d\n",sizeof(a)); //4
    
    int b=1;
    printf("%d\n",sizeof(b));  //4
    return 0;
}

3.4 三目运算符

#include "stdio.h"
int main(void)
{
    /*
    int a;
    scanf("%d",&a);  //取地址
    
    int a,b;
    a=a&b; //与
    
    int a,b;
    a=a*b;  //乘号
    
    int *a; //指针类型
    */
    
    int a;
    a=8>5?123:456;  //if(8>5){a=123;}else{a=456;}
    printf("%d\n",a); //123
    return 0;
}

3.5 运算符的优先级和强制转换

#include "stdio.h"
int main(void)
{
    int a=123+456-12*5/78; //高优先级先结合,再依次....
    //如果优先级同级,执行顺序是从左边到右边。
    //优先级最高:()小括号
    
    int b=123456789;
    char a=(char)b; //强制转换,只是取低8位
                    //欺骗编译器,告诉它,b是char类型。
    
    char a='8';
    int b=(int)a; //强制转换
    printf("b=%d\n",b); //还是字符8
    return 0;
}

四、语句

4.1 for循环语句

#include "stdio.h"
//系统里需要有8个状态位,需要存放8个状态位--------当做寄存器使用
int main(void)
{
	int a=123,b=456;
	int cnt=0;	
	for(a=0;a<5;a++)
	{
		for(b=0;b<5;b++)
		{
			if(a==2)
			{
				break; //跳出最近的一层循环
			}
			cnt++;
		}
	}
	/*
	for(;;)
	{
		//死循环
	}
	
	while(1)
	{
		//死循环
	}
	
	do
	{
		//死循环
	}while(1);
	*/
	printf("cnt=%d\n",cnt);//20
	return 0;
}

4.2 while循环语句

while循环语句
#include "stdio.h"

//系统里需要有8个状态位,需要存放8个状态位--------当做寄存器使用
int main(void)
{
	int a=0,b=0;
	int cnt=0;	
	while(a<5)
	{
		while(b<5)
		{
			if(a==2)break;
			b++;
			cnt++;
		}
		b=0;
		a++;
	}
	printf("cnt=%d\n",cnt);//20
	return 0;
}

4.3 goto语句

在平常的逻辑代码里面,不推荐使用goto语句。 常用的地方: 错误处理,某某程序初始化失败,就释放资源等操作。

#include "stdio.h"

//系统里需要有8个状态位,需要存放8个状态位--------当做寄存器使用
int main(void)
{
	int cnt=0;
AA:	//标签的定义,可以放在函数范围内的任意位置。(不能超出函数范围)
	printf("123\n");
	if(cnt==5)goto DATA;
	cnt++;
	goto AA;

DATA:	
	return 0;
} 

Goto语句常用在错误处理:
#include "stdio.h"

//goto语句在错误处理里使用
int main(void)
{
	if(LED_Init()<0) //表示该函数返回值错误
	{
		goto ERROR;
	}
	
	if(KEY_Init()<0) //表示该函数返回值错误
	{
		goto ERROR;
	}
	
	/*....*/
	/*....*/
ERROR:
	//释放资源,结束程序
	return 0;
}

4.4 Switch语句

Switch语句主要用在多分支选择结构----有很多种条件/情况。 实际代码里,常用于菜单选择:



#include "stdio.h"
int main(void)
{
	switch(cmd) //cmd的值传入之后,与case后面的比较,成功之后再执行语句
	{
		case 1: //case 后面值只能是常量,而且不能重复
			break; //跳出最近的一层switch语句
		case 2:
			{
				/*......*/
				break;
			}
		case 3:
			break;
		/*......*/
		
		default: //类似于else
			printf("所有的条件都不成立!\n");
	}
	return 0;
}

示例:


#include "stdio.h"

//投票系统,有3个待选举的人,A,B,C ,有10张票
int main(void)
{
	int i;
	int A=0,B=0,C=0;
	int data;
	for(i=0;i<10;i++)
	{
		printf("请投票(范围1~3):");
		scanf("%d",&data);
		switch(data) //data的值传入之后,与case后面的比较,成功之后再执行语句
		{
			case 1: //case 后面值只能是常量,而且不能重复
				A++;
				break; //跳出最近的一层switch语句
			case 2:
				B++;
				break;
			case 3:
				C++;
				break;
		 //	default: //类似于else
		}
	}
	
	printf("A=%d\n",A);
	printf("B=%d\n",B);
	printf("C=%d\n",C);
	return 0;
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。