C语言学习(1)--安装环境和初识C语言(1)

目录

前言

第一章 使用vscode编程C语言遇到的问题和解决方法

第二章 初识C语言

2.1数据类型

各类型所占内存

2.2变量和常量 

2.2.1变量及其各自作用域

2.2.2常量

2.3字符串、转义字符、注释

2.3.1字符串类型

2.3.2 转义字符

2.3.3 注释

2.4选择语句、循环语句、函数

2.4.1 选择语句

2.4.2 循环语句

2.4.3 函数

第三章 作业练习

补充:二进制B、八进制O、十进制D、十六进制H的互相转化

前言

开发环境:vscode,在vscode中配置C语言,具体操作主要看第一章。

第一章 使用vscode编程C语言遇到的问题和解决方法

vscode配置C语言遇到的问题
问题解决方案
安装vscode+配置C语言环境(27条消息) VSCode配置C语言环境(完整版)_vscode c语言_SchizophreniA6的博客-CSDN博客到安装编译器部分+(26条消息) 【亲测可用】VsCode配置C语言环境_柒月流火赏心头的博客-CSDN博客从文件配置开始到最后。
汉化Ctrl+shift+p打开命令面板——输入display——找到configure language display——选择中文简体
安装vscode速度慢

打开下载列表——复制链接地址——改成下图所示。

vscodeextern关键词用不了

设置Code Runner可以编译多文件。文件——首选项——设置——code runner——选中code-runnerExcutor Map 下面的settings json中编辑”——把该句改成如下形式即可。

"c": "cd $dir && gcc *.c -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

vscode中一使用scanf( )语句就显示code is already running

配置中搜code runner——点击设置图标——选择扩展设置——勾选code-runnerrun in terminal

终端中文乱码(28条消息) 跳坑之路 | 解决VScode“终端输出“乱码问题_vscode运行窗口出来的是乱码_天干物燥。的博客-CSDN博客
Vscode卡顿以管理员身份打开即可。

第二章 初识C语言

首先main()函数是程序的主函数,是整段代码的开端。通常和return 0 搭配使用。如果不写return 0 会报错。这个return可以理解成是回调的意思——如果我需要1值,也可以回调1;需要其他变量的值,也可以直接回调这个变量。

在程序中需要用到打印函数printf()-print function()和输入函数scanf()——因此需要声明自带库函数stadio.h——standard input output标准化的输入输出——声明方式#include<stadio.h>

#include<stdio.h>
int main(){
   int num1=0;
   int num2=0;
   int sum = 0;
   scanf("%d%d",&num1,&num2);//取地址符号&
   sum = num1 + num2;
   printf("%d\n",sum);

return 0;
}

2.1数据类型

数据类型分别有char字符类型/int整型类型/short短整型类型/long长整型/long long更长整型/float浮点型/double双精度浮点型

根据变量类型选择合适的关键词来定义变量。例程如下。

#include<stdio.h> //要用c语言自带的库函数,因此需要写
//stdio——standard input output
// int a = 100;

int main(){  //main主程序——程序的入口
   //char
   char ch; //字符
   ch = 'A';
   printf("%c\n",ch);//%c 打印字符

   //int
   int age; //整型
   age = 20;
   printf("%d\n",age); //%d 打印整形十进制数字

   //short
   short size=50;//短整型 short int
   printf("%d\n",size);

   //long
   long num=100; //长整型 long int
   printf("%d\n",num);

   //float 
   float f=5.0;  //浮点型。小数点后包含6个小数位
   printf("%f\n",f);

   //double
   double d=3.14;
   printf("%lf\n",d);

return 0;

   }


各类型所占内存

计算机内存单位:bit比特(位)/byte字节/Kb/Gb/Mb/Tb/Pb

1byte = 8 bit

1Kb = 1024 byte

1Mb = 1024 Kb ...依次类推

如何看到每个类型占多大内存呢?——sizeof()函数——该函数计算的是变量/类型所占空间的大小,单位是字节

其中sizeof(long)可以是4也可以是8——只要sizeof(long)>=sizeof(int)即可

#include<stdio.h>
int main(){
//计算机单位:bit比特 byte字节 kb mb gb tb pb 
   printf("%d\n",sizeof(char));  //1字节byte=8比特bit
   printf("%d\n",sizeof(short)); // 2字节
   printf("%d\n",sizeof(int));  //4
   printf("%d\n",sizeof(long));//4 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 ;
}

2.2变量和常量 

2.2.1变量及其各自作用域

全局变量——定义且作用在整个程序中的变量,可以被所有函数或对象所使用。作用域是整个程序

局部变量——定义且作用在某一个函数或者对象中的变量——也可以理解为是定义在{}内定义的。作用域就是{}内。——当{}结束,局部变量的生命周期就结束。

外部变量——定义在另一个文件中的变量,在该文件中使用。例如:在sum.c文件中定义g_val,随后在test.c中引用。——需要用到extern关键词

如果全局变量和局部变量的变量名称相同,局部变量优先,所以建议两者变量不要一致。

test.c

int a = 100;

int main(){
int a = 10;
   printf("%d\n",a); //当局部变量和全局变量的名字相同,局部变量优先

extern int g_val;  //extern声明外部符号
   printf("g_val = %d\n",g_val);
    
return 0; 
   
}

sum.c

int g_val =2023;

2.2.2常量

1.定义方式

(1)直接写数字

(2)const——定义常变量——常变量:具有常属性的变量,本质还是变量。

#include<stdio.h>

int main(){
    //1.直接定义-const-常变量-是具有常属性的变量,本质还是变量
    const int num=4;
    printf("%d\n",num);
       
return 0;
}

如果定义数组,直接用法1即可,那就会有同学思考,用法2是否也可以呢?——必然不能!我们可以简单理解arr[常量]。虽然类型是const常变量给num赋值10,但是本质还是变量不是常量,所以这样使用系统会报错。

int main(){
  //法1
   int arr[10]={0};
  //法2 ×
   coust num = 10;
   int arr[num]={0};
 return 0 ;

}

(3)用#define——定义标识符常量——注意:使用时后面不加“ ;”

#define MAX 10
int main(){
   int arr[MAX] = {0};
return 0;
}

(4)枚举常量——enum是关键词 

其中male,female,secret都为枚举常量。分别代表0,1,2

#include<stdio.h>
enum Sex 
    {
        male,
        female,
        secret

    };

int main(){
    enum Sex s = female;
    printf("%d\n",s); //1

    printf("%d\n",male); //0
    printf("%d\n",female);  //1
    printf("%d\n",secret);   //2
    
return 0;
}

2.3字符串、转义字符、注释

2.3.1字符串类型

定义方式用char类型,一个字符就用char 变量名,一个字符串就用 char 数组名[长度]

其中需要注意的是字符串的结束标志是'\0',值为0,不能算是字符串内容。

 char arr2[ ]={'a','b','c'}; 为什么会输出随机值呢?——首先我们没有给数组定义长度,只定义了数组前三位分别是'a','b','c', 那么随后的字符就是随机的,因此只能到出现'\0'的时候才能结束,随即出现随机值。

#include<stdio.h>
#include<string.h>

//字符串类型
int main(){
    char arr1[]="abc"; 
    //"abc"--'a','b','c','\0' 这个'\0'是字符串的结束标志,值为0,不算是字符串内容
    char arr2[]={'a','b','c'};  
    char arr3[]={'a','b','c',0};
    printf("%s\n",arr1);  //abc
    printf("%s\n",arr2);  //abc...
    printf("%s\n",arr3);  //abc
    printf("%d\n",strlen(arr1)); //3
    printf("%d\n",strlen(arr2));//输出随机数
    printf("%d\n",strlen(arr3)); //3
return 0;
}

2.3.2 转义字符

由于脚本环境的编写规则,如果直接以常规方式表达字符可能失效。例如:想要换行,常规来说就是回车就可以了,但是计算机脚本环境中不显示回车,于是就需要使用\n表示回车换行。所以就需要用一个字符来表示这类符号,我们叫做转义字符。

其中需要注意的就是\ddd以及\xhh。\ddd其中ddd表示的是1-3位的八进制数字(0-7)再由加权和的方法求出改八进制所对应的十进制,从而在ASCII码表中找到对应的字符。\xhh中hh表示1-2位的十六进制数(0-9、A-F)之后方法同上。

(如果有同学不懂二进制、八进制、十进制、十六进制的相互转换,可以在目录直接跳转到补充部分)

#include<stdio.h>
int main(){
//转义字符--转变原来的意思
    printf("%d\n",strlen("c:\test\32\test.c"));// \ddd,其中ddd表示1-3个八进制数字
    printf("%s\n","c:\test\32\test.c");
    // '\32'32表示8进制数字--对应十进制为26--26在ASCII码中代表字符->
    printf("%c\n",'\137');
    printf("%c\n",'\x61');  // \xdd--dd表示2个十六进制数

return 0;
}

2.3.3 注释

 单条语句可以直接用//,整段可以ctrl+/ 

2.4选择语句、循环语句、函数

2.4.1 选择语句

 在第一节中主要熟悉一下if选择语句,详细的在随后专题中会讲到。

情景:如果好好学习就会拿到好offer,否则就会去卖红薯。

程序编写:如果if(好好学习)就打印“好offer”,否则else 打印“卖红薯”。——>计算机语言识别的是二进制,所以需要给好好学习赋个值。这里使用的1是好好学习,0是不好好学习,并存在input变量中。

#include <stdio.h>
int main(){
 int input = 0;
      
      printf("你要好好学习吗?(1/0)>:");
      scanf("%d",&input);
      if (input == 1)      
        printf("好offer\n");        
      else 
      printf("卖红薯\n");
return 0;
}

2.4.2 循环语句

while\do...while\for 

情景:如果想当程序员,一个重要的判断指标就是是否能敲够20000条有效代码,假设我们每天敲一条。——>如果我们每天敲一条,看是否到了20000条,如果到了就会拿到好offer,如果没有到,就继续写代码。——>由情景描述可以直到需要用到循环语句和选择语句。

转换成程序语言:首先比较理解的就是if(代码行数line>=20000) 就打印“好offer”——>使用line就要定义line——>只要while(line<=20000),我们就要一直写line++直到20000

#include <stdio.h>
int main(){

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

2.4.3 函数

函数定义规范:函数返回类型 函数名(参数类型 变量名1,参数类型 变量名2,...) 

如果想要计算两个数相加,我们只需要把加法运算封装成一个函数,有需要就调用即可。

#include <stdio.h>

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

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

第三章 作业练习

比较两个数字的大小。

法1:直接比较(直接赋值给变量,进行比较\自主输入值进行比较)。

法2:用函数封装比较算法,创建一个变量来调用函数。

法3:用三目运算符 。(先浅认识一下,随后细说)

#include<stdio.h>

//法1
// int main(){
//     int max,num1,num2;
//     scanf("%d%d",&num1,&num2);
//     if (num1>num2)    
//         max = num1;
//     else max = num2;
//     printf("%d\n",max);
//     return 0 ;
//     }

//法2
int compare(int x,int y){
    int z = 0;
    if (x>y)   z = x;   //return x
    else       z = y;   //return y
    return z;
}
int main(){
    int max = 0,num1,num2;
    scanf("%d%d",&num1,&num2);
    max = compare(num1,num2);
    printf("%d",max);
    return 0 ;
}

//法3
// int main(){
//     int max,num1,num2;
//     scanf("%d%d",&num1,&num2);
//     max = num1>num2? num1:num2; //表达式?结果1:结果2
//     printf("%d\n",max);


//     return 0;
// }

补充:二进制B、八进制O、十进制D、十六进制H的互相转化

参考下面博客 

cd​​​​​​​(8条消息) 计算机基础进制转换(二进制、八进制、十进制、十六进制)_计算机进制_daixiangcn的博客-CSDN博客


  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪睡脑子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值