更易上手的C语言入门级芝士 (2) 选择语句+循环语句、函数、数组、操作符(超详细)

目录

(1)选择语句+循环语句

1.选择语句(if...else语句,也称判断语句)

2.循环语句(while,for,do...while)

(2)函数

传值调用:

传址调用:

(3)数组

(4)操作符

1.算数操作符:

2.移位操作符

3.位操作符

4.赋值操作符

5.单目操作符

6.关系操作符

7.逻辑操作符

8.条件操作符

9.逗号表达式

10.下表引用、函数调用和结构成员


你好!本期芝士正是你所看到的标题内容。我们要知道学海无涯苦作舟,苦尽甘来。那么,沉下心,好好学。

(1)选择语句+循环语句

1.选择语句(if...else语句,也称判断语句)

用法:

#include <stdio.h>
int main()
{
int input = 0;
scanf("%d",&i);   //输入1或0
if(i)         //()内单独放变量名,默认判断为真,真就是非0的数
{
printf("好工作"); 
}
else          //正如有了非0,所以只剩下0,0为假
{          
printf("卖红薯");  
}
return 0;
}

2.循环语句(while,for,do...while)

while语句用法:

#include <stdio.h>
int main()
{
	int i = 1;
	while (i)  //i初始化的值为1,1为真,while循环的条件内只有i,所以这个是死循环
	{
		printf("牛啊\n");   //屏幕上会一直打印"牛啊"。
	}
	return 0;
}


int main()
{
	int i = 1;
	while (i <= 6)           
	{
		printf("666啊\n");
		i++;              //变量名++ 意思为后置++,即变量值 = 变量值+1  ,即如果i=1,那么i++=2
	}                     //当i++到i=7的时候,循环结束.屏幕上会打印6个 "666啊"
	return 0;
}

for语句用法:

#include <stdio.h>
int main()
{
	int i = 0;   //变量的定义一般放在最前
	for (i = 0; i <= 6; i++)  //语句1;判断语句;语句2 
	{                         //按顺序执行语句1打印"牛啊"
		printf("牛啊\n");     //语句2紧随其后i++后i变为了1
	}                         //然后判断
}                            //最后输出7行"牛啊",因为i是从0开始的

注意:for语句括号内的每个条件用分号隔开

do...while语句用法:

#include <stdio.h>
int main()
{
	int i = 0;
	do               //do先执行while后判断
	{
		printf("牛啊666啊\n"); 
	} while (++i <= 6);  //i++后置++,那么肯定还有前置的
	return 0;            //前置即先++后使用,后置即先使用后++
}                        //++i先++将i变为1,判断i<=6;
                         //最后打印出7行"牛啊666啊",因为没循环之前打印了一次

(2)函数

C语言中函数分为自定义函数和库函数

每一个程序必不可少的是main函数,那肯定还有其他函数了,main函数即主函数,"主"即函数名,每个变量都有类型,那么每个函数也需要有类型。

写法:int add()  返回类型 +函数名+(),传值分两种情况:传值和传址(地址)

现在有了名字,要实现加法需要传值(变量或常量),并且返回咱们需要的相加后的值

那么咱们看一下下面的代码,先看main函数

写法:

#include <stdio.h>
int add(int a,int b)  //函数接受,()内的变量称为形参,这写变量知识形式上的,所以要定义
{                                                       //来接受实参的值
	return a + b;   //返回值为a+b
}
int main()
{
	int a = 10;
	int b = 20;
	int c = add(a,b);  //这个叫"函数调用",传变量或常量,每个变量或常量用逗号隔开,                       
	printf("%d", c);   //()内称为实参(实际参数)        返回的值用c来接收,最后实现打印
	return 0; 
}

传值调用:

#include <stdio.h>
/*传值调用*/
void test(a)
{
    a = 20;
}
int main()
{
    int a = 10;
    test(a);
    printf("%d\n",a);
    return 0;
}
/*打印10,调用test传值为局部变量、实际参数a,定义test函数来接收,参数为形式参数*/
/*形式参数只是实际参数的一份临时拷贝,形式参数改变不影响实际参数的值为传值调用*/
/*打印的结果为10*/

传址调用:

#include <stdio.h>
int test(int* b)
{
    *b = 20;
    return *b;
}
int main()
{
    int a = 10;
    printf("%d\n",test(&a));/*链式访问,返回值为int类型*b*/
    return 0;
}
/*传址调用&a,指针类型b接收,平常谈的指针、指针变量就是存放地址的变量,操作符*为指针,类型由接收的变量类型所定,指针内容里会有深度讲解*/

(3)数组

数组,字面意思就是一些数存放在一个组当中

用法:变量类型 数组名[元素的个数] = {数据}     

元素的个数使用时被称为下标

数组元素的个数如果不放值,系统会自动读取存放数据

数组元素的个数如果为10,而数据存放只存放了5个的话,其余的会补成0

可以少放,但不能多放

数组的下标是从0开始的,定义时下标代表的是要存放数据的个数,使用时即当下标为0时访问的是数组中第一个数据

那么怎么求数组元素的个数呐?

look下面的代码:

#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	char arr2[5] = { 'a','b','c','d','e' };//字符单引号,字符串双引号
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);  //sizeof即求谁谁谁的大小sizeof(arr)求的是数组的大小
	for (i = 0; i < sz; i++)                //arr有10个元素,每个元素为int类型,int类型为4个字节 
	{                                //sizeof(arr)=40,那么arr[0]就是4个字节
		printf("arr[%d] = %d\n",i, arr[i]);
	}
	return 0;
}

执行结果:

 上面我只使用了int类型的数组,并没有用char类型的,是为了让你回忆一下上次学的芝士。

(4)操作符

操作符如:/为除号,*为乘号等 

1.算数操作符:

+     -     *     /     % 

例如:9/2得到的是4,9%2得到的是1,特殊情况9/2.0或者9.0/2得到的是4.5,/ 操作符任意一个操作数为浮点型,得到的结果为浮点型,而 % 操作符左右必须为整形

2.移位操作符

>>      <<    

移位操作符中右移操作符有两种右移形式:1.算术右移:右边丢弃,左边补原符号位  2.逻辑右移:右边丢弃,左边补0

整数在内存中的存储和移位操作符的应用

int main()
{
    int a = 10;

    /*a的二进制为00000000000000000000000000001010*/
    /*数据在内存中的存储形式为补码*/
    /*打印时为原码,转换:原码-反码-补码*/
    /* 原码即变量内容的二进制位,反码即原码符号位不变其他位按位取反,补码即反码+1*/
    /*整数的原反补相同,负数在内存中存的是补码*/

    int b = -10;

    /*b的二进制为10000000000000000000000000001010*/
    /*高位为符号位,正数为0,负数为1*/
    /*b的原码为10000000000000000000000000001010*/
    /*b的反码为11111111111111111111111111110101*/
    /*b的补码为11111111111111111111111111110110*/

    /*左移操作符例子*/
    a = b << 2;
    /*b 11111111111111111111111111110110*/
    /*b << 2右边补0    11111111111111111111111111011000*/

    /*右移操作符例子*/
    b = a >> 2;
    /*a 00000000000000000000000000001010*/
    /*a >> 2    00000000000000000000000000000010*/

    /*a为有符号整形(unsigned int),高位是符号位此时a的值为一个很大的负数*/
    /*b为有符号整形(unsigned int),高位是符号位此时b的值为正数2*/
    return 0;
}

3.位操作符

&     ^     |         

当我们了解了整形数据在内存中的存储是,这里我们更能够进一步了解位操作符的应用

&称为按位与     ^称为按位异或      |称为按位或

用法:1.  &  有0则0,两个同时为1则为1

           2.  |   有1则1,两个同时为0则为0

           3.  ^   相同为0,相异为1

这里不多讲解,下去用编译器设置两个变量,计算并输出他们两个舒勇位操作符后的值,实践出真理

4.赋值操作符

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

a+=1相同于a = a + 1

5.单目操作符

1.!         逻辑反操作

while(ture)条件为真   while(!ture)为假(其中的ture只是代表着条件为真)

2.-         负值

3.+        正值(正值的作用如果用于一个负数,还是一个负数)

4.&        取地址(接收类型为指针类型,指针是用来存放地址的一个变量,即指针变量)

5.sizeof  操作符的类型长度(以字节为单位),sizeof不是一个库函数,sizeof可以写为sizeof+空格+变量

6.~     对一个数的二进制位取反

int main()
{
	int a = 10;
	/*00000000000000000000000000001010*/
	/*补码11111111111111111111111111110101*/
	a = ~a;
	/*反码11111111111111111111111111110100*/
	/*原码10000000000000000000000000001011*/
	printf("%d", a);//打印为原码-11
	return 0;
}

7.--     前置、后置--

8.++   前置、后置++(前置即先++后使用,后置即先使用后++)

9.*  间接访问操作符(解引用操作符)用于解引用指针       

10.(类型)   强制类型转换

6.关系操作符

1.>

2.>=

3.<

4.<=

5.!=      不相等

6.==     相等            注意:=为赋值操作符   ==用在判断

7.逻辑操作符

1.&&          逻辑与          两个条件为真则为真

2.||             逻辑或         一个条件为真则为真

8.条件操作符

exp1?exp2:exp3         判断exp1,1为真执行exp2,否则执行exp3

9.逗号表达式

exp1,exp2,exp3....expN       用于赋值,将expN得到的值赋值

10.下表引用、函数调用和结构成员

[]   ()   .   ->    

/*[]*/
int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    int sz = sizeof(arr)/sizeof(arr[0]);/*sizeof(arr)数组的大小为10元素*4字节,40个字节; 
                                          arr[0]第一个元素的大小4个字节,最后得10个元素*/
    for(i = 0;i < sz;i++)
    {
        printf("%d",arr[i]);/*下标从0开始,表示第一个元素,以此类推*/
    }
    return 0;
}
/*()*/
void test()
{
    printf("好好学习,进大厂\n");
}
int main()
{
    test();
}
/*.和->*/
struct Stu{
    /*结构体知识:struct Stu为结构体类型,Stu类型名,类型内定义的变量为结构体的成员变量*/
    char name[20];
    int age;
};
void test(struct Stu* pa)/*接收结构体类型的指针变量*/
{
    printf("%s %d\n",pa->name,pa->age);
}
int main()
{
    /*我们先创建一个结构体类型的变量*/
    struct Stu a = {"张三",18};
    printf("%s %d\n",a.name,a.age);
    test(&a);
    return 0;
}

效果:

好了,这期芝士你应该收获了不少吧,记住基础要打牢,芝士能

吃多少是多少,咱不能撑着睡不着觉吧,嘿嘿~

  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值