C语言基础1

基础

程序结构

#include<stdio.h>   //包含头文件
int main()
{
    /* 
    代码块
    */
    return 0;
}

主函数

一个程序只有一个主函数,main()函数

主函数是C语言中唯一的入口,从主函数 开始执行

每句结束,一个分号;

return是返回值,根据函数类型的不同,返回值的类型也就不同

注释

// 单行注释
多行注释  /*注释内容*/

标识符

标识符是由字母、数字、下划线组成的字符串,并且首字符必须是字母或下划线;

注意:标识符最好不要超过8位;

        严格区分大小写;

        见名知意;

        不要使用中文;

        不能是关键字;

关键字

关键字即保留字,是指在高级语言中,那些已经定义过的标识符。

C语言中共有32个关键字,

数据类型关键字(12个)

char  double   enum   float    int   short   long   signed   struct     union    unsigned    void

控制语句关键字(12个)

break   case  continue  default   do  else  for   goto    if   return   switch   while

存储类型关键字(4个)

auto   extern   register  static

其他关键字(4个)

const   sizeof    typedef    volatile

变量

变量就是变化的量,每一个变量都有一个名字(标识符)。变量占有内存中一定的存储单元。使用变量必须先定义。

定义变量的一般形式:   数据类型   变量名

多个相同类型的变量: 数据类型  变量名1,变量名2, .... 

变量的赋值:

        先申明在赋值;

        申明的同时赋值; 

数据类型

数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类;

基本数据类型:整型、字符型、浮点型(单精度、双精度);

构造数据类型:枚举类型、数组类型、结构体类型、共用体类型;

指针类型;

空类型;

基本数据类型
数据类型说明字节应用示例
char字符型1用于存储单个字符char sex = 'M'
int整型2用于存储整数int height = 18
float单精度浮点型

4

用于存储小数float price = 11.1
double双精度浮点型8用于存储位数更多的小数double pi = 3.1415926

整型又有不同种类

数据类型说明字节取值范围
int整型2(-32768~32767)
short int短整型(int可以省略)2(-32768~32767)
long int长整型(int可以省略)4(-2147483648~2147483647)
unsigned int无符号整型2(0~65535)
unsigned short int无符号短整型(int可以省略)2(0~65535)
unsigned long int无符号长整型(int可以省略)4(0~4294967295)

    

注意:

  • int   、 short int    、   long int是根据编译环境的不同,所取范围不同
  • 而其中short int和long int至少是表中所写范围, 但是int在表中是以16位编译环境写的取值范围。
  • 另外 c语言int的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。
  • ANSI标准定义int是占2个字节,TC是按ANSI标准的,它的int是占2个字节的。但是在VC里,一个int是占4个字节的。

浮点型根据精度不同又分为3种

数据类型说明字节取值范围
float单精度4-3.4*10^-38~3.4*10^38
double双精度8-1.7*10^-308~1.7*10^308
long double长双精度16-1.2*10^-4932~1.7*10^4932

格式化输出语句

格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。

其格式为:printf("输出格式符",输出项);

格式符说明举例
%d带符号十进制整数int a=10;printf("%d",a);输出结果为10
%c单个字符char x='a';printf("%c",x);输出结果为a
%s字符串printf("%s","慕课网");输出结果为慕课网
%f6位小数float a=1.23;printf("%f",a);输出结果为1.230000

注意:格式符的个数要与变量、常量或者表达式的个数一一对应

常量

在程序执行过程中,值不发生改变的量称为常量。

mtianyan: C语言的常量可以分为直接常量和符号常量。

直接常量也称为字面量,是可以直接拿来使用,无需说明的量,比如:

  • 整型常量:13、0、-13;
  • 实型常量:13.33、-24.4;
  • 字符常量:‘a’、‘M’
  • 字符串常量:”I love imooc!”

可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为

#define  标识符  常量值

#include<stdio.h>
#define POCKETMONEY 10  //定义常量及常量值
int main()
{
    printf("%d\n",POCKETMONEY);
    return 0;
}

符号常量不可以被改变。

表达式

一个表达式是一系列运算符和算子的组合

运算符:是指进行运算的动作;算子:指参与运算的值,可能是变量,也可能是常量,还可能是一个方法的返回值;

如  a=b+5;  a,b,5是算子,,   =,+是运算符;

自动类型转换

数据类型存在自动转换的情况;

自动转换发生在不同数据类型运算时,在编译的时候自动完成。

char类型转换为int类型数据遵循ASCII码中的对应值。

注意:字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换

           char可以转换为int,int可以转换为double,char可以转换为double。但不可以反向

强制类型转换

强制类型转换是通过定义类型转换运算来 实现的。其一般形式为:

(数据类型)(表达式)

其作用是把表达式的运算结果强制转换成类型说明符所表示的类型

在使用强制转换时应注意以下问题:

  • 数据类型和表达式都必须加括号, 如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。
  • 转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。
  • 强制转换后的运算结果不遵循四舍五入原则。

运算符号

1.算术运算符

名称运算符号举例
加法运算符+2+10=12
减法运算符-13-3=10
乘法运算符*2*10=20
乘法运算符/30/10=3
求余运算符(模运算符)%23%7=2

2.自增与自减运算符

  • 自增运算符为++,其功能是使变量的值自增1
  • 自减运算符为--,其功能是使变量值自减1。

它们经常使用在循环中。自增自减运算符有以下几种形式:

自增自减

3.赋值运算符

C语言中赋值运算符分为简单赋值运算符复合赋值运算符

简单赋值运算符=号了,下面讲一下复合赋值运算符:

复合赋值运算符就是在简单赋值符=之前加上其它运算符构成.

=

a=5  把5赋值给变量a

+=a+=5  相当于 a=a+5   把a+5赋值给a   还有-=   *=   /=     %=    同+=一样处理
a+=b+c相当于a=a+(b+c)      赋值运算符右边看做一个整体进行计算赋值

注意:复合运算符中运算符和等号之间是不存在空格的。

4.关系运算符

C语言中的关系运算符:

关系运算符

关系表达式的值是,在C程序用整数10表示。

注意:>=, <=, ==, !=这种符号之间不能存在空格

5.逻辑运算符

C语言中的逻辑运算符:

逻辑运算符

6.三目运算符

C语言中的三目运算符:?:,其格式为:

表达式1 ? 表达式2 : 表达式3; 
执行过程是:

先判断表达式1的值是否为真,如果是真的话执行表达式2;如果是假的话执行表达式3。

位运算符

位运算以二进制为单位进行运算的。位运算符分为位逻辑运算符、位移位运算符和位自反赋值运算符。运算对象只能是int、short、unsigned、long、char数据类型。

位逻辑运算符

运算符名称举例说明
~按位非~a      将a按位取反
&按位与a&b    将a和b按位相与
|按位或a|b     将a和b按位相或
^按位异或a^b    将a和b按位相异或

位运算是对二进制数按位进行运算,操作对象是一个二进制位集合。

a=10,b=15

二进制表示 a:00001010    b:00001111

A.按位非(~)单目运算符,自右向左;按位取反

~0 = 1,~1=0

~a = -11

计算过程:~00001010 = 11110101  最高位为1,该数为负整数;所以11110101是补码,它的反码是补码-1:11110100;原码是除符号位外按位取反:10001011 ,转为十进制为10。

B.按位与(&)双目   ,自左向右。只有对应位都是1时取1.

        00001010

&      00001111

        00001010

C.按位或(|)双目    , 自左向右。只要对应位有1,就取1

        00001010

|       00001111

        00001111

D.按位异或(^)双目 , 自左向右。只要对应位上的数不相同就取1

        00001010

^      00001111

        00000101

注意:数据在计算机中是以二进制的补码形式进行存储的。对于一个正数,它的原码就是将其转换为二进制,反码和补码与原码相同。对于一个负数,原码是将该数按照绝对值大小转换的二进制数,最高位是符号位为1(1表示负数,0表示正数),反码是除符号位外二进制数按位取反,所得新二进制数为原二进制数的反码,补码将其二进制数的反码+1。

        位逻辑运算符的优先级(由高到低):~ & ^ |

移位运算符

移位运算时将数据看成二进制数,对其进行向左或向右移动若干位的运算。

运算符名称举例说明
<<左移运算符a<<b  将a向左移b位
>>右移运算符a>>b  将a向右移b位

在运算符左边的数是要移动的数,右边的数是指定移动的位数

<<  左移运算符,移动规则:将二进制数向左移动若干位,左边移走的高位被丢弃,右边空缺的低位补0(高位缺失,低位补0)

a=13  二进制:00001101

a<<2                00110100

则a=32+16+4=52

>>  右移运算符,移动规则:将二进制数向右移动若干位,右移与被移动的数据是否带符号有关,对于无符号整数:左边空出的高位补0。对于有符号的数来说:若符号位为0,被空出的高位补0即可;若符号位为1,空出的高位补0还是补1,与计算机系统有关,有的补0有补1。

无符号

a=13  二进制:00001101

a>>2                00000011

a=3

有符号

a=-13  二进制:10001101

a>>2                  00100011(补0)11100011(补1)

a=35  或    -28

长度运算符

sizeof(类型说明符或变量)

sizeof(int)  求整型数据类型的内存字节数

sizeof(a)   求变量a在内存中所占的空间

7.运算符大比拼之优先级比较

各种运算符号的顺序:

运算符的优先级

优先级别为1的优先级最高,优先级别为10的优先级别最低。

输入输出函数

C语言是由函数构成,输入输出操作是由函数来实现的。在C语言的标准函数库中有一些输入/输出函数。可以直接调用,其中包括scanf()格式输入函数,printf()格式输出函数,getchar()字符输入函数,putchar()字符输出函数,gets()字符串输入函数,puts()字符串输出函数。

printf("格式控制字符",输出项列表);

例:printf("a=%d,b=%f,c=%c\n",a,b,c);

其中"a=%d,b=%f,c=%c\n"是格式的控制部分,a,b,c是输出项序列。格式控制字符用双引号括起来的一串字符,包括格式说明符、普通字符和转义符

格式说明符是由%和格式字符组成。

常用的格式字符
格式字符说明
%d、%x(或X)、%o(或O)、%U、输出十进制、十六进制、八进制、不带符号的十进制整数
%d、%ld、%md、%lmd、%-md、%-lmd

%d按整数的实际长度输出、%ld表示长整型;

对于%md,%lmd,m表示一个正整数,用来控制输出数据的宽度,如果m大于输出数据的宽度,则前面补空格;如果m小于输出数据的宽度,则按数据的实际长度输出;

对于%-md、%-lmd,如果m大于输出数据的宽度,则后面补空格;如果m小于输出数据的宽度,则按数据的实际长度输出;

%o,%lo,%mo,%lmo%lo表示八进制长整型,m指输出字符的宽度
%f、%mf、%.nf、%m.nfm表示为输出数据指定宽度,n表示输出的实数保留n位小数
%c输出单个字符
%s输出字符串
%f输出十进制单、双精度数
%e(或E)输出指数形式的实数型数
%e、%me、%.ne、%m.nem表示为输出数据指定宽度,n表示输出的实数保留n位小数
%g(或G)输出指数形式的实数型数不带无效0的浮点数
%%输出一个百分号

scanf("格式控制字符",输入项列表);

例:scanf("%d%f",&a,&b);

"&"是取地址符号。

要求输入一个数据,须在地址列表中有一个变量的地址与之对应,并且类型要一致;

输入项的地址可以是一个变量的地址也可以是数组的首地址,不能是变量名;

格式说明符中有普通字符或转义字符时,数据输入时,必须按他们的原样输入。

例:scanf("%d,%d",&a,&b);

输入时

4,6

输入数据时不能规定精度;

例:scanf("%5.2f",&a);这种输入格式是错误的;

可以指定输入数据锁占的列数,系统会自动按照指定的列数截取所需要的数据;

例:scanf("%2d%3d",&a,&b);

输入:123456

结果:a=12,b=345

scanf()在输入时没有提示,可以使用printf()进行提示;

在遇到数据分隔符,如空格、回车、tab或指定字符;遇到宽度,如“%3d”,读取三列后读取结束;遇到非法输入;scanf()遇到上述三种情况认为输入该数据结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值