初识C语言(二)

简介: 初识C语言(二)

1.变量和常量

生活中有些值是不变的,如圆周率,性别等等,有些值是可以改变的,如年龄,体重。在C语言中,不变的值用常量的概念来表示,可以改变的值,用C语言中的变量的概念来表示


定义变量的方法:

数据类型 变量的名称 = 变量的值;

int age = 18;
float weight = 45.5f;
char ch = 'w';


变量的分类

1.局部变量

2.全局变量

#include <stdio.h>
int global = 2022;//定义在函数外部,全局变量
int main()
{
  {
     int local =2023;//定义在大括号内部,局部变量,只在最近大括号内起作用
  }
int global = 2020;//这里不会发生重定义,局部变量
printf("%d\n",global);//输出2020;
return 0;
}


当局部变量与全局变量同名时,局部变量优先使用。

scanf函数与printf函数

scanf,printf都是库函数


库函数 - C语言的编译器提供的现成的函数,可以直接使用,但在使用的时候要包含头文件<stdio.h>


scanf的作用是输入数据,数据从键盘读取到内存中。


语法:scanf("输入格式",&要输入变量的名称”);


&取地址符。&a取出a的地址,表示a存放在內存中的哪里,这样你输入的值就会存放在a中


printf的作用是输入数据,数据从内存打印(输出)到屏幕上。


语法:printf("输出格式",要输出变量的名称”);


格式:


%d - 整形


%c - 字符型


%s - 字符串


%f - float


%lf - double


%p - 地址的打印


等等..


变量的使用

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("请输入两个要相加的数");
    scanf("%d %d",&num1,&num2);
    sum = num1 + num2;//将两个数相加的值存放在变量sum中
    printf("sum = %d\n",sum);//,后面sum的值会代替""内的格式%d来输出
    return 0;
}


变量的作用域和生命周期

作用域(scope)

程序设计概念,通常来说,一段程序代码中所用到的名字并不是一直有效/可用的。而限定这个名字的可用性的代码范围就是这个名字的作用域。

1.局部变量的作用域是变量所在的局部范围


//局部范围的作用域
int main()
{
  {
    int a = 10;
    printf("%d", a);
  }
  //printf("%d",a);//报错 超出了a的作用范围
  return 0;
}

2.全局变量的作用域是整个工程

//全局变量的作用域
int a = 2023;//全局变量在外部定义,在{}外定义
void test()//函数使用时需要调用,后面文章会讲到
{
  printf("2---> %d\n", a);//可以使用全局变量a
}
int main()
{
  printf("1---> %d\n", a);//可以使用全局变量a
  test();//调用函数test
  return 0;
}


生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

int main()
{
  {//变量创建的本质是在内存中开辟一块空间,存放数据
    int a = 3;
    int b = 5;
    int c = a + b;
    printf("%d", c);
  }//出作用域之后这些变量就没有便要存在了,就会被销毁
  //销毁,把内存空间还给操作系统
}


1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

2.全局变量的生命周期是:整个程序的生命周期。

//程序是从main函数开始执行,而a变量main函数内都可以使用
//所以全局变量a的生命周期是整个程序的生命周期 
int a = 10;
int main()
{
  //---
  //---
  //---
  return 0;
}


常量

C语言中的常量和变量的定义形式有所差异,常量不可以被修改。

C语言中的常量分为以下几种:

1.字面常量

2.const 修饰的常变量

3.#define 定义的标识符常量

4.枚举常量

1.字面常量:直接写出来的都是字面常量

int main()
{
    3.14;
    1000;
    'a';
    "qwer";//字符串常量,后面会讲
    "";//空字符串常量
    "a";//有一个字符的字符串
}


2.const修饰的常变量

int main()
{
  //这里a具有了常属性,不能被改变,但本质上还是变量
  const int a = 3;
  printf("%d\n", a);
  //a = 10;//报错,不可以修改
  printf("%d\n", a);
  //数组
  int n = 10;
  //int arr[n];//报错n是变量,数据必须指定大小必须是常量,如arr[10],有10个空间
  const int m = 10;
  //int arr[m];//报错,m是常变量,本质还是变量,只是不能被修改,而C++中是被彻底修改了arr[m]正确
}


3.#define 定义的标识符常量

//可以理解为给这个 常量取个其他的名字
#define SIZE 10 //SIZE 的值就是10 来表示大小
#define MAX 100
#define CH 'W'
int main()
{
  10;//不能直观表达要白表示的意思
  int a = SIZE;
  int arr[SIZE] = { 0 };
  printf("%c", CH);
  return 0;
}


4.枚举常量。枚举就是一一列举。生活中有些是可以一一列举的,如性别:男,女,其他。三原色,血型。用的是C语言中的关键字enum。

//enum定义枚举常量
enum SEX
{
  //列出来枚举类型enum SEX的可能取值,用','分开
  MALE,//可以设置初始值,默认从0往后排,后面依次加一
  FEMALE=4,//后面的从4往后排
  SECRET,//5 
};
int main()
{
  enum SEX s = MALE;//枚举变量赋值,赋值的值是确定的
  //MALE = 5;//报错不可修改
  printf("%d\n", MALE);//输出0
  printf("%d\n", FEMALE);//输出4
  printf("%d\n", SECRET);//输出5
  return 0;
}


2.字符串

字符串就是一串字符

字符如:a ! 1 @ q w 2 3 键盘上敲得任何东西都是字符,使用是要加单引号 ' '。

"hello"


这种由双引号引起来的一串字符称为字符串字面值,简称字符串

注意:字符串的结束标志是一个\0转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串的内容。转义字符后面会讲

int main()
{
  char c;
  c;//这个c是变量名,为了区分字符c ,所以字符c写成'c'
  'c';
  //ch[6]可以存放长度为6的字符串
  char ch[6] = { 'a','b','c','d','e','f' };//字符数组,没有'\0'
  char ch2[] = "abcdef";//可以看到ch[7]为'\0',就是第7项是'\0',但是长度是6
  //printf 以%s格式 打印字符串时,
  //就是从你给的地址开始打印,一直打印遇到'\0',停止
  //数组名本质是个地址,即存储数组在内存中的位置
  printf("%s\n", ch);//这种打印ch之后是未知的,所以会出现乱码,可以主动为ch后添加'\0',增加一项,就不会出现乱码了
  printf("%s\n", ch2);//在ch2字符串做最后有'\0',所以不会出现乱码
  char ch3[] = {'\0', 'a','b','c','d','e','f' };
  char ch4[] = "\0abcdef"; 
  printf("%s\n", ch3);//不会打印
  printf("%s\n", ch4);//不会打印
  return 0;
}


这里可以通过F10,也就是调试里的逐过程,每按一次执行一条语句。按过一次F10后,可以通过调试--窗口--监视,输入你要监视的ch和ch2,再按F10观察他们的变化。会发现ch2字符串后还有一个\0。


strlen()求字符串长度函数

strlen()函数也是库函数,可以直接使用,使用时要包含头文件<string.h>

//strlen()库函数,求字符串长度,要包含头文件 <string.h>
//就是从给定的地址,向后数字符,直到遇到\0结束,\0不统计在内
//数组名的本质是存放该数组的地址
#include<string.h>
int main()
{
  char ch1[] = { 'a','b','c' };//[a][b][c],\0的位置是未知的
  char ch2[] = "abc";//[a][b][c][\0]
  int len1 = strlen(ch1);
  int len2 = strlen(ch2);
  printf("%d\n", len1);//打印随机值,因为\0的位置未知
  printf("%d\n", len2);//3 
  return 0;
}


转义字符

//转义字符 -- 转变原来的意思
//'\0'  '\n'等都是特殊字符,转义字符
//假如要到屏幕打印一个目录:c:\test\test.c
int main()
{
  printf("(are you ok??)\n");
  //有些编译器是不能够打印出来的
  //??)早期叫做三字母词  代表 ] 
  // VS忽略三字母词
  //are you ok]
  printf("(are you ok\?\?)\n");
  // '\n'不再是 n 变成了换行符
  printf("c:\test\test.c\n");//'\t'被认为成转义字符,水平制表符 Tab
  //Tab大小可以设置,默认4个空格,通过 工具 - 选项 - 文本编译器 - C/C++ - 制表符
  printf("c:\\test\\test.c");//再次转义,可以输出   \\转义为普通斜杠
  printf("%c\n", '\'');//打印 ' 冒号          \'
  printf("%s\n","\"");//打印 " 双引号      \"
  printf("%s\n", "'");//字符串形式打印 '
  printf("\a\n");  // 警告字符 蜂鸣     \a
  printf("abc\bef\n");//abdef 退格符     \b
  //   \n 换行     \r  回车    \t 水平制表符   \v 垂直制表符
  //  \ddd    d d d 代表1 - 3个八进制数字 如 、
  //  \xdd    d d 表示1 - 2个十六进制数字
  printf("%c\n", '\130');//以字符格式输出
  //8进制的130,转化为10进制后得到88,ASCII码值对应  'X'
  printf("%c\n", '\x31');
  //16进制的31,转化为10进制后得到49,ASCII码值对应  '1'
  printf("%d\n", strlen("c:\test\x11\328\test.c"));//15
  //8不是8进制内的数,\32与8是两个字符
  return 0;
}

1691635861297.png


为了方便字符型数据在内存中存储,所以为每个字符进行了编号,就是ASCII码表,每个字符都有自己的编号。65--a,97--A,49--1。

注释

作用:

1.代码中有不需要的代码可以直接删除,也可注释掉

2.代码中有些代码比较难懂,可以加一下注释文字

//以//开头的注释风格是C++风格
/* 
C语言注释风格,
缺陷:不支持注释嵌套,注释内不能还有注释
*/


3.选择语句

1.if语句

2.switch语句(后面文章讲)

if语句:

int main()
{
  printf("好好学习\n");
  printf("你愿意好好学习吗?(1/0)>:");
  int flag = 0;
  scanf("%d", &flag);//输入你的选择
  if (flag == 1)//==判断相等,=是赋值操作
  {
    printf("好offer\n");//满足(flag == 1)条件打印
  }
  else if(flag == 0)//else表示没有满足上面最近if的条件时执行它的语句
  {
    printf("进场打螺丝\n"); //没有满足flag==1的条件,并且flag==0时打印
  }
  return 0;
}


4.循环语句

1.while语句

2.for语句(后面文章讲)

3.do...while语句(后面文章讲)


while循环语句:

int main()
{
  int line = 0;
  while (line < 50000)//满足(line<50000)条件时,执行下面括号里的内容
  {
    printf("敲代码 %d\n",line);//循环体
    line++;//++自增。每次加一
  }
  if (line = 50000)
    printf("好offer\n");
  else//不满足上面if条件时执行,满足ling=50000时不执行,跳过
    printf("差点意思\n");
  return 0;
}


相关文章
|
6月前
|
存储 程序员 C语言
C语言 (2)
C语言 (2)
31 0
|
C语言
C语言练习
C语言练习。
69 1
|
Linux 编译器 C语言
C语言必知必会
C语言必知必会
80 0
|
网络协议 Java 程序员
C语言
一、什么是C语言 C语言是一种通用的高级编程语言,由美国计算机科学家丹尼斯·里奇于1972年在贝尔实验室开发。C语言以其简洁、高效和可移植性而闻名,广泛应用于系统软件、应用软件和嵌入式系统等领域。 C语言具有简单的语法和丰富的库函数,使得程序员能够更有效地编写代码,并具有更好的可读性和可维护性。它支持面向过程的编程风格,允许开发者直接操作内存,提供了强大的指针功能,使得对内存的管理更加灵活。 C语言被广泛应用于操作系统、编译器、数据库、网络协议、游戏开发等领域。许多其他编程语言,如C++、Java和Python等,都受到C语言的影响,并在其基础上发展而来。 二、C语言的特点 C语言具有以下几个
67 0
|
1月前
|
Unix 程序员 C语言
初识C语言
C语言源于1972年,由贝尔实验室的丹尼斯·里奇和肯·汤普逊在开发UNIX操作系统过程中设计。它基于B语言改进而成,旨在成为一种实用的编程工具。尽管许多语言追求教育或易用性目标,但专为程序员设计的C语言,如今已成为主流编程语言之一。
26 8
|
1月前
|
存储 机器学习/深度学习 编译器
一篇文章,把你的C语言拉满绩点
一篇文章,把你的C语言拉满绩点
12 0
|
1月前
|
小程序 C语言
怎么学C语言?干货
怎么学C语言?干货
33 0
|
4月前
|
Java 编译器 C#
【C语言】初识C语言
学习C语言前期需要掌握的一些基础知识
60 2
【C语言】初识C语言
|
6月前
|
存储 C语言
初识C语言(二)
初识C语言(二)
|
Java C语言 C++
初识C语言(上)
初识C语言(上)
66 0