鹏哥C语言入门——初识C语言(1)

奋斗吧
奋斗吧
擅长邻域:未填写

标签: 鹏哥C语言入门——初识C语言(1) 博客 51CTO博客

2023-06-14 18:24:23 157浏览

鹏哥C语言入门——初识C语言(1),1、第一个C语言程序Tips:MicrosoftVisualStudio:Ctrl+Fn+F5运行、Fn+F10调试,再按F10下一步;主函数——程序的入口,main函数有且仅有一个;intmain()//int整形,main前面的int表示函数调用返回一个整形值{printf("HelloWorld!\n");//这里完成任务return0;

1、第一个C语言程序

Tips:Microsoft Visual Studio:Ctrl+Fn+F5运行、Fn+F10调试,再按F10下一步;

主函数——程序的入口,main函数有且仅有一个;

int main()   //int 整形,main前面的int表示函数调用返回一个整形值
{ 
     printf("Hello World!\n");  //这里完成任务
     return 0;                //返回0
}

库函数——C语言提供给我们的函数;

#include<stdio.h>   //包含一个叫stdio.h的文件

2、数据类型


char

字符数据类型

short

短整型

int

整形

long

长整型

long long

更长的整形

float

单精度浮点数

double

双精度浮点数

%c——打印字符格式的数据

%d——打印整型的数据

%f——打印浮点型数字(打小数)

%p——以地址的形式打印

%x——打印16进制数字

每种类型所创建空间的大小:

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

同一类型的有符号、无符号数的字节大小是一样的;

bite

比特位1、0, 计算机中最小的单位

byte

字节 1byte=8bit

kb

2^{10}byte=1024byte

gb

2^{20}byte

tb

2^{30}byte

pb

2^{40}byte

3、常量、变量

生活中有些值是不变的(性别),有些值是可变的(年龄);不变的值用常量的概念来表示,变的值在C语言中用变量表示。

3.1 变量

3.1.1 定义变量的方法

short age = 20;        //向内存申请2个字节=16bit位,用来存放20
float weight = 95.6f;  //向内存申请4个字节,存放小数

3.1.2变量分类

局部变量——定义在代码块({})内部的变量;

全局变量——定义在代码块({})之外的变量;

鹏哥C语言入门——初识C语言(1)_#C语言


当局部变量和全局变量的名字相同时,局部变量优先;

3.1.3变量的使用

C语言语法规定,变量要定义在当前代码块的最前面(cpp无此规定);

鹏哥C语言入门——初识C语言(1)_#C语言_02

鹏哥C语言入门——初识C语言(1)_#C语言_03

3.1.4 变量的作用域和生命周期

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

①局部变量的作用域是变量所在的局部范围;

②全局变量的作用域是整个工程;


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

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

②全局变量的生命周期是:整个程序的生命周期;

回顾

#define _CRT_SECURE_NO_WARNINGS 1  //忽略掉scanf具有不安全性的警告
int main()
{
  int num1=0;
  int num2=0;
  int sum=0;
  scanf("%d%d",&num1,&num2);  //strcpy、strlen、strcat等都是不安全的
  
  sum = mum1+num2;
  printf("sum=%d\n",sum);
  return 0;
}

Tips: scanf是C语言提供的,scanf_s不是标准C语言提供的,而是VS编译器提供的;scanf_s在别的编译器中不能被识别,尽量不要使用scanf_s,失去了代码的跨平台性和可移植性;

#define _CRT_SECURE_NO_WARNINGS 1  加在源文件的第一行;

鹏哥C语言入门——初识C语言(1)_#C语言_04

用记事本方式打开,写入 #define _CRT_SECURE_NO_WARNINGS 1然后保存。

3.2常量

C语言中常量和变量的定义形式有所差异。

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

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量

3.2.1const修饰的常变量

int main()
{
  int num = 4; //num为变量
  3;           //3是字母常量
  
  //const——常属性,num1为const修饰的常变量,num1的值不可更改
  const int num1 = 8;  //num1的本质还是一个变量,只是具有常属性;类比美籍华人
  return 0;
}

例如,

int n = 10;
int arr[n]={0};   
//报错,error C2057:应输入常量表达式; error:不能分配常量大小为0的数组

n前加const修饰,修改后依然报错;

因为n是变量,但是又有常属性,所以说n是常变量;

const int n = 10;
int arr[n]={0};   
//报错,error C2057:应输入常量表达式; error:不能分配常量大小为0的数组

3.2.2 #define定义的标识符常量

#include<stdio.h>
#define MAX 10
int main()
{
  int arr[MAX] = {0};
  return 0;
}

3.2.3 枚举常量

枚举:一一列举

枚举关键字:enum

例如  性别:男、女; 三原色:红、黄、蓝

enum Sex   //性别枚举
{
  MALE,    //男
  FEMALE,  //女
  SECRET   //保密
}; 
//MALE、FEMALE、SECRET为枚举常量
int main()
{
  enum Sex s = FEMALE; 
  s = SECRET;             //s可更改 
  printf("%d\n",MALE);   //0
  printf("%d\n",FEMALE); //1
  printf("%d\n",SECRET); //2
  
  return 0;
}

输出结果为 0  1  2

枚举常量不能修改,如MALE = 2; 但是s可以更改;

4、字符串+转义字符+注释

4.1字符串

“hello bit.\n”   、   “”  //空字符串

1、这种由双引号引起来的一串字符称为字符串。

2、字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串内容。

#include<stdio.h>

int main()
{
  char arr1[] = "abc";            //数组
  char arr2[] = {'a','b','c'};    
  printf("%s\n",arr1);            //打印输出显示   abc
  printf("%s\n",arr2);            //打印输出显示   abc烫烫烫烫蕴bc
  return 0;
}

鹏哥C语言入门——初识C语言(1)_#C语言_05

Tips:调试——>窗口——>监视——>选择一个如监视1(1)——>鹏哥C语言入门——初识C语言(1)_#C语言_06

为什么会出现这种现象?

"abc"——'a' 'b' 'c' '\0' ——'\0'是字符串的结束标志

第二种写法在打印c后没有字符串的结束标志,继续打印一些随机值;

区分'\0'  0   '0'  EOF:

'\0':是一个转义字符,ASCll码值为0;

0:数字0;

'0':字符0,ASCll码值为48;

EOF:end of file ,文件结束标志,值为-1;

如何更改?

主动增加结束标志,打印完abc后结束;

char arr2[] = {'a','b','c',0};

ASCll表

十进制

字符

0


48

0

57

9

65

A

90

Z

97

a

122

z

#include<stdio.h>

int main()
{
  char arr1[] = "abc";            
  char arr2[] = {'a','b','c'};    
  //strlen——计算字符串长度
  printf("%d\n",strlen(arr1));            //打印输出显示   3
  printf("%d\n",strlen(arr2));            //打印输出显示   15(随机值)
  return 0;
}

为什么是这个结果?

arr1内容: a b c \0;strlen遇到\0结束,计算字符串长度并没有把\0算在内。

arr2内容:a b c XXXXXXX  \0 XXXX;strlen一个个往后数直到遇到\0,因此输出的值是一个随机数。

4.2转义字符

转义字符,转变原来的意思;

#include<stdio.h>

int main()
{
  printf("abcn");      //打印输出显示   abcn
  printf("abc\n");     //打印输出显示   abc
  return 0;
}

转义字符

释义

\?

在书写连续多个问好时使用,防止他们被解析成三字母词

\'

用于表示字符常量'

\"

用于表示一个字符串内部的双引号

\\

用于表示一个反斜杠,防止它被解释为一个转义序列数

\a

警告字符,蜂鸣

\b

退格符

\f

进格符

\n

换行

\r

回车

\t

水平制表符

\v

垂直制表符

\ddd

ddd表示1~3个八进制的数字,如\130 

\xdd

dd表示2个十六进制数字。如:\x30 

4.2.1例子 \?

#include<stdio.h>
int main()
{
  printf("(are you ok\?\?)\n");      //打印输出显示   (are you ok??)
  return 0;
}

4.2.2例子 \\  \'  \"

#include<stdio.h>
int main()
{
  printf("%c\n",'\'');               //打印输出显示   '
  printf("%s\n","\"abc\"");          //打印输出显示   "abc"
  printf("c:\\test\\32\\test.c");    //打印输出显示   c:\test\32\test.c
  return 0;
}

思考例题

#include<stdio.h>
#include<string.h>
int main()
{
  printf("%d\n",strlen("c:\test\32\test.c"));    //打印输出显示   13
  return 0;
}

原因:\t 和 \32看作一个转义字符; 

\32——32是2个8进制数字;

32八进制数字——>转为十进制数字26——>26作为ASCll码值对应的字符。

4.2.3例子 \ddd \xdd

printf("%c\n",'\132');    //打印输出显示   Z

\132——>132是八进制数字——>转为十进制数字90——>90作为ASCll码值对应的字符为Z。

printf("%c\n",'\x61');    //打印输出显示   a

\x61——>61是十六进制数字——>转为十进制数字97——>97作为ASCll码值对应的字符为a。

4.3注释

1、不需要的代码可以直接删除或注释;

2、有些代码难懂,可以加注释文字;

3、注释有两种风格:

     C语言风格的注释  /* xxxxxxx  */,缺陷是不能嵌套注释;

     C++风格的注释   // xxxxxxxxx,可以注释一行或多行;(快捷键ctrl+k+c注释,crtl+k+u取消注释)

5、选择语句

int main()
{
  int input = 0;
  printf("你有offer吗?(0/1)>: ");
  scanf("%d",&input);
  
  if(input == 1)
    printf("是的\n");
  else
    printf("没有\n");
  return 0;
}

6、循环语句

int main()
{
  int line = 0; 
  while(line<20000)
  {
    printf("敲一行代码:%d\n",line);
    line++;
  }
  if(line>=20000)
  {
    printf("收到offer\n"); 
  }
  return 0;
}

7、函数

#include <stdio.h>

int Add(int x,int y)
{
  int z = x+y;
  return z;
}

int main()
{
  int a=10;
  int b=20;
  int sum=0;
  sum=Add(a,b);
  printf("sum=%d\n",sum); 
  return 0; 
}

函数包括自定义函数、库函数。

8、数组

要存储1-10的数字,如何存储?

C语言中给出了数组的定义:一组相同类型元素的集合。

8.1数组定义

#include <stdio.h>
int main()
{
  int arr[10] = {1,2,3,4,5,6,7,8,9,10};  //定义一个存放10个整数数字的数组
  printf("%d\n",arr[4]);      //打印    5
  
  int i = 0;
  while(i<10)
  {
    printf("%d ",arr[i]);    //打印数组所有内容  1 2 3 4 5 6 7 8 9 10
    i++;
  }
  
  return 0; 
}

9、操作符

算术操作符

 +   -    *    /    %

移位操作符

>>  <<

位操作符

&   ^     |

赋值操作符

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

单目操作符

见下

单目操作符

逻辑反操作

-

负值

+

正值

&

取地址

sizeof

操作数的类型长度(以字节为单位)

~

对一个数的二进制按位取反

--

前置、后置--

++

前置、后置++

*

间接访问操作符(解引用操作符)

(类型)

强制类型转换

关系操作符

 >   >=    <    <=    !=(用于测试不等) ==(用于测试相等)   

逻辑操作符

&&  逻辑与     || 逻辑或

条件操作符

exp1 ?  exp2 :  exp3 (表达式1的结果为真,执行表达式2的结果)

逗号表达式

exp1,exp2,exp3,  ...expN

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

[]   ()   .    ->

 9.1移位操作符

//移(2进制)位操作符
// <<左移
// >>右移
int a = 1;     //整型1占4个字节=32bit 00000000000000000000000000000001
int b = a<<1;  //左移后为: 000000000000000000000000000000010,转化为十进制为2。
printf("a=%d\n",a);  //打印  1  (a左移后保持不变,类似 b=a+1,a的值不变)
printf("b=%d\n",b);  //打印  2

 9.2位操作符

//移(2进制)位操作符
// & 按位与
// | 按位或
// ^ 按位异或
int a = 3;      //011
int b = 5;      //101
int c = a&b;    //001, 即1
int d = a|b;    //111, 即7
int e = a^b;    //异或计算规律为相同为0,相异为1;
                //110, 即6

9.3单目操作符

9.3.1逻辑反操作!

int main()
{
  int a = 10;
  //c语言中表示真假,0为假,非0为真
  printf("%d\n",a);   //打印10
  printf("%d\n",!a);  //打印0
  
  int a = 0;
  printf("%d\n",a);   //打印0
  printf("%d\n",!a);  //打印1
  
  return 0;
}

9.3.2操作数类型长度sizeof

int arr[10]={0};
int sz = 0;

//计算数组大小,单位是字节
printf("%d\n",sizeof(arr));  //打印40
//计算数组的元素个数
//个数=数组总大小/每个元素的大小
sz = sizeof(arr)/sizeof(arr[0]);
printf("sz = %d\n",sz);     //打印10

9.3.3按位取反~

#include<stdio.h>
int main()
{
  int a=0;          //00000000000000000000000000000000
  int b=~a;         //11111111111111111111111111111111
  printf("%d\n",b); //-1  使用、打印的是原码
  return 0;
}

原码、反码、补码

负数在内存中存储的时候,存储的是二进制的补码;

11111111111111111111111111111111是补码,需要转换成原码打印使用;

10000000000000000000000000000001是原码,值-1。

9.3.4前置、后置-- ++

#include<stdio.h>
int main()
{
  int a = 10;
  int b =a++;                //后置++,先使用,再++
  printf("a=%d,b=%d\n",a,b); //a=11,b=10
  
  int b =++a;                //前置++,先++,再使用
  printf("a=%d,b=%d\n",a,b); //a=12,b=11
  return 0;
}

9.3.5强制类型转换(类型)

#include<stdio.h>
int main()
{
  int a = (int)3.14;   //double转换为int类型
  return 0;
}

9.4条件操作符

#include<stdio.h>
int main()
{
   int a = 10;
   int b = 20;
   int max = 0;
   
   //表达式a>b为真,a执行,赋值给max;否则b执行,赋值给max
   max = (a>b? a : b);
   return 0;
}


好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695