c语言基础学习

#C语言的基础学习

标签: c语言 数据类型 基本程序

第一章:C程序初步学习

1.怎么去编译C程序

gcc xx.c 会在当前目录下默认生成一个a.out可执行文件

gcc xx.c -o xx(自己随便命名) 会在当前目录下生成一个xx可执行文件

gcc xx.c -o xx -g -Wall 监听整个C程序的警告,并会在当前目录下生成一个xx可执行文件

注意点:只要对C程序进行了修改,都要对其进行gcc编译,重新产生可执行文件

2.注释

1>注释存在的意义

(1)让别人知道该C程序的所属对象,将来便于合作开发

(2)标注代码的功能,便于将来再次开发

(3)注释代码,将当前被注释的代码不会被运行

2>注释有哪些

(1)单行注释://被注释的内容

(2)多行注释:/被注释的内容/

(3)块注释:/被注释的内容/

问题://被注释的内容//这种写法是错的

原因:第一个/会与碰到的第一个*/进行匹配

3.常量

0>常量的特点

(1)不可变

(2)常量不可以作为左操作数

1>常量有哪些?

(1)整型常量:1 2 3

(2)浮点常量:1.2 1.0

(3)字符常量:‘1’ ‘a’

(4)字符串:“1” “hello”

(5)地址常量:0x01 0x02

注意点:

(1)浮点常量分为单精度和双精度1.2f — 1.2d

(2)字符常量必须要用’’括起来,里面有且只能有一个字符

(3)字符串常量必须要用””括起来

2>地址常量

实际上就是一个变量在内存当中存储的地址,将来可以通过地址去访问变量里面的内容

计算机存储的最小单位是字节;Byte

1M=1024KByte

1KByte=1024Byte

1Byte=8bit

4.hello world第一个程序

(1)一个程序有且只能有一个main函数(入口)

(2)main函数很特殊,int可以省略,但是不建议(有些编译不支持这么写)

(3)main函数可以有return,可以没有return,其他函数就不一样

(4)标准的main函数写法

intmain(intargc,char*argv[]){}

5.#incude相当于一个图书馆,里面有很多函数的声明

5.进制

1>进制有哪些?

十进制: 09

八进制:以0开头 07

十六进制:0x开头 0X 0f

a:10

b:11

c:12

d:13

e:14

f:15

二进制:0b 0B开头 01

2>十进制转换成其他进制

十进制这个数不断地除以转成的进制,不断的用商再除,倒着拿到余数就是这个进制的数据

16/2=8…0

8/2=4…0

4/2=2..0

2/2=1..0

1/2=0…1

0B10000==16

5.变量

1>变量的特点

可变的

2>数据类型

int:整数类型

char:字符类型

float:单精度的浮点类型

double:双精度的浮点类型

3>变量的定义(产生)

(1)格式:数据类型 + 变量名;

inta;charch;floatf;doubled;

(2)多个变量的定义

inta,b,c;floata,b,c;

4>数据类型的作用

就是标识某个变量的类型,将来存储什么类型的常量

5>代码块的作用

(1){}就是一个代码块

(2)指明某个变量的使用范围

(3)在同一个代码块里面不能有相同的变量名

6.格式化输出函数

printf:print formatter

1>占位符

%d:是替整型数据占的位置

%f:是替浮点数占的位置

%c:是替字符类型占的位置

%p:是替地址占的位置

2>注意点:

(1)printf里面的参数要占位符要和实际数据类型保持一致,而且个数也要保持一致

(2)printf实际上是打印第一个字符串,说白了,就是碰到\0就不再打印了

3>打印特殊字符

\:\

“:\”

‘:\’ ,’

%:%%

4>输出格式的控制

%m.nf:

n:代表输出来的浮点数小数点后面占几位

m:指的是整个浮点数的宽度,算小数点

m<=n+1+整数部分实际的位数,m无效

m>n+1+整数部分实际的位数,m才有效,左边空出空格填充

%m.nf

%md

%mc

5>单精度和双精度的区别

float类型的数据:精度保留有效数字7位

double类型的数据:精度保留有效数字16位

floatf=123456789.0;printf("%f\n",f);doubled=1234567890123456489.0;printf("%f\n",d);

7.标识符的命名规范

1>硬性规范

(1)只能由数字,字母,下划线组成

(2)不能由数字开头

(3)不能与C语言关键字相同

2>建议规范

(1)不准用拼音,多查字典

(2)尽量使用驼峰或者是下划线分割单词

(3)见名知义

8.格式化输入函数

scanf:scan formatter

(1)用法:是将输入缓存区里面的变量,找到变量的地址,将值给这个变量

(2)输入输出缓存区:\n有强制刷新缓存区的作用

(3)输入多个变量

scanf(“%d%d”,&a,&b);

(4)注意点

不要在scanf里面做太多的动作

不要在scanf里面加\n

(5)吸收输入缓存区里面的回车残留

示例代码:

#includeintmain(){inta;charch;chartemp;//temp只是去吸收\nscanf("%d",&a);//1.scanf("%c",&temp);//2.getchar();默认//3.getc(stdin);    需要指定的到哪边拿scanf("%c",&ch);printf("a=%d\nch=%c\n",a,ch);return0;}

9.字符输入输出函数

(1)输入:getchar(),从键盘读入一个字符

(2)输出:putchar(字符),

示例代码:

#includeintmain(){charch=getchar();putchar(ch);putchar('\n');return0;}

第二章:数据操作

1.算数运算符

+,- , * ,/,% ++ —

%:左右两边的操作数必须是整数

前缀++

示例代码:

intmain(){inta=1;intc=++a;//a=a+1,c=a;printf("c=%d\na=%d\n",c,a);return0;}

后缀++

示例代码:

#includeintmain(){inta=1;intc=a++;//c=a,a=a+1printf("c=%d\na=%d\n",c,a);return0;}

2.位运算符

数据在计算机当中是以二进制进行存储的,是以二进制的补码存在的

数据以补码存储,原码输出

(1)正数的原码,反码,补码

正数的原码

反码:和原码相同

补码:和原码相同

(2)负数的原码,反码,补码

负数的原码

反码:符号位不变,后面依次取反,0->1 1->0

补码:反码的基础之上加1

(3)1+(-1)=0 ?

假设:如果数据在计算机内存中是原码存储的?

1:0000 0001

-1:1000 0001

1+(-1)=-2;

结论:上面的假设不成立

1

原码:0000 0001

反码:0000 0001

补码:0000 0001

-1:

原码:1000 0001

反码:1111 1110

补码:1111 1111

1补码:0000 0001

-1补码:1111 1111

结果:10000 0000

1+(-1)=0;

(4)位运算符有哪些?

|:位或,只要有1就为1

&:位与,只要有0就为0

^:异或,只要不同就为1

~:取反

<<:左移

:右移

3.关系运算符

在计算机当中,0在逻辑上表示为假,1表示为真

>=,<=,==,>,<,!=

4.逻辑运算符

&&:而且  ,事件1&&事件2,两个事件都要成立整个事件才会成立||:或者, 事件1  ||  事件2,  两个事件当中只要有一个事件成立,整个事件才成立!:非,!事件,如果事件成立,整个事件就不成立

注意点:

事件1&&事件2;如果事件1不成立,事件2不会被判断

示例代码:

#includeintmain(){inta=2,b=8,c=9;intres=a>b&&c++;printf("%d-%d\n",res,c);return0;}

事件1 || 事件2;如果事件1成立,事件2不会被判断

示例代码

#includeintmain(){inta=2,b=8,c=9;intres=a

5.取地址符

&a;

6.计算数据类型的字节大小

sizeof(数据类型/变量名);

int:4char:1float:4double:8

注意点:

(1)在32位机里面,long , 指针类型是占4个字节

(2)在64位机里面,long , 指针类型是占8个字节

7.三目运算符

(a>b)?a:b

求取a、b中的最大值

#includeintmain(){inta,b,max;printf("input there number:\n");scanf("%d %d %d",&a,&b,&max);printf("%d\n",(a>b?a:b)>max?(a>b?a:b):max);return0;}

8.运算符的优先级

预算符的优先级表

1.()[].->算数运算符->关系运算符->逻辑运算符&& ||->赋值运算符

2.单目运算符->双目运算符->三目运算符->赋值运算符

9.数据精度转换

1.准则

计算机只计算相同类型的数据,类型不同,计算机内部自行转换

char->short->int->float->double

2.强制类型转换: (数据类型) 变量

不会改变变量本身的数据类型,只会转换变量指向的值

强制类型转换尽量避免高精度向低精度转换,会造成精度的损失

第三章 三大流程控制

1.顺序流程控制

顺序执行

2.条件流程控制

if(条件语句)

{

执行语句1;

}

else

{

执行语句2;

}

1.if的条件语句常将常量放置在左边

2.如果if、else只执行一句代码,可省略大括号

实例如下:

#includeintmain(intargc,char*argv[]){inta;scanf("%d",&a);if(!(a&1))printf("%d是一个偶数\n",a);elseprintf("%d是一个奇数\n",a);return0;}

3.ASCII

特殊的字符:A:65 a:97 ‘\0’:0 空格:

#includeintmain(intargc,char*argv[]){charch;printf("input a char:\n");    ch=getchar();if(ch>=65&&ch<=90)    {printf("你输入的大写字母\n");printf("你输入的字母的小写为:%c\n",ch+32);    }else{printf("你输入的小写字母\n");printf("你输入的字母的大写为:%c\n",ch-32);    }return0;}

示例代码:

#includeintmain(){  /* char ch;printf("input a char:\n");    ch=getchar();if(ch>=65&&ch<=90)    {printf("你输入的大写字母\n");printf("你输入的字母的小写为:%c\n",ch+32);    }elseif(ch>='a'&&ch<='z')    {printf("你输入的小写字母\n");printf("你输入的字母的大写为:%c\n",ch-32);    }else{printf("你输入的非字母!\n");    }*/    int a,b,max;printf("input two number:\n");    scanf("%d %d",&a,&b);    /*if(a>b)printf("%d and %d 的较大值%d\n",a,b,a);elseprintf("%d and %d 的较大值%d\n",a,b,b);      */printf("%d\n",a>b?a:b);return0;}

示例代码:

#includeintmain(intargc,char*argv[]){intsales;scanf("%d",&sales);printf("your sales is %.2f\n",sales<=1000?sales:(sales-(sales-1000)*0.05));}

4.switch-case

swith(变量)

{

case 常量1:

语句块;

break;

case 常量2:

语句2;

break;

........

default:

break;

}

//银行ATM的功能仿真#include#includeintmain(intargc,char*argv[]) {//switch()//case 1;的使用intselect_num=0;intaccount_money=10000;intcaozuo_money;intmima=123;intmima_put=0;while(1)    {printf("    银行的菜单选择  \n");printf("    1.取钱  \n");printf("    2.存钱  \n");printf("    3.余额查询  \n");printf("    4.密码的重新输入  \n");printf("    0.退出  \n");printf("    请输入你需要选择的功能的编码(0-4):  \n");scanf("%d",&select_num);switch(select_num)    {case2://stemaname;printf("    请输入你需要存钱的金额:  \n");printf("    输入金额必须是100的整数倍:  \n");scanf("%d",&caozuo_money);if(caozuo_money>0&&caozuo_money%100==0)        {          account_money=account_money+caozuo_money;        }elseprintf("你输入的金额有误\n");printf("\n");break;case1://stemaname;printf("    请输入你取钱的金额:  \n");printf("    输入金额必须是100的整数倍:  \n");scanf("%d",&caozuo_money);if(account_money0&&caozuo_money%100==0)          account_money=account_money-caozuo_money;elseprintf("你输入的金额有误\n");printf("\n");break;case3://stemaname;printf("    你当前账户的余额为:%d  \n",account_money);printf("\n");break;case4://stemaname;printf("    重新输入密码:  \n");scanf("%d",&mima_put);if(mima_put==mima)printf("  密码正确\n");elseprintf("    密码错误\n");printf("\n");break;case0://stemaname;//printf("    选择密码重新输出  \n");//调用exit函数完成这个程序的正常退出exit(0);default:break;    }    }printf("感谢你的使用,欢迎下次光临邮政银行!\n");return0; }

note:

1.decault 代表case外的其他情况;

2.case语句内不允许定义变量(需要定义时,请加大括号);

3.case,default后需break跳出;

4.case可以不加{},而执行多条语句;

5.switch不建议定义变量;

3.循环流程控制

1.while循环

1.while循环

while(条件){    代码块;}

2.do-while循环

do{    代码块;}while(条件);

note:

1.循环次数编写时不确定的情况处理;

2.当while的条件相同时,do-while比while多执行一次;

3.do-while:先执行后判断或语句至少执行一次;

2.for循环

for(初始赋值;条件判断;条件变化)

{

语句块;

}

注意1

1.初始赋值语句只执行一次;

2.条件判断成立,执行语句块,执行完毕,再执行条件变化,进行条件判断;

3.条件不成立,执行循环后的语句;

注意2

for循环内的三个语句都可省略,但是;不能省略

3.循环

注意循环的条件,避免死循环的产生;

while(1)常用于构建不退出系统,如单片机、嵌入式设备的主界面;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 数据类型转换: 1.当赋值符号两边的数据类型不同的时候,数据类型转换是自动的,不需要程序员插手 当给 int 类型...
    Munin_阅读 781评论 0 2
  • 1.编译程序(1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a.o...
    萌面大叔2阅读 1,241评论 0 1
  • 小米从小到大都喜欢听故事,说是故事,其实是爷爷奶奶或者是周围邻居讲述的自己的亲身经历,有凄凉悲惨的,也有幽默风趣的...
    Wangmelissa阅读 563评论 0 0
  • 早上好#易效能 # 蒋小园 2017/09/25(312/500) 【不忘初心,坚持始终】 健康:作息《昨晚今早》...
    圆圆jXY阅读 187评论 0 0
  • 这算是一篇迟到的纪念文吧 今天是1.16,2017.说起来我10.8的时候在干什么呢 记不大清了 或许这三年都能用...
    苓央阅读 103评论 0 0