Hello C语言(入门篇_下)

▼ 书接上回!铁子们我们往下翻 

目录

一、选择语句

二、循环语句

三、函数

四、数组

1. 数组的定义

2. 数组的使用

五、操作符

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用、函数调用和结构成员

六、常见关键字

关键字分类

1.  存储类型关键字(4个)

2.  数据类型关键字(12个)

3.  控制语句关键字(12个)

4.  其它关键字(4个)

1. volatile(先作为了解)

2. typedef 

3. register 

4. static 

1.  static 修饰局部变量

2.  static 修饰全局变量

3.  static 修饰函数

5. #define定义常量和宏

七、指针

1. 内存

2. 指针变量

八、结构体



一、选择语句

铁子们别管这个例子合不合理,确实现实生活中不可能遇到个美女,走上去要个微信就能成为你的女朋友。

抛开一切事实不谈,难道这就不能作为一个例子让铁子们认识一下选择语句是啥东西吗?但有一句话肯定是对的,不主动一定没故事,主动可能还会有点可能发生故事的。

跑题了跑题了.....嘿嘿

 那么接下来我们在VS上面打出来这个代码看看效果吧

#include <stdio.h>
int main()
{
	int aiqing = 0;
	printf("大街上遇到美女你会怎么办?(选择1(上去要微信)or 0(不上去要微信):>");
	scanf("%d", &aiqing);
	if (aiqing == 1)
	{
		printf("他成为你的女朋友\n");
	}

	else
	{
		printf("她成为你人生中的匆匆过客\n");
	}

	return 0;
}

 结果就不截图出来了,我相信各位铁子心里面已有答案


二、循环语句

循环语句分三种:

  1. while语句
  2. for语句
  3. do ... while语句

  后面两个语句我们后面讲,先了解一下while语句吧 

#include <stdio.h>
int main()
{
  printf("开始学习编程\n");
  int line = 0;
  while(line<=20000)
 {
    line++;
    printf("我要继续努力敲代码\n");
 }
  if(line>20000)
    printf("成为大牛\n");
  return 0;
}

三、函数

 函数的意义就是简化

#include <stdio.h>
int main()
{
  int num1 = 0;
 int num2 = 0;
  int sum = 0;
  printf("输入两个操作数:>");
  scanf("%d %d", &a, &b);
  sum = num1 + num2;
  printf("sum = %d\n", sum);
  return 0;
}
上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
 int z = x+y;
 return z;
}
int main()
{
  int num1 = 0;
 int num2 = 0;
  int sum = 0;
  printf("输入两个操作数:>");
  scanf("%d %d", &num1, &num2);
  sum = Add(num1, num2);
  printf("sum = %d\n", sum);
  return 0;
}
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

四、数组

 要存储1-10的数字,怎么存储?
 C语言中给了数组的定义:一组相同类型元素的集合

1. 数组的定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

2. 数组的使用

#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
   printf("%d ", arr[i]);
}
printf("\n");
  return 0;
}

五、操作符

算术操作符

”    +     -    *     /    %

移位操作符

>>       <<

位操作符

&    ^    |

赋值操作符

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

单目操作符

!        逻辑反操作
-        负值
+       正值
&       取地址
sizeof    操作数的类型长度(以字节为单位)
~      对一个数的二进制按位取反
--      前置、后置--
++      前置、后置++
*      间接访问操作符(解引用操作符)
(类型)    强制类型转换

关系操作符

>
>=
<
<=
!=     用于测试“不相等”
==    用于测试“相等

逻辑操作符

&&   逻辑与
||      逻辑或

条件操作符

exp1 ? exp2 : exp3

逗号表达式

exp1, exp2, exp3, …expN

下标引用、函数调用和结构成员

[]    ()    .    ->


六、常见关键字

auto  break  case  char  const  continue  default  do  double else  enum 
extern float  for  goto  if  int  long  register   return  short  signed
 sizeof  static struct  switch  typedef union  unsigned  void  volatile  while

以上是常见关键字,下面来对它们进行分类

关键字分类

1.  存储类型关键字(4个)

  1.    auto:      自动存储
  2.    static:    静态存储
  3.    register:  寄存器存储
  4.    extern:    声明一个外部的全局变量

2.  数据类型关键字(12个)

  1.    char :字符型变量或函数 (1byte
  2.    double :双精度变量或函数 (8byte)
  3.    enum :枚举类型 
  4.    float:浮点型变量或函数 (4byte)
  5.    int: 整型变量或函数 (4byte)
  6.    long :长整型变量或函数 (4byte)
  7.    short :短整型变量或函数 (2byte)
  8.    signed:有符号类型变量或函数 
  9.    struct:结构体变量或函数 
  10.    union:联合数据类型 
  11.    unsigned:无符号类型变量或函数  
  12.    void :函数无返回值或无参数,无类型指针 

3.  控制语句关键字(12个)

  1.    for:一种循环语句
  2.    do :循环语句的循环体
  3.    while :循环语句的循环条件
  4.    break:跳出当前循环
  5.    continue:结束当前循环,开始下一轮循环
  6.    if: 条件语句
  7.    else :条件语句否定分支(与 if 连用)
  8.    goto:无条件跳转语句
  9.    switch :用于开关语句
  10.    case:开关语句分支
  11.    default:开关语句中的分支
  12.    return :子程序返回语句

4.  其它关键字(4个)

  1.    const :声明只读变量
  2.    sizeof:计算数据类型长度
  3.    typedef:用以给数据类型取别名(当然还有其他作用)
  4.    volatile:说明变量在程序执行中可被隐含地改变

以上是常见关键字,下面来重点介绍几个关键字

1. volatile(先作为了解)

Volatile意思是“易变的”,应该解释为“直接存取原始内存地址”比较合适。“易变”是因为外在因素引起的,像多线程,中断等。

如果你觉得这个关键词还挺熟悉,那说明你C语言学的还不错,基础挺好的,我给你竖大拇指!(关于 volatile 就先说这么多)

2. typedef 

typedef 顾名思义是类型定义,这里应该理解为类型重命名

应用举例 ▼

//将unsigned int 重命名为uint_16, 所以uint_16也是一个类型名
typedef unsigned int uint_16;
int main()
{
  //观察num1和num2,这两个变量的类型是一样的
  unsigned int num1 = 0;
  uint_16 num2 = 0;
  return 0;
}

3. register 

register 关键字是请求编译器让变量a直接放在寄存器里面,追求速度快。 在c语言中,由register修饰的变量不能取地址,但是在c++里面做了改变。 1.register关键字请求“编译器”将局部变量存储于寄存器中,C语言中无法取得register变量地址。

4. static 

1.  static 修饰局部变量

//代码1
#include <stdio.h>
void test()
{
  int i = 0;
  i++;
  printf("%d ", i);
}
int main()
{
int i = 0;
  for(i=0; i<10; i++)
 {
    test();
 }
  return 0;
}
//代码2
#include <stdio.h>
void test()
{
  //static修饰局部变量
  static int i = 0;
  i++;
  printf("%d ", i);
}
int main()
{
int i = 0;
  for(i=0; i<10; i++)
 {
    test();
 }
  return 0;
}
//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{

对比代码1和代码2的效果理解static修饰局部变量的意义。

结论:static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

2.  static 修饰全局变量

 //代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
  printf("%d\n", g_val);
  return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
  printf("%d\n", g_val);
  return 0;
}

代码1正常,代码2在编译的时候会出现连接性错误。

结论:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,
不能在其他源文件内使用。

3.  static 修饰函数

//代码1
//add.c
int Add(int x, int y)
{
  return c+y;
}
//test.c
int main()
{
  printf("%d\n", Add(2, 3));
  return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{
  return c+y;
}
//test.c
int main()
{
  printf("%d\n", Add(2, 3));
  return 0;
}

代码1正常,代码2在编译的时候会出现连接性错误.

结论:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

5. #define定义常量和宏

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
  int sum = ADD(2, 3);
  printf("sum = %d\n", sum);
  sum = 10*ADD(2, 3);
  printf("sum = %d\n", sum);
  return 0;
}

七、指针

1. 内存

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址/指针

2. 指针变量

地址/指针可以存放在一个变量中,这个变量称为指针变量。通过指针变量中存储的地址,就能找到变指针所指向的空间

八、结构体

结构体是由一批数据组合而成的结构型数据。结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型
那么什么时候用结构体呢?当你要用C语言描述一个比较复杂的个体,就需要用到结构体了。

下面来举个例子 ▼

#include<stdio.h>
struct boy
{
	char name[8];
	int age;
	char habby[5];
	float height;
	double weight;

};
int main()
{
	struct boy s1 = {"继科",18,"赌博",178.5,135.5 };
	struct boy s2 = { "丁真",20,"抽烟",175.7,123.4};

	printf("%s %d %s %f %lf\n",s1.name,s1.age,s1.habby,s1.height,s1.weight);
	//第一种输出方式

	struct boy* py = &s2;
	printf("%s %d %s %f %lf\n", (*py).name, (*py).age, (*py).habby, (*py).height, (*py).weight);
	//第二种输出方式

	

	
 	return 0;
}

相信这两位有不少人认识,我就用他们两个来举例 嘿嘿

输出结果不用我说,聪明的铁子一眼就有结果,我就不把结果放出来了。

关键是代码中的输出方式的变化多样,其中也用到了指针,把指针用到结构体中来输出结构体中的方法就有两种。一种比较繁琐,一种比较简洁且看起来要舒服些。当然上面的代码没有第三种,第三种在下面,我马上给铁子们安排上。

#include<stdio.h>
struct boy
{
	char name[8];
	int age;
	char habby[5];
	float height;
	double weight;

};
int main()
{
	struct boy s1 = {"继科",18,"赌博",178.5,135.5 };
	struct boy s2 = { "丁真",20,"抽烟",175.7,123.4};

	printf("%s %d %s %f %lf\n",s1.name,s1.age,s1.habby,s1.height,s1.weight);
	//第一种输出方式

	struct boy* py = &s2;


	printf("%s %d %s %f %lf\n", py->name,py->age,py->habby,py->height,py->weight);
	//第三种输出方式
	//-> 结构成员访问操作符
	//

	
 	return 0;
}

- > 是结构成员访问操作符

怎么结构体里面只有printf啊,难道使用结构体不能使用scanf?

怎么可能嘛,当然可以使用scanf了,只不过要注意有些变量要前面要写上取地址符号“&”


#include<stdio.h>
struct boy
{
	char name[8];
	int age;
	char habby[5];
	float height;
	double weight;

};
int main()
{
	struct boy s1 = {"继科",18,"赌博",178.5,135.5 };
	struct boy s2 = { "丁真",20,"抽烟",175.7,123.4};
	//结构体可以输入吗?答案当然是可以了

	struct boy* py = &s1;

    scanf("%s %d %s %f %lf\n", s1.name, &(s1.age), s1.habby, &(s1.height), &(s1.weight));
	//输入
	printf("%s %d %s %f %lf\n",s1.name,s1.age,s1.habby,s1.height,s1.weight);
	//输出


	
 	return 0;
}

初识C语言完结,接下里就是细分每个章节的内容了

一起加油吧


“”锲而舍之,朽木不折;锲而不舍,金石可镂。——荀况“”

 初识C语言 完

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极 衍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值