栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言初级阶段学习2】【变量与常量】int,float,char学习,以及字符常量和ASCII码的关系,以及解决vscode运行c程序中文乱码的问题,结尾有一个判断平年还是闰年的练习[考研专用]

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言初级阶段学习2】【变量与常量】int,float,char学习,以及字符常量和ASCII码的关系,以及解决vscode运行c程序中文乱码的问题,结尾有一个判断平年还是闰年的练习[考研专用]

C语言数据类型
  • 前言
  • 一、新建此次学习的文件夹
  • 二、int(整型)
  • 二、scanf
  • 三、进制与存储
  • 四、float(浮点型)
  • 五、char(字符型)
  • 六、练习(判断输入年份是不是闰年)
      • 答案


前言

本篇文章主要帮助理解C语言基本的数据类型,int整型,float浮点型,char字符型
还有ASCII码在c语言的作用
以及解决中文乱码问题
结尾有一个练习,判断平年还是闰年


以下是本篇文章正文内容

一、新建此次学习的文件夹

上回文章链接:https://blog.csdn.net/o_0ava0_o/article/details/124740167

续接上回,我们搞好了vscode运行c语言的相关配置,接下来我们正式开始C语言学习

1.用vscode打开我们先前新建的文件夹

2.在根目录下 新建文件夹,我这里命名为 2.constantAndVariable(变量与常量)

不要中文命名,否则编译的时候会报错

二、int(整型)

1.在2.constantAndVariable文件夹中新建1-int.c文件

2.还记得我们上次创建的C语言的用户代码吗,这里就可以用了

关于代码片段快捷键的修改,其实上次的配置里的注释已经透露了,这里再说一下


至于怎么进入这个代码片段,如果你做过上次代码片段的配置,这个不难(不记得可以回去看哦,链接在上面)

3.成功生成模板

4.核心内容

// QAQshfit专用模板
#include 
#include 





#define PI 3.14   //定义常量

int main()
{

  int a,b=4;  //两种定义形式  1.定义整型变量a     2.定义整型变量b,同时给b赋值4(定义+赋值)

  a = 5;  //赋值5给变量a

  a=a*PI; //把a和PI运算的值 赋值给 a

  printf("a=%d,b=%dn", a,b);  // 打印出变量a和变量b的值
  


  system("pause");		//上次的注释里面解释了这个
}

5.输入以上内容,按键盘上的F5运行

请根据注释进行学习,同时对程序进行修改,来验证自己的猜想
此后一些基本的操作,我就不会截图了

二、scanf

1.在2.constantAndVariable文件夹中新建2-scanf.c文件

2.在scanf.c文件中输入以下内容

#include 	//输入输出头文件
#include 

//从屏幕输入:scanf   从屏幕输出:prinf  都需要引入io(i:input  o:output)头文件



int main()
{
  int a,b;
  printf("请输入a和b的内容n");
  scanf("%dn%d", &a,&b);    //&a:取a的地址   b同理
  printf("输入的a为%d,b为%dn", a,b);
  printf("a,b的和%dn", a+b);
  system("pause");
}

3.按键盘上的F5运行

然后你就会惊喜的发现,咋乱码了

4.中文出现乱码的问题

中文出现乱码和vscode的编码方式有关
默认情况是utf-8编码,不兼容一些汉字
我们要把编码改成中文的编码方式,如gb2312
中文编码的兼容性:gb18030>gbk>gb2312
gb18030兼容性最强,换句话来说就是,你gbk能用的字符我能用,gbk不能用的我也能用(先斩后奏,皇权特许,串味了~)
此次为临时更换编码方式,而不是永久,所以在写c语言的时候尽量不使用中文



然后你又会发现,我源文件咋还乱码了

因为先前的中文是基于utf-8的编码写的,当编码转换时,原先的中文字符就会变成乱码
这里建议把我先前的再复制一遍,如果你无聊的话,倒可以把中文重新输入一遍

重新复制并保存


运行试试(老规矩,按F5)


ok 成功了

5.命令行输入 1 2

	scanf匹配到空格就会结束读取,因此a匹配的是1,b匹配的是2
	后面会有更多关于scanf的知识

前面说了,这是临时性的,等你关闭文件以后,再打开又会变成utf-8的编码,你需要再进行一遍上述操作
这里不建议全局改变编码格式
不过如果你想试试,接下来就告诉你方法

三、进制与存储
  知识点:
    进制
      2进制:0 1
      8进制:0 1 2 3 4 5 6 8
      16进制: 0 1 2 3 4 5 6 7 8 9 a b c d e f
      10进制:0 1 2 3 4 5 6 7 8 9

      
      0x7b  0x开头代表该数是16进制  即16进制的7b,换算成10进制为123     7*16 + b(11)
      0173  0开头代表该数是8进制  即8进制的173,换算成十进制为123       8^2 + 7*8 + 3
    

    %d  
      以10进制的方式输出整型数

    c程序一般32位,一个数据的取值有2^32个,即每个数据用8个16进制存储    如:cc cc cc cc

    磁盘 1G=1000 000 000 字节   即比实际1GB(2^30字节)要小

    32位编址  寻址空间 从 0x00 00 00 00 到 0xFF FF FF FF 即  16^8=2^(4*8)=2^32=4*2^(20) = 4GB

    int在32位程序中
      占4个字节(1个字节八位) ,所以int占32位
      可取值有 2^(8*4)-1 个  
      取值范围为(-2^(31) ~ 2^(31)-1 )  

1.在2.constantAndVariable文件夹中新建3-system.c文件

2.在3-system.c文件中输入以下内容

#include 
#include 


int main()
{
  int a,b,c;
  a=0x7b; //16进制
  b=0173; //8进制
  c=123; //10进制
  
  printf("a=%d,b=%d,c=%dn", a,b,c);
  system("pause");
}

3.运行的结果

四、float(浮点型)
  知识点:
  
    %f  
      以10进制的方式输出小数

    e表示10的次幂   例:e3=10^3     e-3=10^(-3)

    e的前面一定要有数字 且e的后面一定要是整数 

    float占用4个字节的空间(和int一样)  
      可取值有 2^(8*4)个
      取值范围(大约)  3.4E–38 和 3.4E+38之间

1.在2.constantAndVariable文件夹中新建4-float.c文件

2.在4-float.c文件中输入以下内容

#include 
#include 


int main()
{
  float f=1.234;
  float f2=234e-3;
  
  printf("f=%fn", f);
  printf("f2=%fn", f2);
  system("pause");
}

3.运行的结果

五、char(字符型)
  知识点:
  
   字符需要用单引号包裹,且只能有一个字符  如: 'a' 'b'      而以下是错误形式:'ab'   "a"   ""

    转义字符:  
      n 换行   b  退格  \反斜杠


    一个char(字符型)变量占用一个字节      
      可取值有  2^8 即 256个
      值范围为   0-255(2^4 * 2^4 = 16*16 = 256)
      每个数据用两个16进制存储 即  16^2=256

    字符在内存中代表的是其ASCII码的值 如 'a'  在内存中显示为  61  

    ASCII  
      10进制:0为48    A为65(26个字母可推其他字母)    a为97(26个字母可推其他字母)
      16进制:0为30    A为41     a为61
      8进制: 0为60    A为101     a为141

    %c  
      以10进制的方式输出字符

1.在2.constantAndVariable文件夹中新建5-char.c文件

2.在5-char.c文件中输入以下内容

这里用到了中文,记得把编码改为中文编码

int main()
{
  char c='a';
  printf("c的值(以字符形式输出)为:%cn", c);
  printf("c的值(整数形式输出)为:%dn", c);
  printf("ASCII的97(10进制)值(以字符形式输出)为:%cn", 97);
  printf("ASCII的61(16进制)值(以字符形式输出)为:%cn", 0x61);
  printf("ASCII的141(8进制)值(以字符形式输出)为:%cn", 0141);
  system("pause");
}

3.运行的结果

六、练习(判断输入年份是不是闰年)
	
  程序要求:
    判断某个年份是不是闰年,如果是闰年,输出"yes",否则输出"no"

    提示(闰年的判定) 
     1.可以被100整除且被400整除(能被400整除的一点能被100整除)
     2.不能被100整除但能被4整除
	
	该程序需要用到 %(除余符号)
	例1:4%2	4可以被2整除,所以余数为0,即	4%2==2
	例2: 5%2	 5不能被2整除,余数为1,即	5%2==1
	
	需要运用if语句
	if ([条件])
	{
	 	[执行代码]
	}
	
	或者运用逻辑运算符更加简单
		逻辑运算符包括	 &&(与)  ||(或)  !(非)
		此次只需要 && 和 ||
		

可以在2.constantAndVariable文件夹下面新建一个c文件来做这个作业
下面是答案,希望读者可以先自己做练习后再来看

答案

由于用到了中文,需要换成中文编码。
如果不想换编码,可以把下面中文的部分修改

#include 
#include 

int main()
{
  int year;
  printf("请输入年份来判断是不是闰年:n");
  scanf("%d",&year);
  //普通逻辑版
  // if (year%100!=0)
  // {
  //   printf("不是整百年n");
  //   if(year%4==0){
  //     printf("yes,闰年n");
  //   }else{
  //     printf("no,平年n");
  //   }
  // }else if(year%100==0){
  //   printf("是整百年n");
  //   if(year%400==0){
  //     printf("yes,闰年n");
  //   }else{
  //     printf("no,平年n");
  //   }
  // }

  //简化版    
  if(year%400==0 || year%4==0&&year%100!=0){  //逻辑与的优先级>逻辑或的优先级
    printf("yes,闰年n");
  }else{
     printf("no,平年n");
  }
  
  system("pause");
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号