初识C语言(了解)

时间:2022-12-18 17:56:07

计算机语言的发展

什么是C语言?

计算机语言是人与计算机交流的语言,C语言是计算机语言。此外计算机语言还有c++ 、jave、py等语言。

计算机语言的发展

二进制语言

  • 电脑是硬件,只能识别电信号 +-电,正负电分别对应二进制数1(正电)、0(负电)。如1010000101011比较复杂,需要查手册才能写代码。

汇编语言

为了能更便捷的写代码,便给常用序列汇编成固定符号。如10100001--ADD表示。ADD为助记符,用助记符表示二进制序列的语言叫做汇编语言。

B语言

以上语言称为低级语言


C语言

C++语言

C语言后为高级语言


美国国家标准语法ANSI

如89年的C语言标准———c89;

90年的C语言标准——c90;

后期还有c99、c11等标准,但其并不流行,很多编译器都不支持。

常用编译器

Clang、GCC、MSVC、TurboC等

第一个C语言程序

初识C语言(了解)

常用快捷键

Fn+F10从某行开始执行

Ctrl+Fn+F5运行

Fn+F7 编译

数据类型

  • 数据类型用于向内存申请空间,创建变量

初识C语言(了解)


  • short——短整型,也为short int
  • float——单精度浮点型
#include <stdio.h>
int main()
{ float f=5.6;//部分编译器可能默认5.6为双精度而报错,可改为5.6f以强调单精度。

printf ("%f\n",f);
return 0;
}
  • double——双精度浮点型
#include <stdio.h>
int main()
{
double d = 3.14;//向计算机申请8字节=64比特,用来存放3.14
printf("% lf\n",d);//为了区分单双精度,双精度为lf
return 0;
}
  • 单双精度的结果都为小数点后6位

%d——打印整型(十进制数)

%c——打印字符

%p——以地址形式打印

%——打印十六进制数

每种类型大小

# include <stdio.h>
int main()
{
printf("%d\n", sizeof (char));//1字节大小
printf("%d\n", sizeof(short));//2字节大小
printf("%d\n", sizeof(int ));//4字节大小
printf("%d\n", sizeof(long ));//4或8字节大小,C语言规定:sizeof(long)>=sizeof(int)即可
printf("%d\n", sizeof(long long ));//8字节大小
printf("%d\n", sizeof(float ));//4字节大小
printf("%d\n", sizeof(double));//8字节大小

return 0;

选用合适的数据类型,以便申请合适的储存空间,避免浪费

计算机单位

  • 数据存储是以"字节" (Byte) 为单位,数据传输大多是以"位" (bit,又名"比特") 为单位,一个位就代表一个0或1 (即二进制) 

bit——比特,又称"位", 计算机中每个0或1就是一个位——一个比特位存放一个二进制位 ;

1B (byte,字节) = 8 bit ((bit)) ;

1KiB(Kibibyte,千字节)=1024B= 2^10 B;

1MiB (Mebibyte,兆字节,百万字节,简称"兆") =1024KB= 2^20 B ;

1GiB (Gibibyte,吉字节,十亿字节,又称"千兆") =1024MB= 2^30 B ;

1TiB (Tebibyte,万亿字节,太字节) =1024GB= 2^40 B ;

1PiB (Pebibyte,千万亿字节,拍字节) =1024TB= 2^50 B ;

1EiB (Exbibyte,百亿亿字节,艾字节) =1024PB= 2^60 B ;

1ZiB (Zebibyte,十万亿亿字节,泽字节) = 1024EB= 2^70 B ;

1YiB (Yobibyte,一亿亿亿字节,尧字节) = 1024ZB= 2^80 B ;

换算为1024


进制换算(权重^比例)

123转十进制

123=1^102+2^101+3^100

二进制转十进制

001=1^20=1

010=1^21+0^20=2

011=2+1=3

100=1^22=4

共有23=8种数,即2比特个数

八进制转十进制

八进制数由0-7构成,最大数字为7,不可有380等存在大于7的数,可有370

32=3^8+2^8=26



变量

定义方法

数据类型+变量名=赋值

变量分类

局部变量

定义在{}代码块内的变量,其作用域为局部{}代码块内

全局变量

定义在{}代码块外部的变量,其作用域为整个程序

注意

  • 当局部变量和全局变量同时存在,且变量名都相同时,局部变量优先。
#include <stdio.h>
int a = 100;//全局变量
int main()
{
int a = 5;//局部变量

printf("%d\n", a);
return 0;
}
//输出结果为局部变量5
  • 局部变量名和全局变量名不建议相同,否则容易出bug
  • C语言语法规定,变量要定义在当前代码块的最前面,即用前定义好
#define _CRT_SECURE_NO_WARNINGS
#inclu#define _CRT_SECURE_NO_WARNINGSde <stdio.h>
int main()
{
int num1= 0;
int num2 = 0;
int sum = 0;//用前定义
scanf ("%d%d", &num1, &num2);//scanf为C语言提供的库函数,在部分编译器不可用。在源文件首行加上#define _CRT_SECURE_NO_WARNINGS可解决类似问题
//若为VS编译器,还可以改为有编译器提供的scanf_s(此方法不具有可移植性)
//此外还可以在编译器中提前设置好,以便每次创建源文件时都会有#define _CRT_SECURE_NO_WARNINGS
sum = num1 + num2;
printf("%d\n", sum );
return 0;


变量作用域

代码中所用到的变量不总是有效/有用的,在哪里可以用,哪里即是其作用域。

生命周期

  • 局部变量:进入作用域{}周期开始,出作用域生命结束
  • 全局变量:作用于整个程序。


常量

字面常量

直接写出的值。如3、4

const修饰的常变量

有const修饰后,被修饰的值具有常属性(即将变量固定为一个常量,不可再改变)。

#define定义的标识符常量

#include <stdio.h>
#define max 10//定义标识符时不要忘记给值,否则会出错
int main()
{
int arr[max] ;//此处max已经定义为常量,可以放于【】内
printf("%d\n", max) ;
return 0;
}

枚举常量

枚举关键字——enum

ASCⅡ码

数据在计算机存储时以二进制存储,故每一个符号都有其对应的二进制序列,为表示便捷,将其转换为十进制,这种给给每个元素编号的方式称为ASCⅡ编码,其值为ASCⅡ码值。

ASCⅡ码表

初识C语言(了解)

初识C语言(了解)


如a——97 A——65大小写差值为32

符串+转义字符+注释

字符串

由双引号引起的一串字符称为字符串面值,简称字符串。如“hello,world\n”

注:计算字符串长度时\0或0是结束标志,不作为字符串内容。若无结束标志,则会继续打印随机值,直到遇到结束标志0为止。

#include <stdio.h>
int main()
{
char arr1[] = "abc";//此数组隐藏了结束标志\0
char arr2[] = { 'a','b','c' };//此处无结束标志\0 应该加上0或\0
printf("%s\n", arr1);
printf("%s\n", arr2 );
return 0;


转义字符

转变原来的意思

三字母词:??+其他    如??)——>]

转义字符

意义

ASCⅡ码值(十进制)

\?

书写多个?时,防止其被解析为三字母词

063

\\

用于表示一个\防止其被解析为转义序列符

092

\ddd

\十八进制数  ddd表示八进制数,如\130x


\xdd

\x十六进制数  dd表示2个十六进制数,如\x300


\a

响铃(BEL)

007

\b

退格符


\r

回车


\'

表示字符常量‘


#include <stdio.h>
#include <string.h>//strlen的头文件为string
//strlen为计算字符长度
int main()
{
printf ("%d\n", strlen("c:\test\32\test.c"));
//\t为转义字符为一个字符长度
//\32为一个长度 (32为2个八进制数,转换为十进制数为3^8+2=26代表的ASCⅡ码为向右的箭头—>
return 0;
//总长度为13}

注释

  • C语言中为/*  */  缺点为不可嵌套注释,遇到*\即结束
  • c++中为//


语句

选择语句

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
int input = 0;
printf("开始学习计算机\n");
printf("认真学习?(1/0)>:");
scanf("%d",&input);//句子间没有空格的不要打空格,否则会事与愿违。如% d就不行
if (input ==1)
printf("好offer\n");
else
printf("卖洋芋\n");

return 0;
}

循环语句

while 语句

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
int line=0;
printf("加入计算机\n");
while(line<2000)
{
printf("敲一行代码:%d\n",line);
line++;
}

if (line >= 2000)
printf("好offer\n");
return 0;
}

for语句

do----while语句

函数

数组

一组相同类型元素的集合

int arr[10]={1,2,3,4,5,6,7,8,9,10}  数组

下标从0开始0,1,2,3,4,5,6,7,8,9 如arr[2]=3

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

int i = 0;
while (i < 10)
{
printf("%d\n", arr[i]);
i++;
}
return 0;
}

操作符

算术操作符

%——取模(即取余数)。如a=5%2=1;    a=5/2=2

位(二进制)操作符

&——按位与(同真则真)

#include <stdio.h>
int main()
{
int a = 3;//011=3
int b = 5;//101=5
int c = a & b;//001=1
printf("%d\n", c);
return 0;
}//结果为1

|——按位或(有真则真)

#include <stdio.h>
//#include <string.h>
int main()
{
int a = 3;//011=3
int b = 5;//101=5
int c = a|b;//111=4+2+1=7
printf("%d\n", c);
return 0;
}//结果为7

^——按位异或同假异真/同为0,异为1)

#include <stdio.h>
//#include <string.h>
int main()
{
int a = 3;//011=3
int b = 5;//101=5
int c = a^b;//110=4+2+0=6
printf("%d\n", c);
return 0;
}//结果为6

赋值操作符

  • 一个=为赋值  ;两个==为判断相等
  • 复合赋值符+=,*=,&=,/=,》=,《= ,^=,|=

如:

a=a+10<==>a+ =10

a=a-10<==>a- =10

a=a&2<==>a&  =2

单/双/三目操作符

单目操作符

只有一个操作对象,如:

  • !(逻辑反操作符)——>改变真假
#include <stdio.h>
int main()
{
int a = 10;
printf("%d\n", a);
printf("%d\n", !a);//a=10为真,有!后变为假即0
}
//结果为a=10 !a=0

C语言中0表示假,一切非0表示真

  • -(负值), 
  • &(取地址符)——>有多个变量时,需要取出对应地址来存储变量
  • sizeof操作符——>计算的是变量(括号可省)/数据类型(括号不可省略)所占 空间大小,单位字节。
#include <stdio.h>
int main()
{
int arr[10]={0};//存放10个数组,每个整型int占用4个字节
printf("%d\n", sizeof arr);//arr为变量()可以省略
return 0;
}
//结果为arr的长度4^10=40
  • ~(对一个数的二进制位取反)

双目操作符

有两个操作对象

三目操作符