IE盒子

搜索
查看: 154|回复: 0

考研之C语言零基础学习(一)

[复制链接]

5

主题

12

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2023-1-15 22:15:07 | 显示全部楼层 |阅读模式
一、数据类型,数据输入输出

1.1 数据类型

C语言中数据类型有以下几种类型:
基本类型——整数型(int),浮点数型(float),字符型(char)
构造类型——数组,结构体(strcut)
指针类型*
空类型(void)
常量


  • 常量是指在程序运行过程中,其值不发生变化的量,常量又可分为整型,浮点型,字符型和字符串型。
变量


  • 变量代表内存中具有特定属性的一个存储单元,它用来存放数据,即变量的值。这些值在程序的执行过程中是可以改变的.
  • 变量名实际上以一个名字代表一个对应的存储单元地址。编译、链接程序时,由编译系统为每个变量名分配对应的内存地址(就是空间).从变量中取值实际上是通过变量名找到内存中存储单元的地址,并从该存储单元中读取数据,如左图所示。
  • 变量的命名规定如下:C语言规定标识符只能由字母、数字和下画线三种字符组成,并且第一个字符必须为字母或下画线。
  • 编译系统认为大写字母和小写字母是不同的字符,因此C语言要求对所有用到的变量做强制定义,即“先定义,后使用”。注意,变量名不能与关键字同名!
整型数据


  • 定义一个整数变量是要使用关键字int,int类型占据内存4个字节(一个字节占8位)
浮点数数据


  • 浮点型常量:e代表10的幂次,幂次可正可负。例如:3e-3(3乘以10的负三次方),1e3等
  • 浮点型变量:float定义浮动变量,float占据4个字节
字符型数据


  • 字符型常量
用单引号括起来的一个字符是字符型常量,且只能包含一个字符! 例如, 'a' 'A' '1’是正确的字符型常量,而'abc' ,"a",""是错误的字符型常量. \n表示换行,\b表示退格,\表示反斜杠。
字符型变呈使用关键字char进行定义,一个字符型变量占用1字节大小的空间。一个字符常量存放到一个字符型变量中时,实际上并不是把该字符的字型放到内存中,而是把该字符的ASCII码值放到存储单元中,打印字符型变量时,如果以字符形式打印,那么计算机会到ASCII码表中查找字符型变量的ASCII 码值,查到对应的字符后会显示对应的字符,

  • 字符串型常量
字符串型常量是由一对双引号括起来的字符序列.例如,"How do you do."、“CHINA","a"和"$123.45"是合法的字符串型常量,我们可用语句printf("How do you do.")输出一个字符串.但要注意的是, 'a'是字符型常量,而"a"是字符串型常量,二者是不同的。
例如,如果先用语句char c定义字符型变量c,后令 c="a"或 c="CHINA",那么这样的赋值都是非法的,原因是不可以将字符串型常量赋值给字符型变量.C语言中没有定义字符串型变量的关键字,介绍字符数组时我们将详细讲解如何存放字符串.
C语言规定,在每个字符串型常量的结尾加一个字符串结束标志,以便系统据此判断字符串是否结束。C语言规定以字符'\0'作为字符串结束标志.
例如,字符串型常量"CHINA"在内存中的存储结果占用的内存单元不是5个字符,而是6个字符,即大小为6字节,最后一个字符为'\0'、然而,在输出时不输出'\0',因为"\0'无法显示.
1.2 printf讲解

混合运算


  • 类型强制转换
整数型进行除法运算,如果运算结果是小数,那么存储浮点数时要进行强制类型转换。如果不是小数运算,运算结果仍和原来一样
int j=5;
float k = (float)j /2;
printf("%f\n",f);
printf("%f\n",k);
复制代码printf函数介绍

printf函数可以输出各种类型的数据,实际原理是printf函数将这些类型的数据格式化为字符串后,放入标准输出缓冲区。
%s代表该位置插入一个字符串,%d代表该位置插入一个整型
printf("hello %s,I love %d\n","zhaoyang",12);

   printf("student number = %3d,score = %5.2f\n",10,97.87);
   printf("student number = %3d,score = %5.2f\n",101,97.1);
复制代码%3d 代表该整数占据3个位置,%5.2f5代表位数一共有5位,2代表小数点为有两位



img

printf函数的所有输出都是右对齐的,除非在%符号后放置了负号
1.3 scanf读取标准输入

scanf函数的原理

C语言未提供输入/输出关键字,其输入和输出是通过标准函数库来实现的.C语言通过scanf 函数读取键盘输入,键盘输入又被称为标准输入,当scanf函数读取标准输入时,如果还没有输入任何内容,那么scanf函数会被卡住〔专业用语为阻塞)
int main(){
    int i;
    char c;
    scanf("%d",&i);
    printf("%d\n",i);
    //fflush(stdin);//清空标准输入缓冲区
    scanf("%c",&c);
    printf("%c\n",c);
}
复制代码得到的输出结果为下图:



img

如上面的例子所示,我们向标准输入缓冲区中放入的字符为"20\n',输入"\n'(回车)后, scanf函数才开始匹配,scanf 函数中的%d 匹配整型数20,然后放入变量i中、接着进行打印输出,这时'\n'仍然在标准输入缓冲区(stdin)内。在执行scanf(%c",&c)语句时,标准输入缓冲区是有换行符'\n',字符c是可以匹配换行符,导致无法读取输入的字符,而读取的是换行符'\n'
scanf 函数每匹配一个字符时,会在缓冲区删除对应的字符.
scanf 函数在读取整型数、浮点数、字符串(后面介绍数组时讲解字符串)时,会忽略'\n'(回车符)、空格符等字符〈忽略是指scanf函数执行时会首先删除这些字符.然后再阻塞)
多种数据类型混合输入

当我们让scanf函数一次读取多种类型的数据时,对于字符型数据要格外小心,因为当一行数据中存在字符型数据读取时,读取的字符并不会忽略空格和'\n'(回车符)。
所以使用方法如下例所示.编写代码时,我们需要在%d与%c之间加入一个空格.输入格式和输出效果如下图所示,scanf 函数匹配成功了4个成员.所以返回值ret为4.我们可以通过返回值来判断scanf函数匹配成功了几个成员,中间任何有一个成员匹配出错,后面的成员都会匹配出错.
int q,ret;
char w;
float r;
ret = scanf("%d %c%f",&q,&w,&r);
printf("q=%d,w=%c,r=%5.2f\n",q,w,r);
复制代码输出结果:



img

二、运算符与表达式

2.1 关系运算符与关系表达式

关系运算符有>、<、==、>=、<=、!=这几种。由关系运算符组成的表达式称为关系表达式。关系表达式的值只有真和假,对应的值为1和0。由于C语言中没有布尔类型,所以在C语言中0值代表假,非0值即为真。例如,关系表达式3>4为假,因此整体值为0,而关系表达式5>2为真,因此整体值为1、关系运算符的优先级低于算术运算符
int i;
    while (scanf("%d",&i)){
        if(i > 3 && i < 10){
            printf("i is between 3 and 10\n");
        } else{
            printf("i is not between 3 and 10\n");
        }
    }
复制代码
如果要判断变量i是否大于3且同时小于10,那么不能写为3<a<10,这种写法在数学上的确是正确的,但是在程序中是错误的。首先,无论a是大于3还是小于3,对于3<a这个表达式只有1或0两种结果。由于1和0都是小于10的,所以无论i的值为多少,这个表达式的值始终为真,因此在判断变量a是否大于3且同时小于10时,要写成a>3 && a<10.
逻辑运算符,求字节运算符sizeof


  • 逻辑非的优先级高于算术运算符,逻辑与和逻辑或的优先级低于关系运算符
【例】逻辑运算符的使用-计算闰年
int year;
int i;
int j = 1;
while (scanf("%d",&year)){
    if(year%4 == 0 && year%100 != 0 || year%400 == 0){
        printf("%d is leap year\n",year);
    } else{
        printf("%d is not leap year\n",year);
    }
}
i = !! j;
printf("i value = %d\n",i);
复制代码

  • 短路运算
逻辑与短路运算是当前面一个表达式为假时,后面的表达式不会得到执行,逻辑或短路运算是当前面一个表达式为真时,后面的表达式不会得到执行.
【例】短路运算
int a = 0;
    a && printf("you can't see me!\n");
    a = 1;
    a || printf("you can't see me!\n");
复制代码

  • 求字节运算符sizeof
很多人会认为sizeof是一个函数,这种理解是错误的,实际sizeof是一个运算符,不像其他运算符是一个符号,sizeof是字母组成的,用于求常量或变量所占用的空间大小,请看下例;
int i = 0;
    printf("i size is %d\n", sizeof(i));
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表