C语言入门初识(中)

2023-11-08

常量

所为常量就是不能够被改变的量

常量的分类

1.字面常量

所谓字面,就是在程序中直接以值的形式来进行操作表现的。
例如:30,3.14159,‘W’,“abcd”。

2.const修饰的常变量

常变量其实本质上是变量,但是它是一个不能改变的变量。那它是变量不能变有什么用呢?这个问题我在指针章节再来解释
接下来我就来说明一下它为什么是不能够改变的变量

#include<stdio.h>
int main()
{
const int a = 10;
a = 20;
return 0;
}

在上面的代码中编译器会报错,这是因为它是一个不能够改变的量。

#include<stdio.h>
int main()
{
const int a = 10;
int arr[a] = {0,1,2,3,4,5,6,7,8,9};
return 0;
}

在上述代码中还是会报错的因为数组[ ]中必须为常量而它为变量。
这就是为什么const是不能变的变量了。

3.define 定义的标识符常量

在一个程序中经常会用到很多相同的常量,大多都用字面常量来表示。但是改变的时候就要一一改变这样会很麻烦,所以定义了一个标识符常量,需求改变的时候就改变标识符常量所代表的值。但是要注意的是不能在程序内该,我所说的改变是改变定义时候的标识符常量的值。
下面来用代码一一解释说明

#define MAX 10
#include<stdio.h>
int main()
{
int a = MAX;
int arr1[MAX] = {0,1,2,3,4,5,6,7,8,9};
int arr2[MAX] = {11,12,13,14,15,16,17,18,19,20};
return 0;
}

上述代码说明了标识符常量就是一个地地道道的常量。但是数组的最大值改变了,我们来看下面两段代码

#define MAX 10
#include<stdio.h>
int main()
{
MAX = 15
int arr1[MAX] = {0,1,2,3,4,5,6,7,8,9};
int arr2[MAX] = {11,12,13,14,15,16,17,18,19,20};
return 0;
}
#define MAX 15
#include<stdio.h>
int main()
{
int arr1[MAX] = {0,1,2,3,4,5,6,7,8,910};
int arr2[MAX] = {11,12,13,14,15,16,17,18,19,2021};
return 0;
}

第一个代码是错误的因为标识符常量是常量不能够改变,要想该变的话,必须是第二种改变定义时标识符常量的值。

4.枚举常量

在生活中我们常用一些常量是有尽的比如性别分为:男性,女性。三原色分为:黄,绿,蓝。
我们拿三原色:Red Green Blue举个枚举类型的例子

//枚举常量
enum Color
{
	RED,
	GREEN,
	BLUE
};
int main()
{
	enum Color c = RED;
	return 0;
}

上面就是枚举常量的使用,定义了一个枚举类型变量c赋值一个常量RED,就类似于 int num = 10;但是不能够赋值给除了定义的枚举常量外的常量了。

//枚举常量
enum Color
{
	RED,
	GREEN,
	BLUE
};
int main()
{
	RED = 20;//err
	MALE = 10;//err
	return 0;
}

上面编译器会报错,就是因为它是一个常量不能够被赋值。

字符串+转义字符+注释

字符串

"hello world"这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
顾名思义他是字面常量,字符串存储在字符数组中,格式为char arr[],
字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

观察下面代码,打印结果是什么?为什么?

#include<stdio.h>
int main()
{
char arr1[]={"abcdef"};
char arr2[]={'a','b','c','d','e','f'};
printf("%s",arr1);
printf("%s",arr2);
return 0;
}

上述代码中arr1存储的是一个字符串,以’\0’为结束标志,而arr2是存放的是6个字符,没有‘\0‘这个结束标志。在输出arr1内容时会输出该有的内容,但arr2的话内部不存在’\0‘只能在字符串后面的空间内找到’\0’才停止。

输出结果

那么字符串它的输出解决了,那么长度问题呢?
介绍一个函数strlen();该函数是测量字符串大小的,返回值为int,头文件为#include<string.h>

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = { "abcdef" };
	char arr2[] = { 'a','b','c','d','e','f' };
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	return 0;
}

输出结果

arr1数组中有’‘\0‘,该打小就是字符数组中’\0‘之前字符个数。但是arr2中没有’\0‘,当数组外空间有’\0‘时就会计算’\0‘之前字符的个数,由于’\0‘出现的位置是不确定的,所以arr2字符串的大小也是随机值。

%s为转换说明,对应字符串,下面介绍一下C语言常用的几个转换说明

C常用格式转换说明符

转换说明符 对应数据类型
%d 十进制整数
%c 字符
%s 字符串
%f 单精度浮点型
%lf 双精度浮点型
%zu 由sizeof()返回值的大小
%o 八进制整数
%x 十六进制整数

转义字符

假如我们要在屏幕上打印一个目录: c:\code\test.c

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

输出结果

这为什么和想象中的不一样呢???
接下来为你一一解答

当想要实现换行操作时‘\n’来进行换行
当进行回车操作时’\r’来进行回车
换行和回车现在大部分电脑中都没有差距,都是换到下一行开头位置。
上面提到的‘\t’就是水平制表符‘\t’相当于电脑上tab键。

\ddd \xdd分别代表一到三个八进制数或两个十六进制数所代表的ASCII值对应的符号
那么什么是ASCII值呢?计算机是二进制存储数据没有办法进行直接存储字符,所以用一串二进制来代替该字符,ASCII值就是和字符一一对应的。
需要记忆的ASCII值也就‘A’–65, ‘a’–97, ‘0’–48.

#include<stdio.h>
int main()
{
	printf("%c\n", '\107');
	printf("%c\n", '\x47');
	return 0;
}

结果

如上图这代码和输出结果分别代表8进制和16进制ASCII值对应的符号

那么问题来了, c:\code\test.c具体应该怎么输出呢?
C语言语法中\ ’ “这三种可以表示,'和”,在printf("%c",’’’);系统会默认前两个‘’配对第三个‘落单,最后系统会报错。

输出代码

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

扩展题printf("%d\n", strlen(“c:\test\628\test.c”));输出结果是多少?1

转义字符 释义
\n 换行
\r 回车
\t 水平制表符
\ddd ddd表示1~3个八进制的数字。
\xdd dd表示2个十六进制数字。
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。
\’ 用于表示字符常量’
" 用于表示一个字符串内部的双引号

注释

注释有两种风格:

  • C语言风格的注释 /xxxxxx/

    • 缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxxx

    • 可以注释一行也可以注释多行

    vs2019快捷键ctrl+k+c–>注释,ctrl+k+u–>取消注释
    c++注释风格要比C注释风格好用一次些,嵌套注释时c注释就不行了

写注释的好处

    1. 注释可以梳理梳理
    1. 对复杂的代码进行解释
    1. 写代码的时候写注释,是帮助自己,帮助别人的

选择语句与循环语句

在生活中人们面临的事情要么是顺序做事,要么面临选择,要么日复一日循环做事,C语言中也有顺序结构,选择结构,循环结构来完成C程序

选择语句

选择语句有if else语句,有switch语句,再这先介绍if else语句
if(x)else,如果X为真进入if,为假进入else
模拟一个选择过程:

#include<stdio.h>
int main()
{
printf("在人生过程中你想要继续努力嘛?\n");
printf("1:坚持 2:放弃\n");
int input = 0;
scanf("%d",&input);
if(input==1)
{
printf("发现你人生的命数\n");
}
else
{
printf("颓废过完一生\n");
}
return 0;
}

== 符号是判断两值是否相等,相等为真进入语句,不等为假不进入语句

循环语句

C语言常用的循环有三种while();for;do while();
我们接下来介绍while循环:
while(x),x为真进入循环,为假出循环

#include<stdio.h>
int main()
{
	int line = 0;
	while (line <= 30000)
	{
		printf("写代码:%d\n",line);
		line+=1;
	}
	if (line >= 30000)
	{
		printf("代码能力显著提高");
	}
	return 0;
}

最终结果展示了写了30000行有效代码最终代码能力有效提高;

函数

int Add(int x,int y); 是一个函数的声明,int 代表函数返回类型,Add代表函数名,x y 代表函数实参。
函数相当于是一个工厂,传进去的参数相当于是原料,函数内部相当于工厂加工过程,返回值相当于产品。
用函数求2个任意整数和:

#include<stdio.h>
int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int sum = Add(a, b);
	printf("sum = %d\n", sum);
	return 0;
}

那么定义这个函数的意义在哪呢?直接写int sum = a+b;不是更方便吗?
在以后的编程中会遇到代码行数很多而又复杂并且多次使用的代码过程,用函数把这段代码封装起来,就会更加方便不会重复书写大量代码同时也会使主函数更简洁。

数组

数组的定义

我们定义一个数用 int a; 定义两个数再定义个int b;如果定义10个20个呢?这样会不会显得非常麻烦。C语言就用了数组的概念来定义一组数字。
int a[10] = {1,2,3,4,5,6,7,8,9,10};这样一下定义了10个元素。
还可以定义char a[10];double a[10]……

数组的下标

把数据元素存储在数组中由下标来进行访问,数组的下标是从0开始的。
第九个元素下标也就是8;数组有十个元素,下标范围是0~9

数组的使用

我们来用循环语句遍历输出数组元素

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

变长数组

变长数组:C语言术语,也简称VLA。是指用整型变量或表达式声明或定义的数组,而不是说数组的长度会随时变化,变长数组在其生存期内的长度同样是固定的。百度百科

int main()
{
int n = 10;
int arr[n];
return 0;
}

此种语法格式是在C99标准出现的,但是有的编译器不支持C99,例如vs系列编译器用变长数组则不会通过。

在这串代码中数组可以定义但不可以初始话例如int arr[n]={1,2,3,4,5};这种在C99标准中也是错误的


  1. 14(注意八进制数不能有8) ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言入门初识(中) 的相关文章

  • python+pywinauto+lackey实现pc端exe自动化

    python pywinauto lackey实现PC端exe自动化 欢迎阅读 框架介绍 环境搭建 Tim自动化 完整代码 写在最后 欢迎阅读 最近一年多一直在从事PC端exe的测试 也是趁着闲余时间 调研了下exe的自动化 核心框架为py
  • 剪绳子(剑指offer 14-1题)

    这道题我拿到之后觉得第一个比较麻烦的点就是分成多少段是不确定的 处理起来就比较抽象 于是自然联想到分段数处理 于是我构建了一个函数getMax int n int i 它用来求长为n的绳子分成i段的最大积 然后在调用处循环每一个可能的i 取
  • 国内最强推荐系统,保姆级学习路线!!(含时间分配规划)

    最近秋招快要结束了 然后一直有很多小伙伴经常在后台私信我计算机专业关于学习路线的问题 可能还是因为没有真正工作而感到迷茫 而我也作为科班生一路走来 真的深知如果没有一个明确的方向 真的很容易走弯路 浪费大把的时间 了解我的小伙伴知道 我毕业
  • 使用UIUC数据集进行汽车检测

    第一步骤 下载数据集 https pan baidu com s 1tk10m8fh 7 MT4NJ29my4g 密码 wdzr 第二步骤 编写代码 如下 import cv2 import numpy as np from os path
  • latex±号_latex中数学符号

    latex中数学符号 常见数学中的特殊符号 缺失 latex中符号3610 9 alpha alfa 阿耳法 beta beta 贝塔 gamma gamma 伽马 deta delta 德耳塔 epsilon epsilon 艾普西隆 z

随机推荐

  • console.writeline($“{}{}“);

    console writeline 作用是将 内容当做表达式 例如 class MyClass public int val 20 class Program static void MyMethod MyClass f1 int f2 f
  • python字典和集合属于无序序列吗_python-序列、集合及字典

    组合数据类型 1 集合类型 集合是多种元素的无序组合 元素独一性 集合用大括号 表示 元素用 分隔 用set函数建立 A set python123 p y t h o n 1 2 3 集合操作符 集合有四种基础运算方法 并 交 差 补 S
  • 关于pads生产文件的导出

    1 solder mask solder mask 是阻焊层出的是负片 它的设置一般如图所示 这个是一般常规设置 如果器件焊盘已经专门做了阻焊焊盘 则可以按如图所示设置 如果选择top层焊盘 设备设置可以选择缩放为4 如果选择solder
  • EVE-NG网卡桥接,带您走进更高级的实验

    原帖地址 http www mamicode com info detail 1819599 html 一 给EVE NG添加虚拟的物理网卡 不管什么样的网卡 方法都类似 为什么说是虚拟的物理网卡呢 这个VMnet1网卡本身就是虚拟出来的
  • 一篇文章让你了解大数据挖掘技术

    大数据如果想要产生价值 对它的处理过程无疑是非常重要的 其中大数据分析和大数据挖掘就是最重要的两部分 在前几期的科普中 小编已经为大家介绍了大数据分析的相关情况 本期小编就为大家讲解大数据挖掘技术 让大家轻轻松松弄懂什么是大数据挖掘技术 什
  • 01 Datafountain_云状识别_top1

    01 Datafountain 云状识别 top1 摘要 1 云状识别算法总体思路和架构 2 云状识别算法具体实现过程 2 1 图像增强 2 2 多图像尺寸训练 2 3 选用densenet161预训练模型进行fine tune 2 4 差
  • Kotlin-Retrofit2和Rxjava2的网络封装,展示Github的用户信息

    目录 开始 1 先添加依赖 2 封装请求类 3 RESTful API请求响应的处理 4 线程与生命周期 5 使用 效果如下 开始 1 先添加依赖 Retrofit相关 implementation com squareup okhttp3
  • git did not exit cleanly (exit code 128) 的解决办法

    问题描述 在新建一个空的本地git仓库后 打算将远程仓库中的代码Pull到本地时异常 具体异常内容如下 git exe pull progress v no rebase origin masterPOST git upload pack
  • CRC-16校验原理

    1 循环校验码 CRC码 是数据通信领域中最常用的一种差错校验码 其特征是信息字段和校验字段的长度可以任意选定 2 生成CRC码的基本原理 任意一个由二进制位串组成的代码都可以和一个系数仅为 0 和 1 取值的多项式一一对应 例如 代码10
  • 【LeetCode】349. 两个数组的交集

    题目 给定两个数组 编写一个函数来计算它们的交集 示例 1 输入 nums1 1 2 2 1 nums2 2 2 输出 2 示例 2 输入 nums1 4 9 5 nums2 9 4 9 8 4 输出 9 4 说明 输出结果中的每个元素一定
  • Go语言面试题--基础语法(14)

    文章目录 1 切片 a b c 的长度和容量分别是多少 2 下面代码中 A B 两处应该怎么修改才能顺利编译 3 下面代码输出什么 1 切片 a b c 的长度和容量分别是多少 func main s 3 int 1 2 3 a s 0 b
  • 【科普向】谁都能看懂的CRC(循环冗余校验)原理

    CRC原理 简介 CRC基本原理 模二运算 二进制系数多项式 CRC算法 示例 CRC算法的数学描述 常用CRC版本 CRC算法的编程实现 简介 循环冗余校验 Cyclic Redundancy Check CRC 是一种根据网络数据包或计
  • MySQL - MySQL 8.0(二)基本操作:用户

    文章目录 前言 查看当前登录用户 一 创建用户 1 语法介绍 2 创建 dbadmin 用户 仅做了解 二 授予和撤销用户的访问权限 1 授予权限 2 检查授权 3 撤销权限 题外话 修改 mysql user 表 三 修改密码 身份验证插
  • 浅显易懂的GCC使用教程——初级篇

    浅显易懂的GCC使用教程 初级篇 2018 12 17天气暖 属于冬日里出太阳 最近在学习使用gvim 想着抛弃对IDE的依赖同时也是想了解编译的过程 但除了学习gvim繁多的指令外还得先学习使用gcc编译程序 这篇文章将会用浅显易懂的方式
  • [IDEA] 异常 Configuration is still incorrect. Do you want to edit it again? Error: module not specifie

    在Idea打开项目出现 Configuration is still incorrect Do you want to edit it again 的错误提示 点Edit 出现 Error module not specifie 问题 产生
  • el-input使用clearable,:title,MessageBox弹框外部关闭,el-Dropdown 下拉菜单详细举例,el-table的show-overflow-tooltip是什么?

    近期在工作中改测试提出的一些bug 有时候同样一个bug却忘了上一次怎么改的 特此总结分享 1 关于el input使用clearable属性即可得到一个可清空的输入框 2 由于clearable属性引发的一个小bug 如例图 蓝色部分后面
  • OpenCV:判断读取图片是否成功

    摘要 当用imread 读取图片时 如果图片路径错了 或者图片名称 又或者后缀格式错误 程序都会报错 基于这个问题 有时候我们不知道是读取图片失败而报错 会误以为是其它行代码出错了 所以 经常读取图片后 会进行判断图片是否读取成功 如果读出
  • iOS-对于把图片渲染成蓝色的修改方法

    在之前开发的过程中 遇到过这样一个小问题 给button设置一张图片 图片是灰色 美工做的图肯定没有问题 给button设置图片的方法也很简单 一句代码搞定 但是运行的时候却发现 图片无缘无故变成了蓝色 后来自己研究了一下发现 在给一些控件
  • cuDNN下载

    cuDNN下载网址 https developer nvidia com rdp cudnn download 按顺序点击可以看到与cuda相对应版本 点击对应cuda版本的cuDNN下载 例如CUDA11 4对应的版本
  • C语言入门初识(中)

    C语言入门初识 中 常量 常量的分类 1 字面常量 2 const修饰的常变量 3 define 定义的标识符常量 4 枚举常量 字符串 转义字符 注释 字符串 C常用格式转换说明符 转义字符 注释 选择语句与循环语句 选择语句 循环语句