C语言初阶之初识C语言

一、主要内容

介绍一些C语言的基础知识,对C语言有一个大概的认识。对于每个知识点我们浅尝辄止,在以后的博客中再进行更加详细的讲解。

二、什么是C语言

C语言是一种广泛使用的高级编程语言,它最初由Dennis Ritchie于1972年左右在贝尔实验室开发。C语言的设计目标是为了提供一种可以方便地进行系统编程的语言,并且能够高效地运行在多种不同的计算机硬件上。C语言是很多现代编程语言的基础,C++就是由其发展而来。此外,许多操作系统的核心部分,包括Unix操作系统和Linux操作系统,都是用C语言编写的。

三、第一个C语言程序

接下来编写我们的第一个C语言程序,在你的控制台窗口或者终端窗口上打印出hello world!

#include<stdio.h> //这一行代码告诉编译器要包含标准输入输出头文件<stdio.h>
int main()//程序的主函数,每个C语言程序的入口,有且仅能有一个
{
    printf("hello world!\n");//打印hello world!到你的控制台或者终端窗口上
    return 0;//返回一个0给操作系统,表示main函数已经结束运行
}

四、基本数据类型 

C语言中包含有多种数据类型: 短整型(short),整型(int),长整型(long),字符类型(char),单精度浮点型(float),双精度浮点型(double)以及枚举类型。下面是详细的类型说明:e

类型类型说明符字节
短整型short2
整型int4
长整型long4
更长的整型long long8
单精度浮点型float4

双精度浮点型

double8
字符型char1

其中,长整型(long)在不同的编译器中可能具有不同的长度,可以通过如下代码查看类型的长度:

#include<stdio.h>
int main()
{
    printf("%d",sizeof(long));//可以替换成任意想要查看的类型
    return 0;
}

五、变量与常量

对于不会改变的值,C语言中使用常量的概念来表示,反之将其定义为变量。在编写过程中我们这样定义变量:

int age = 25;
float weight = 54.6f;
char ch = 'k';

变量分为局部变量和全局变量,下面这个例子会输出什么结果呢?

#include<stdio.h>
int global = 50;//全局变量
int main()
{
    int local = 10;//局部变量
    int global = 20;//这个定义方式会出问题吗?
    printf("global = %d",global);
    return 0;
}

事实上,当全局变量和局部变量同名时,局部变量优先使用。下面的代码为你展示如何使用变量:  

#include<stdio.h>
int main()
{
    //定义三个变量
    int num1 = 0;   
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:");
    scanf("%d %d",&num1,&num2);//输入两个整数,分别存储在num1和num2中,&是取地址符
    sum = num1 + num2;
    printf("sum = %d",sum);
    return 0;
}

变量具有特定的作用域和声明周期。作用域是一个程序设计概念,通常来讲,一段代码中所提到的变量名并不总是有效或者可用的,限定这个名字的可用性的代码范围就是这个名字的作用域。局部变量的作用域是变量所在的局部范围,全局变量的作用域是整个工程。事实上,局部变量在程序运行到它所在的作用域时被创建,离开时被销毁;全局变量则是在在整个程序开始时被创建。称变量从创建到销毁之间的时间段为变量的生命周期。

C语言中的常量与变量定义的形式有所差异。常量分为:字面常量,const修饰的常变量,#define定义的标识符常量,枚举常量。

#include <stdio.h>
#define MAX 100//#define的标识符常量 
enum Sex
{
 MALE,
 FEMALE,
 SECRET
};//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    3.14;//字面常量
    1000;//字面常量
    const float pai = 3.14f;   //const 修饰的常量  
    return 0;
}

六、字符串      

由双引号 引起来的一串字符称为字符串字面值 ,或者简称字符串。 字符串的结束标志是一个 \0的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串的内容,在计算字符串长度时也不包含\0。
#include <stdio.h>
int main()
{
	char arr1[] = "hello";
	char arr2[] = { 'h', 'e', 'l','l','0' };
	char arr3[] = { 'h', 'e', 'l','l','0','\0'};
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	return 0;
}

七、转义字符

假设我们要在控制窗口中打印一个目录:c:\code\test.c

我们应该怎么写这段代码?              

#include<stdio.h>
int main()
{
    printf("c:\code\test.c\n");
    return 0;
}

实际的运行结果是这样的 :

这里不得不提及一下转义字符了,转义字符就是转变字符的意思。

一些常用的转义字符:

转义字符释义
\'字符常量'
\"字符常"
\b退格
\\反斜杠
\r回车
\n换行
\xdddd表示两个十六进制数字
\dddddd表示1-3个八进制数字

也就是说打印目录:c:\code\test.c需要这么写:

#include<stdio.h>
int main()
{
    printf("c:\\code\\test.c\n");
    return 0;
}

 八、注释

  1. 为程序中某一个函数或者某一段代码的作用添加说明。
  2. 不需要的代码不直接删除,而是将其注释。

注释风格有两种:

#include<stdio.h>
int main()
{
    /*int x = 0;*/
   // int y = 0;//
    return 0;
}
  • C语言风格注释/*xxxxx*/
  • C++风格注释//xxxxx//

九、选择语句 

在编程中,选择语句(也称为分支语句或条件语句)用于根据特定的条件来决定执行哪一段代码。它允许程序根据不同情况作出不同的响应。在判断特定条件是否成立时,通常将其转换为判断某个表达式是否等于特殊的值,在C语言中“=”表示赋值,“==”判断相等,“!=”判断不相等,且常用0表示假,非0表示真。

  • if语句:在分支较少的程序中使用

if (表达式)
{
    语句一;
}
else if (表达式)
{
    语句二;
}
else
{
    语句三;

#include<stdio.h>
int main()
{
    int k = 0;
    printf("今天是周末吗?");
    scanf("%d", &k);
    if (k <= 5 && k >= 1)
    {
        printf("今天是周内\n");
    }
    else if (k <= 7 && k >= 6)
    {
        printf("今天是周末\n");
    }
    else
    {
        printf("输入错误\n");
    }
    return 0;
}
  • switch语句 :在分支过多的情况中,如果用if语句的话会显得很繁琐,可以用switch语句来实现。

switch(表达式)
{

    case 常量1: // 如果表达式的值等于常量1,执行下面的语句1
        语句1 ;
        break;

    case 常量2:// 如果表达式的值等于常量2,执行下面的语句2
        语句2;
        break;

        ...

    case 常量n: // 如果表达式的值等于常量n,执行下面的语句n
        语句n;
        break;

    default:  // 如果上面的都不满足,就会执行下面的语句n+1
        语句n+1;
        //break; // 默认语句最后才执行,执行完就会退出开关语句,可以省略break。

}

#include<stdio.h>
int main()
{
	int k= 0;
	scanf("%d", &k);
	switch (k)//条件只能是整型
	{
	case 1:  //case后面只能是整型常量
		printf("今天周一\n");
		break;
	case 2:
		printf("今天周二\n");
		break;
	case 3:
		printf("今天周三\n");
		break;
	case 4:
		printf("今天周四\n");
		break;
	case 5:
		printf("今天周五\n");
		break;
	case 6:
		printf("今天周六\n");
		break;
	case 7:
		printf("今天周天\n");
		break;
	}
	return 0;
}

default默认语句:在switch表达式的值不匹配所有的case标签的值时,default字句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。

十、循环语句 

 在程序运行中,存在着一些需要一直做的事,比如我需要不停的写博客,比如大家需要不停的学习。C语言中如何实现循环呢?

  • while语句
  • for语句(以后再讲)
  • do....while语句(以后再讲)

while循环实例:

#include <stdio.h>

int main() {
    int number = 10;
    int sum = 0;
    int counter = 1;

    while (counter <= number) //while循环会一直进行,直到counter超过number
    {
        sum += counter;
        counter += 1;
    }
    printf("从 1 到 %d 的累加和是: %d\n", number, sum);
    return 0;
}

十一、函数

 在 C 语言中,函数是由一组执行特定任务的指令组成的代码块。每个函数都有一个唯一的名称,可以通过调用这个名称来执行该函数的功能。一个 C 程序至少包含一个函数,即main函数,它是程序的入口点。

#include<stdio.h>
int main()
    {
        int num1 = 0;
        int num2 = 0;
        scanf("%d %d",&num1,&num2);
        int sum = num1 + num2;
        printf("num1 + num2 = %d",sum);    
        return 0;
    }

//这段代码可以写成函数如下

#include<stdio.h>
int sum1(int a,int b)
    {
        return a+b;
    }
int main()
    {
        int num1 = 0;
        int num2 = 0;
        scanf("%d %d",&num1,&num2);
        int k = sum1(num1,num2);
        printf("num1 + num2 = %d",k);
        return 0;
    }
         

函数的作用就是简化代码,复用代码,增强代码的可读性。 

十二、数组

在C语言中,使用变量来存储单个的数据,当有一组具有相同数据类型的元素需要存储时,则需要使用数组。数组中的每一个元素都可以通过索引来访问。

#include <stdio.h>
int main() {
    // 定义一个整型数组
    int numbers[5]; // 数组包含 5 个整数
    // 初始化数组
    numbers[0] = 10;
    numbers[1] = 20;
    numbers[2] = 30;
    numbers[3] = 40;
    numbers[4] = 50;
    // 或者在定义时初始化
    int scores[] = {85, 92, 78, 95, 88};
    // 访问数组元素
    for (int i = 0; i < 5; i++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
        printf("scores[%d] = %d\n", i, scores[i]);
    }
    return 0;
}

十三、操作符

 C 语言中有多种操作符,用于执行各种运算,如算术运算、关系运算、逻辑运算等。这里简单介绍一些有那些: 

  • 算数操作符 
+         -         *         /         %
  • 移位操作符
>>         <<
  • 位操作符
&         ^         |
  • 赋值操作符
=        +=        -=        *=        /=        &=        ^=        |=        >>=        <<=
  • 单目操作符
!          逻辑反操作
-             负值
+            正值
&            取地址
sizeof     操作数的类型长度(以字节为单位)
~            对一个数的二进制按位取反
--            前置、后置--
++          前置、后置++
*             间接访问操作符(解引用操作符)
(类型)     强制类型转换
  • 关系操作符
>
>=
<
<=
!=        用于测试“不相等”
==       用于测试“相等”
  • 逻辑操作符
&&     逻辑与
||        逻辑或
  • 条件操作符
exp1 ? exp2 : exp3
  • 逗号表达式
exp1 , exp2 , exp3 , …expN
  • 下标引用、函数调用操作符和结构成员
[]        ()        .        ->

十四、关键字

在 C 语言中,关键字是指具有特殊含义的保留字,它们不能用作标识符(如变量名、函数名等)。C 语言的关键字主要用于定义程序的结构和行为,如声明变量、定义函数、控制流程等。 

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

十五、#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 个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地

 

每个变量都存储在内存中,因此每个变量都有对应的地址,可以取出地址变量:

#include<stdio.h>
int main()
{
    int num = 0;
    printf("%p",&num);//&num取出变量的num的地址
    return 0;
}

如果我们想要直接操作地址,那就需要将其存储到一个变量中。

#include<stdio.h>
int main()
{
    int num = 0;
    int* p;//p为一个指针变量
    p = &num;
}

实际是这么使用的:

#include<stdio.h>
int main()
{
    int k = 10;
    int* p = &k;
    *p = 20;
    printf("%d",k);
    return 0;
}

十七、结构体

结构体是 C 语言中特别重要的知识点,结构体使得 C 语言有能力描述复杂类型。
比如描述学生,学生包含: 名字 + 年龄 + 性别 + 学号 这几项信息。
struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
};

结构体的初始化:

//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);

看到这里,想必你C语言已经有了一个初步的认识,保持你的好奇心,用于尝试,不断实践,你会逐渐发现自己的进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值