3.【初识C语言】(上)

💦选择与循环

无论在生活中还是工作中,我们不可避免的要做出选择甚至日复一日地重复某件事情。

“人是铁饭是钢,一顿不吃饿得慌”,确实,我们每天都要重复做的一件事,那就是吃饭。

今天吃什么呢?干锅还是汤锅?这时,我们总是要做出一个选择。

思考:我们在生活中解决问题时,似乎总是离不开选择和循环,那么计算机解决一个问题是不是也是如此呢?

下面开始介绍。

选择语句

这与我们生活中很相似!

接着我们来代码实现:

#include<stdio.h>
enum select	//枚举关键
{
	Play_game,//枚举出可能的情况,其实这里
	Study_hard,//可有可无的,感受更直观	
};
int main()
{
	int My_Choice = 0;
	printf("你会努力学习编程吗?请选择->(1.Study_hard or 0.Play_game)\n");
	printf("请输入");
	scanf("%d", &My_Choice);
	if (My_Choice)  //选择语句
		printf("成为大牛,走向人生巅峰!");
	else  //选择语句
		printf("碌碌无为");
	return 0;
}

接着我们来做出我们的选择吧!

image-20220518223129630

这里可以看到我选择了1.Study hard,这里就在屏幕上打印出了:

成为大牛,走向人生巅峰!

我们再回到选择语句:

if(judge)
{true};
else
{false};

在if后面的()里,如果判断为真,则执行true,否则执行false。

牢记:选择语句的条件判断中,0为假,非0为真!

循环语句

有些事必须一直做,比如我们日复一日地吃饭。

image-20220518223136233

那么C语言如何实现循环呢?

循环有三种:

  • while语句
  • for语句
  • do while语句

这里我们先只看while语句

while语句相应的代码:

#include<stdio.h>
int main()
{
	printf("开始学习!\n");
	int study_time = 0;//学习天数
	while (study_time < 5000)
	{
		study_time++;//重复学习
	}
	if(study_time>=5000)
	printf("已经闭关5000天,拿到好offer");
	return 0;
}

小结:while后面的()里的条件如果为真(非0)就进入循环体,为假(0)就结束循环。


💦函数

听到函数是不是很熟悉?但是此函数非彼函数。

C语言函数的定义:

dataType functionName(){
//body }

  • dataType 是返回值类型,它可以是C语言中的任意数据类型,例如 int、float、char 等。
  • functionName 是函数名,它是标识符的一种,命名规则和标识符相同。函数名后面的括号( )不能少。
  • body 是函数体,它是函数需要执行的代码,是函数的主体部分。即使只有一个语句,函数体也要由{ }包围。
  • 如果有返回值,在函数体中使用 return 语句返回。return 出来的数据的类型要和 dataType 一样。
  • ()里是函数的形式参数。

来看个例子:

思考:如何利用C语言,实现一个计算两数之和的函数?

代码如下:

#include<stdio.h>
int ADD(int a, int b)
{
	return a + b;
}
int main()
{
	int x = 0;//初始化
	int y = 0;
	printf("请输入x,y\n");
	scanf("%d %d", &x, &y);//输入x,y
	int sum = ADD(x, y);
	printf("x+y=%d\n", sum);
	return 0;
}

运行结果:

image-20220518223145055

在我输入2 ,4后,可以看到2+4的结果被打印在了屏幕上。

总结:数据通过参数传递到函数内部进行处理,处理完成以后再通过返回值告知函数外部,并且可以简化代码,代码复用。


💦数组

创建一个变量我们可以对其赋值并使用,但如果我们想创建许多个类型相同的变量,该怎么做呢?

如果还是一个一个地去创建,未免太过浪费时间。

思考:可不可以在内存中申请一块连续的空间,这块空间可以存放多个数据?

于是数组应运而生.

C语言中给了数组的定义:一组相同类型元素的集合

数组的定义

int arr[5]={1,2,3,4,5};//定义一个整型数组,最多放5个元素

数组的下标

C语言规定:数组的每个元素都有一个下标,下标是从0开始的。

使用下标访问数组。

注意:下标是从0开始的。

比如:

数组的使用

例:将数组arr的每一个元素打印在屏幕上。

#include<stdio.h>
int main()
{
	int i= 0;
	int arr[5] = { 4,6,8,10,12 };//初始化数组
	for (i = 0; i < 5;i++)
	{
		printf("a[%d]= %d\n",i, arr[i]);//打印元素
	}
	return 0;
}

运行结果:

image-20220518223152659

利用循环,数组的每个元素的值就被打印在屏幕上了。


💦操作符

简单介绍,后面会着重讲

算术操作符

对两个数进行运算的符号(%是取余)

  +    -    *    /    %

例:1+2

移位操作符

  >>    <<

移动的是二进制位

例:将1左移一位得到多少?

代码:

#include<stdio.h>
int main()
{
	char a = 1 << 1;
	printf("%d", a);
	return 0;
}

运行结果:

image-20220518223200441

结果为2,我们来分析分析:

00000001 //这是1的二进制

左移1位后:

image-20220518223211804

最右边空出来一位补0
如下:

00000010 //将这个值赋值给a,也就是2

位操作符

位操作符 解释
& 按位与
| 按位或
^ 按位异或

例:将3和5两个数按位与得到多少?

代码:

#include<stdio.h>
int main()
{
	char a = 3; //赋值
	char b = 5;
	char c = a & b;//将3和5按位与的结构赋值给c
	printf("c=%d", c);
	return 0;
}

运行结果:

image-20220518223222459

c=1
这是为什么呢?

按照上面的规则分析:

3的二进制:

00000011

5的二进制:

00000101

按位与:对应二进制位置上的数字分别进行&操作,然后按原位进行排列

(1 1)->1
(1 0)->0
(0 1)->0
(0 0)->0
就得到:

00000001

即为1.

按位或和按位异或也是相似的方法。

总结:

  • 按位与:只要有一个0结果就为0,否则为1。
  • 按位或:只要有一个1结果就为1,否则为0。
  • 按位异或:相同为0,相异为1。

赋值操作符

  =  +=  -=  *=  /=  &=  ^=  |=   >>=   <<= 

例:a+=1是怎么运算的?

#include<stdio.h>
int main()
{
	int a = 1;
	a += 1;
	printf("a+=1后a=%d\n", a);
	a += 1;
	printf("a+=1后a=%d\n", a);
	return 0;
}

其实 a+=1a=a+1是一样的,也就得到了上面的结果。

其他的赋值运算符也都和+=类似。

单目操作符

单目操作符:只有一个操作数。

符号 解释
! 逻辑反操作—>采用逻辑运算
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(不一定是数,也可以是类型)
~ 对一个数的二进制按位取反
- - 前置、后置- -
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

关系操作符

符号 解释
> 比较大小
>=
<
<=
!= 判断是否相等
==
逻辑操作符
逻辑运算
运算符 解释
&& 逻辑与
| | 逻辑或

牢记:进行逻辑运算时,只看真假。

我们知道非0为,0为

与高中数学一样,”与 “必须时两个都为真,结果为真;

而 ”或“则只要其中一个为真,结果就为真。

例:求1 && 0 和 1 || 0的结果。

代码:

#include<stdio.h>
int main()
{
	int a = (1 && 0);
	int b = (1 || 0);
	printf("a=%d,b=%d", a, b);
	return 0;
}

运行结果:

image-20220518223233668

与我们所想的完全一致。

条件操作符

exp1?exp2:exp3

含义:如果exp1为真,则整个表达式结果为exp2,否则为exp3。(exp是表达式)

例:max=(a>b?a:b)

逗号表达式

例:exp1,exp2,exp3,...,expN

逗号表达式也叫隔开表达式。

(exp1,exp2,exp3,...,expN)这整个表达式的结果为最后一个exp,即expN。

其他

  • 下标引用
    [ ]

例:a[0]=1;

  • 函数调用
    ()

例:调用rand函数 rand();

  • 结构体成员
    .
    结构体变量名 . 成员名
    ->
    结构体变量指针->成员名

代码:

#include<stdio.h>
struct book		//创建一个结构体类型
{
	int price;
	char name[20];
	int number;
};
int main()
{
	struct book C = { 22,"C语言",002233 };//定义一个结构体变量 
	struct book* pc = &C;
	printf("直接通过变量访问成员:\n");
	printf(" price=%d\n", C.price);//通过.操作符访问变量成员
	printf(" name=%s\n", C.name);
	printf(" number=%d\n", C.number);
	printf("通过结构体变量的指针访问成员:\n");
	printf(" price=%d\n", pc->price);//通过->操作符访问变量成员
	printf(" name=%s\n", pc->name);
	printf(" number=%d\n", pc->number);
	return 0;
}

运行结果:

image-20220518223241530

这里就简单介绍了两种访问方式,他们之间还是有一定差异,但最终的效果是一样的。

posted @   NcPhoton  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示