C语言

 

  1.C语言的特点

            (1)C语言是一中面向过过程的编程语言

            (2)是一种结构化程序设计语言,特别适合大型程序的模块设计   (通过函数来实现)

            (3)允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件进行操作

2.HelloWord程序

#include<stdio.h>//这个是个标准的输入输出头文件
int main()//一个主函数
{
	printf("Hello world!\n");  //输出hello world  并且要换行
	printf("中国");
	return 0;//结束。
}

/*

#:是一种预编译符号

stdio:standard input & output  标准的输出输入函数

h:header 头文件

#include<stdio.h>:C语言不提供输入输出函数,作用是引入输出输入函数

注释:解释这个代码的作用,不参与C语言的执行,编译器看不到的意思

*/

//:一行的注释

/*:注释多个行*/

/*int main():一个程序里面有且只有一个主函数(main()),必须要有主函数,但是只可以是一个主函数,主函数是程序执行的入口

语句:就是以一个;结尾就叫做一个语句

{}:叫做函数体

注意:每次修改了程序后,要运行的话,首先要编译,且没有错误,才可以运行

所有的编程必须在英文状态下敲代码,包括符号也是,必须在英文状态下*/

    总结

           1.C语言本身是不提供输入输出语句,输入输出操作是由C标准函数库中的函数实现的      <stdio.h> <math.h>等等

           2.C语言的算法可以有0个或者多个输入,但必须要有1个或者多个输出(必须要有输出)

           3. .c源文件—— 编译——.obj 目标文件 ——连接—— .exe可执行文件

 

3.基本数据类型和基本输入输出

       一.常量

                  其值不可改变的量。例如1,-1,0,0.1,1.2E10。

          1.整型常量     1,0,-1

          2.实型常量(小数)

               1).小数形式  0.1

               2).指数形式    E或者e代表以10为底的指数        12000   1.2e4

                   注意:(大小写都是一样的)e或者E之前必须有数字,且e或E后面必须是整数   E4   1.1e1.1(错误形式)

               3).进制形式

                      八进制:以0开头,由0-7组成的数。如,012

                      十六进制:(0--15)以0X或0x开头,由0-9,A-F或a-f 组成。如,0x3A

                 3.字符常量

                        普通字符(字符)单:单字符,  单引号括起来   ‘a’  ‘1’

                  

                  在ASCII中得出的规律:

                        1.记住A  和 a 的ascii码  A 65   a  97  A+32=a;

                         2.大写的字母比小写的顺序要小,十进制小 

                         3.相同大小写的字母顺序大的 十进制也大

                         4.字符和整型可以直接转换

              4.字符串: 

                          双:  双引号  “aa”  “aaa” “a”用字符数组来表示字符串

               5.转义字符:

                           什么叫转义字符  赋予其另外一种含义

                            

                        

                         空格:32

                         扩展

                                 ‘\12’  2*8^0+1*8^1     八进制对应的ASCII码值(十进制)

                                  ‘\x12’ 2*16^0+1*16^1   十六进制对应的ASCII码值(十进制)

     

                    6.符号常量:

                            用一个符号名代表一个常量  关键字(define)        编译预处理会在编译前处理好

                  格式如下

#define  PI  3.1415926
注意:习惯性用大写字母表示,且见名只义:例如PI,表示圆周率
代码:
#include<stdio.h>
#define PI 3.1415926
int main()
{
   printf("%lf",2*PI);
   return 0;
}
--------------------
输出结果是:6.2831852

             二.变量

                  可以改变的量       必须先定义,再使用   

                  它的本质:(一段连续)内存空间的别名,变量是一个符号  内存空间可以再取别名

                  变量的声明:int a      a=10;     没有分配字节   空壳子

                   变量的定义:int a=10;  分配了字节     有内容的

                   1.常变量

                           const  int a=1;

                           表示在变量存在期间它的值不会改变

                       补充:

      常变量、符号常量和常量的区别:符号常量不占用内存空间,在预编译时就全部由符号常量的值替换了,而常变量占用内存空间,只是此变量在存在期间不能重新赋值,常量是没有名字的不变量,常变量是由名字的不变量

                三.标识符

                      在程序中使用的变量名、函数名、标号等统称为标识符

                       特点:

                标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线

                 在标识符中,大小写敏感。A  和 a

                 尽量做到见名知义

                  关键字是不可以作为标识符的,否则乱

                  四.数据类型

                    通过存储单位(字节数)来区分数据的大小

                    不同类型的的数据在内存中占用的存储单元长度是不同的

                    数据类型的本质:

                          (1) 数据类型可理解为创建变量的模具(模子);是固定内存大小的别名

                          (2) 作用:编译器预算对象(变量)分配的内存空间大小

                      

                   

                         C语言是没有规定哪个数据类型占用多大的字节数,全是编译系统规定的

void main21()
{
	int b = 10;
	int a[10] = {1, 3, 44, 2, 3, 44, 5, 5,6, 67};
	printf("a:%d &a:%d \n", a, &a); //a &a大小一样
	printf("a+1:%d &a+1:%d \n", a+1, &a +1 ); //+1 大小不一样 
	//a &a数据类型不一样   步长不一样
	system("pause");
}

                    1.  int型       分配4个字节(32位)

                                      存储方式:用整数的二进制补码形式存放

                                      正数:二进制原码,反码,补码均为相同     负数看图知

                                                                  13                -13

                                           原码    0000 1101         1000 1101

                                           反码    0000 1101         1111 0010

                                           补码    0000 1101         1111 0011

                                      二进制转十进制

                                              0001 0101       0001 1111        从二进制转为十进制方法如下,如是八进制则将2 改为8

                                      

                                       在二进制码中,为了区分正负数,采用最高位是符号位的方法来区分,正数的符号位为0、负数的符号位为1

                     2.short(短整型)   分配2个字节,其他和int一样

                     3.long(长整形)    分配4个字节,其他和int一样

                     4.有符号和无符号:             

                                   针对的是整型和字符型

                                   有符号:有正数也有负和0 [signed] int    int  例如4个字节 -2^31--0--2^31-1

                                   无符号:只能为正和0  unsigned int   范围不一样    例如4个字节  0----2^32-1    无符号的输出控制为%u

                                   当给无符号赋值为负的时候,会出现错误的结果.         

/*Demo11(无符号的输出)*/
#include<stdio.h>
int main()
{
	unsigned int a=-1;
	printf("%u\n",a);
	return 0;
}

   

      5.char  字符型    占一个字节    如char a='c';

                      6.float   单精度浮点型,占4个字节      六位有效数字

                          系统保证在规定的有效数字之内是正确的,但超过了有效数字的范围,系统就不保证你的正确性了

                          系统只会输出小数点的后6位

                          如:12.   有个点可以理解为小数

                      7.double 双精度浮点型  占8个字节   15位有效数字

                        Sizeof是操作符.关键字,不是函数:sizeof(变量名或者是数据类型) 例如sizeof(i),sizeof(int )输出的是占用的字节数

                      double类型的输入不能使用%f进行输入,得用%lf才能正常得到a的值。

                      而在输出ddouble类型时却可以用%f,这是因为printf("%f",a);在执行时C自动将float型的参数转换成double型。

                       故double型的输入输出形式如下:

                                      double a;
                                      scanf("%lf",&a);
                                      printf("%f",a);

                     float 为单精度,有效数字为6~7   double 为双精度,有效数字为15~16 但他们在输出时,小数点后都有6位小数

 

                 五.输出

                        printf(“全部输出”);除特殊% \之类的     

                       注意:printf("格式",数据);数据是什么类型,格式就写与之对应的类型,不然会输出错误的结果

任务:输出%  输出\
代码:
/*输出百分号和反斜杠*/
#include<stdio.h>
int main()
{
	//printf("%chello world!\n",97);
	//printf("hello world!\n%c",97);
	//printf("c\n");
    printf("%q\n");//百分号类似于打印的功能,除非特殊情况下(%d,%c,%lf.....)
	printf("\q");//\类似于打印的功能,除非特殊情况下(转义字符的情况下)
	return 0;
}
-----------
输出结果  q   q
#include<stdio.h>
int main()
{
	printf("I Love China!");
	return 0;
}
------------
输出结果 I Love China!

                    1,int,short型输出  %d

代码:
/*Demo10(整型的输出)*/
#include<stdio.h>
int main()
{
	int num1;//num1是个变量,并且它是int 型变量
	num1 = 10;//这里两句语句可以用一句来表示  int num1 = 10;
	printf("%d\n",num1);
	printf("%3d\n",num1);//总共输出三列,并且靠右边,左边没有的数字用空格来表示
	printf("%-3d",num1);//总共输出三列,并且靠左边,右边没有的数字用空格来表示
	return 0;
}
--------------
输出结果
10
 10
10 

                    2. 无符号的输出  %u

#include<stdio.h>
int main()
{
	unsigned int a =-1;
	printf("%u",a);
	return 0;
}
------------------------
输出结果   4294967295  看Demo11



思考
#include<stdio.h>
int main()
{
	unsigned short a =-1;
	printf("%u",a);
	return 0;
}

                       3.short型输出   %d   如果超出该类型的数字会溢出,则会输出垃圾数字

                       4.long型输出 %ld   同上述

                       5.char 型输出   %c

                                  char 与 整型的转换     

                                  char  类型在计算时都转换成整型   再进行计算  例如  ch='A'   ch+32=65+32=97

                                   字符转换为整型  如‘5’-‘0’=5                整型转化为字符  如  5+‘0’=‘5’

/*Demo14(字符型和整型的转换)*/
#include<stdio.h>
int main()
{
	char ch='a';
	int a=65;
	printf("%c\t%d\n",ch,ch);
	printf("%c\t%d\n",a,a);
	return 0;
}
---------------
输出结果是
a    97
A    65

       字符与整型有的时候是可以通用的(范围内)

注意:当你的整型超过了字符型的范围时,就会按照你所在的地方的国家规定的编码来输出,我们国家是gbk编码(在网上看的)

                        6.字符串输出  %s

代码
/*字符串的输出*/
#include<stdio.h>
#include<string.h>
int main()
{
	char arr[10]="drererert";//利用数组来装字符串
	int a = sizeof(arr);
	int b = strlen(arr);
	printf("%s\n",arr);//字符串的输出格式
	printf("数组里面分配%d个字节\n",a);
	printf("数组里面有%d个字符\n",b);
	return 0;
}
-----------------
输出结果   
drererert
数组里面分配10个字节
数组里面有9个字符

                         7.float型输出  6位小数,6-7位有效数字

#include<stdio.h>
int main()
{
	float a;
    a=1.2345678f;//输出结果为1.234568,小数点的第七位是利用四舍五入进了一位,所以为1.234568
	printf("%f\n",a);
	return 0;
}



%m.n格式输出 -%m.n格式输出
/*float的输出*/
#include<stdio.h>
int main()
{
	float a;
  a=1.2345678f;
	printf("%f\n",a);//输出结果为1.234568,小数点的第七位是利用四舍五入进了一位,所以为1.234568
	printf("%12.7f\n",a);//m.n的格式,m是共占用多少的列,n是指小数点输出多少位,并且它是靠右边的  1.234568
	printf("%-12.7f",a);//m.n的格式,m是共占用多少的列,n是指小数点输出多少位,并且它是靠左边的1.2345678  
	return 0;
}

                  对于%c用m.n格式的用法都是 一样的   scanf(“%4s”,ch);4s表示有效字符为四个

                                                                                 printf("%ns",ch);    n表示最少输出n列(靠右)的意思,不够用空格补充

                                                                                                               若是-n则最少输出n列靠左边的,不够也用空格补充

#include<stdio.h>
int main()
{
	char ch[10];
	scanf("%4s",&ch);
	printf("%s\n",ch);
    return 0;
}
----------------
输出结果
asdasdasd
asda

                8.double型输出 6位小数,15位有效数字(有效%n数字之内保证正确,超过了不负责)  %lf  %f

#include<stdio.h>

int  main()

{

double a=1.0;

double b=3.0;

printf("%lf",a/b);

return 0;

}
-------------------
输出结果 0.333333333f



#include<stdio.h>

int  main()

{

double a=1.0;

double b=3.0;

printf("%20.17lf\n",a/b);//输出为 0.33333333333333331 ?  这就是有效数字在作怪

printf("%.17lf\n",a/b)//输出17位小数

return 0;

}
---------------------------
输出结果    

                            9.指数形式输出  %e

#include<stdio.h>

int main()

{

float a=22223.34567888f;

printf("%e",a);

return 0;

}
---------------
输出结果 :2.222335e+004

                        11.指数.小数格式输出 %g 

                           (看谁输出的字符更短就输出谁)

           %g格式 符,用来输出实数,输出格式为f格式或e格式,系统根据数据占宽度m大小,自动选择占宽度较小的某种格式输    出,%g格式符不输出小数点后无意义的零

                         12.八进制格式输出 %o  

#include<stdio.h>
int main()
{
    int a=16;
    printf("%o",a);
    return 0;
}
--------------------
输出结果   20

                          13.十六进制格式输出  %x

#include<stdio.h>
int main()
{
    int a=16;
    printf("%x",a);
    return 0;
}
-------------------
输出结果   10

          注意:x,e,g外,其他输出格式必须小写。

               六.输入

       大多数情况下都要加上&(取地址符);

              一般格式

                       scanf(格式控制%d,地址表列&a)     scanf遇到空格结束

                       scanf(格式控制n%d,地址表列&a)  若输出的数中间有空格  n若取到第一个空格之前的数,之后的数就无效

 反之,第一个空格之前的数没有达到n个,将数值全部输入

          如

int main()
{
	  
	  int a,b;
	  scanf("%3d%d",&a,&b);
	  printf("%d%d\t",a,b);
	  return 0;
}
---------------------
输入
123 45
输出结果
12345


输入
12 345 67
输出结果
1234567

                   用语句scanf( %c%c%c ,&c1,&c2,&c3)输入a└┘b└┘c时,变量c1、c2、c3的值分别为

                  └ ┘ 应该是空格
                   scanf 需要精确匹配, 因为你的匹配项目是 %c%c%c 所以答案是`a`,`└ ┘`,`b`
                   如果匹配项目是 %c %c %c 那么答案就是 a b c (注意%c中间有空格)

             格式控制那里不一样的格式,控制台就会有不一样的输入格式

              注意事项:输入数值数据时,遇到空格回车tab或者非法字符则认为该数据结束输入

scanf("%d%d%d",&a,&b,&c);
输入:用空格,或者回车,或者tab或者非法字符来结束一个变量的输入
scanf("%d,%d,%d",&a,&b,&c);
按照格式控制表列里面的格式来输入,例如是,则用,来隔开
scanf("%d%c%lf",&a,&b,&c);
输入格式为:1c3.3     输出为 1  c   3.300000
scanf("%d,%c,%lf",&a,&b,&c);
输入格式为:1,c,3.3  输出为 1  c   3.300000
scanf(“%d,%f,%c”,&a,&b,&c);
输入格式为:1,2.2,c  输出为 1  c   3.300000
scanf(“%d:%f:%c”,&a,&b,&c);
输入格式为:1:2.2:c   输出为 1  c   3.300000

               总结:scanf输入的内容  是根据scanf中双引号的格式进行输出,若格式对应不上,就会出现输出错误

               

补充:整型的格式输入,例如20170822

#include<stdio.h>
int main()
{
	int year,month,day;
	scanf("%4d%2d%2d",&year,&month,&day);//读取指定位数的数字  %4d :读取前面四个数字  20170822  读取的是2017
	printf("%4d\n%2d\n%2d\n",year,month,day);
	return 0;
}

 

                 七.运算符

      1.运算符的种类

     (1).算术运算符 

     用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算%)、自增(++)、自减(--)共七种。

  1. +-*/混合运算  (5/3) (-5/3)= -1(vc.0)不一样的编译系统答案可能不一样,有的可能为-2 int/int 型 结果也为int 型
  2. 格式控制输出%d 之类的  ,必须和后面的变量计算的结果类型相一致,不然就会出错    printf("%d\n",5/3);
  3. 求余数(参与操作的数只能为整数)
  4. 自增 i++, ++I,前者是先让i运算,再加1,后者则先加1,在运算
  5. 自减 i--,--I; 前者是先让i运算,再减1,后者则先减1,在运算

     注:printf("%d\n",x+=x++;x++);

             pirntf函数中的表达式的结合顺序是由右向左,所以先算x++,再算x+=x++

      (2).关系运算符 

       用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。

       关系运算符运算返回的结果的是逻辑结果.bool类型,就是一个逻辑值,即“真 1”“假 0”

       =赋值   ==  !=

      (3).逻辑运算符(返回的结果也是真,或者假这两种情况) 

       用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

      四种关系一一对应:(真true 1 非0)    (假 false 0 0)

  1.      &&相当于并且的意思,||相当于或的意思
  2.      &&:两个为真则为真,其中一个为假则为假 4&&0
  3.       ||:两个为假则为假,其中一个为真则为真
  1.       !:非0为真,0为假(判断计算过程) !5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wkflyj

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

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

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

打赏作者

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

抵扣说明:

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

余额充值