ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:57.93KB ,
资源ID:4513067      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4513067.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(C语言学习笔记.docx)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

C语言学习笔记.docx

1、1 .第一个C程序: # include "stdio. h"/*该行是文件包含命令*/niain() { printf ("test") ;/*函数调用:printf将内容输出到显示器*/} 注:C语言区分大小写;程序中必须含有一个且只有一个名字为main的主函数; 每行程序必须以〃;“结尾;/* ... */是注释内容。 2.引申例题:计算任意半径圆的面积和周长。 ftinclude "stdio. h"mciinO { float r, 1, area;/*定义 float 类型变量*/scanf (飞f",&r);/*调用获取键盘输入函数*/ 1 = 2*3.14*r;

2、area = 3.14*r*r; printf C\n l=%f, area=%f\n,z, 1, area);) 注:r, 1, area是float类型的变量,程序运行中可改变,float是c语言中的一种 数据类型。 3求两个数的和。 ttinclude "sldio. h"mciinO { int i, j, sum; int Add(int m, int n) ;/*声明函数*/ 0,01,0,0 0, 1,0逻辑或运算符例子代码: ttinclude “stdio. h"main() { int m, n; int k; k=(m=0)||(m=l);或运算的

3、计算规那么*/ printf ("%d, %d\n”, in, k); k=(m=l) | | (m=0); printf (“为d, %d\n”, m, k); k=(m=2)||(m=l)||(m=0);算的规那么测试*/ printf ("与d,与d\n”, m, k); m=0, k=0; n=++m||++k; printf ("%d, %d, %d\n”, k, m, n); m=0, k=0; n=++k||++m; printf (*%d, %d, %d\n*, k, m, n);++m||++k+*/ }程序运行结果: /*逻辑/*多层逻辑或运 /

4、测试表达式++k |++m与1, 1 1,12,1 0, 1, 11,0, 1 逻辑与和逻辑或混合运算例子代码: #include “sldio. h" mainO { int m, k; /*表达式理解为(m=0) I I ((m=l )&&(m=2))*/ printf (,z%d, %d\n,,, rn, k); k=(m=2)||(m=0);(m=2)| ((m=l)&&(m=0))*/ printf ("%d, %d\n”, m, k); k=(m=2)&&(m=l)

5、 | (m=0); ((m=2)&&(m=l))||(m=0)*/ printf (“为d, %d\n”, m, k); k=(m=0)&&(m=l) | | (m=2);((m=0)&&(m=1))||(m=2)*/ printf (“为d, %d\nz,, m, k); /*表达式理解为 /*表达式理解为 /*表达式理解为 程序运行结果: 2,12,1 1,12, 1 4条件运算符和条件表达式4.1条件运算符〃?「是C语言中唯一的的三目运算符,优先级高于赋值运算 表达式语法:表达式1?表达式2:表达式3其执行顺序是:先求解

6、表达式1,假设为1那么执行表达式2,否那么执行表达式3。 例子代码: ttinclude "stdio. h"main() { charch; scanf ("枇",&ch);/*输入一个字符,赋给变量ch*/ ch=(ch>= AJ &&ch<=, Z') ? (ch+, a'」A'): ch;/* 当字符为大写字母时,将其变为小写字母*/ printf (,/\n%c,,» ch);) 5sizcof运算符5. Isizeof是C语言的一种单目运算符,运算对象是变量名、表达式或数据类型标 示符。功能是以字节形式给出操作数的存储大小。 5. 2语法格式:sizeof (表达式

7、或sizeof表达式 或sizeof (数据类型)6取地址运算符 6.1取地址运算符的运算对象只能是变量,运算结果为变量的存储地址。 7几种运算混合运用例子代码: ttinclude "stdio. h"main() { int x, y=l, z; x= ((9+6)%5>=9%5+6%5) ?l:0;/*((9+6)%5> =9%5+6%5)等价于(((9+6) %5)>=(9%5 + 6%5))其值为 0*/ printf(* x=%d\n”,x); y+=z=x+3;/* y+=z=x+3 等价z=x+3, y=y+z*/ printf(* y=%d\t z=%d\n

8、 y, z); x=y=z=l; -xa&++y| |z++;/*混合的逻辑与和逻辑或运算*/ printf C x=%d\t y=%d\t z=%d\n”, x,y,z);} 程序运行结果: x=0 y=4z=3 x=0 y=l z=2摘自letthinking的专栏 c语言学习笔记(五)一顺序程序设计 1语句概述L1普通表达式语句:表达式后加分号就是•个表达式语句,语句与表达式不同, 是无值的,而表达式是有值的。 1.2流程控制语句:流程控制语句主要用来控制程序执行走向,以实现程序的各种 结构方式,它有特定的关键字等,主要分为分支和循环两种。 分支流程控制语句:i

9、f、switch0循环流程控制语句:for、while、do while。 1. 3跳转语句:跳转语句的作用主要是让程序从止常执行的走向中跳转到其它局部, 常见跳转语句如下间断语句:break、continue。 转向语句:goto。 Return 语句:return。 L4复合语句:由一些语句组成,放在一个大括号中形成一个整体,句型如下: (语句1; 语句2: 语句n: C语言语法规定,复合语句作为•条语句来处理。 例子代码: ttinclude "stdio. h"main() { int a=I1, b=21, c=31; printf ("a=与d\tbKd\t

10、c=%d\n”, a, b, c); /*复合语句开始*/ /*复合语句结束*/ (int b=22; float c=3. 3; printf (,/a=%d\tb=%d\tc=%f\n/,, a, b, c); a二 b; } printf (,/a=%d\tb=%d\tc=%d\n/,, a, b, c);) 输出结果如下: a=l1 b=21 c=31a=ll b=22 c=3. 300000 a=22 b=21 c=31上面的代码可以和下面的代码比照运行: ftinclude "stdio. h"ma in() { int a=ll, b=21, c=31;

11、 printf (/,a=%d\tb=%d\tc=%d\n,/, a, b, c); { int a=l;int b=22; int b=22; /*复合语句开始*/ float c=3. 3; printf("a=%d\tb=%d\tc=%f\n”,a,b,c); a=b; /*复合语句结束*/ printf (,/a=%d\tb=%d\tc=%d\n,,, a, b, c);程序运行结果: a=ll b=21 c=31a=l b=22 c=3. 300000 a=ll b=21 c=31可以看到,在复合语句中声明的变量只在复合语句中起作用。 1.5 空语句:

12、空语句一般指只有一个分号占位,一般用在程序设计初期,表示待编 写的函数或代码。 1.6 各种语句整体介绍: ttincludc "stdio. h"/*声明语句*/ /*控制语 /*复合 /*表达式语 /*声明语句*/ /*控制语 /*复合 /*表达式语 main() { int a=10, b=20, c; if (b>a)句 */ {;语句 */ c=a+b;;句 */ /*函数调用语 printf (飞d”, c); ) else ;/*空语句*/ }2库函数的调用与输入输出的关系 2.1 标准的库函数是存放在函数库中的,因此使用时必须要告知计

13、算机,说明函数 库属于哪个库,此过程为函数的声明,例如: ft include "math, h" /*标准数学函数的声明*/Main() { y=sin(x); /*库函数的调用*/ )Include是C语言中的特定字,是包含的意思,包含的文件一般为.h,称头文件。 2. 2在C语言中提供了一些输入输出的标准库函数,例如printf和scanf,使用时 必须将函数库的头文件stdio.h包含进程序中。 3格式化输出Iprintf函数:它的作用是向终端输出数据。 函数格式:printf ("格式控制语句:输出项1,输出项2);例如:printf("%f”,j);输出浮点类型的变量j,

14、 %f为控制符。 常见的格式控制符:: 刎一十进制整型,%o一-八进制无符号整型,%f输出实数,%s一字符串,猊一输出 单个字符等。 4字符输出1字符输出可以利用putchar函数,在stdio. h中已经定义。 例子代码: ftinclude "stdio. h"mciinO { char a, b, c; a=' C'; b=' A'; c='T'; putchar(a); putchar(b); putchar(c); putchar (? \n ); putchar (J \10T ); putchar (* B'); putchar (J c );}

15、 注:该函数不能输出两个或两个以I:的字符数据。 5格式化输入 5. Iscanf函数:作用是从键盘获取数据,格式化后再赋值给变量。 调用形式:scanf (格式控制语句,输入项);/********************************************************************* 6字符输入6. IgetchO和getcheO函数:功能都是读入一个字符。 两者的区别是:getch()函数不将读入的字符回显到屏幕上,getcheO却显示。 例子代码: #includema i n() char c, ch;c=getc

16、h(); /*从键盘上读入一个字符不回显送给字符变量c*/ ch=getche();/*从键盘上带回显的读入一个字 符送给字符变量ch*/putchar(c); /*输出该字符*/putchar(ch); 6. 2getchar()函数:作用是从终端输入一个字符。getchar函数将空格符、制表符、和换行符都作为有效字符录入。 例子代码: ftinclude "stdio. h" scanf(*%d sum = Add(i, j);/*调用函数*/ printf (^Xn sum=%

17、d \n,,» sum);} int Add(int m, int n) {/*函数*/ return m + n;} 注:scanf C%d %d", &i,&j);中的&是取地址运算符。 通过以上三个例子的总结: 1. 一个c语言源程序可以由一个或多个源文件组成,每个源文件可以由一个或多个 函数组成,一个源程序无论有多少个源文件或函数,都只能有一个且只能有一个 mian函数。 由引入的指令为预处理指令。 4常见语法规范。 标示符:程序中的变量名、函数名、标号等统称为标示符。C语言规定标示符只能 由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。 1常见数据类型I

18、nt、short、long^ unsigned% float、double、char、enum、void、指针类型、数 组类型、struct、union 等。 基本数据类型:Int> short^ long、unsigned、float、double、char^ enum 都属 于基本类型。特点是其值不可再分。 2常量。 常量定义方式:fidofino标示符常量main () { char cl,c2; cl=getchar(); c2=getchar(); putchar(cl); putchar(c2);} ********************************

19、/7顺序程序设计 例一:计算一元二次方程的根。 代码: #include "math, h” main() ( double a, b, c; double xl,x2,p; printf (z,pleaseinputa, b, c:"); scanfr%lf%lf%ir, &a, &b, &c); printf('\n"); p=b*b-4*a*c; */ xl=(-b+sqrt (p))/(2*a); x2=(-b-sqrt(p))/(2*a); printf("xl=%f, x2=

20、f\n”, xl, x2); } 例二:两位整数倒序。 /*声明系数*/ /*输入系数*/ /*P存放判别式的值 /*计算方程的根方 /*输出结果*/ 代码: ftinclude mainO( int m, n; printfCinputm (10-99); scanf("%d", &m); printf('\n"); n=ifi%10; m=n*10+m/10; printf("m=%d'n”, m);} c语言学习笔记(六)一分支程序设计 1使用if语句设计选择程序:if语句一般分为两种方式:单条件单分支、和单条 件双

21、分支if语句。 1. 1单条件单分支的if语句一般语法: If (表达式A){语句B; 语句执行流程:首先执行表达式A,如果表达式A的值非0,那么执行语句序列B,然 后流程继续往下执行。 例子代码: ft include “stdio. h"mainO { double score;printf("input the score:"); scanf&score);i f (score〉=60) /*成绩开始判断*/ printf (,/\npass!\n,/);printf (''programming is over!\n") ;/*和判断语句并列的下一条语句*/ }1.2

22、单条件双分支的语法格式: If (表达式A) {语句B; }else{语句C; )语句执行流程:首先执行表达式A的运算,如果表达式A的值非0,那么执行语句B, 条件不成立那么执行Co 例子代码: i nclude "stdio. h"mainO (double score; printf(,zinput the score:");scanf (“机f”, &score); if (score>=60) /*成绩开始判断*/printf ("\npass!\n") ;/*及格说明分支*/ elseprintf (*fail! \n"); printf (,zprogrammi

23、ng is over!\n") ;/*和判断语句并列的下一条语句*/ }2嵌套的if语句 2. 1嵌套常用格式: 第一种: If(表达式){语句} else if(表达式){语句} 第二种: If(表达式){语句} else if(表达式)语句 else语句 例子代码: #include stdio. h#include "math, h” void main(){int a; scanf("%d", &a); if(abs(a)<10) printf (线dis one bit. \n",a); else if(abs(a)<100)printf (",%dis

24、 two bit. \nz,, a); else if(abs(a)<1000)printf(,z%dis three bit. \n",a); else if(abs(a)<10000)printf (z,%d is four bit. \n", a); else if(abs(a)<32767) printf(w%dis five bit. \n",a);else printf (,/thenumberistoolarge\n,z);3.用switch分支设计选择程序 3. 1语法形式: Switch(表达式){case整型常量表达式1:语句;[break;] case整型

25、常量表达式1:语句;[break;]case整型常量表达式1:语句;[break;] Ldefaul t]:语句;注:口里是可省略的。 3.2语句的执行流程:根据switch表达式的值,确定语句的执行入口,自上而下用 表达式的值与case的值比拟,相等就执行case后面的语句,如果语句结尾含有 break,就中断switch,否那么就继续执行下一个case,如果没有与表达式相匹配的 值,就执行default后的语句。 switch的表达式可以为任意类型,但运算结果必须是整型或字符型。 例子代码: ttinclude "stdio. h"main() {int score; pri

26、ntf("score="); scanf("兆d”, &scorc);switch((int) (score/10))/*整型量之间的除法,结果 仍为整型*/( case 10: case 9:printf (^YourgradeisA\n,/);break; case 8:printf (/,YourgradeisB\n,/);break; case 7:printf (/,YourgradeisC\n,/);break; case 6:printf (z,YourgradeisD\n,z);break; default:printf("YourgradeisE'n");sw

27、itch语句也可以嵌套,break只能让程序跳出它所在的switch分支。 例如: switch(nl) { switch(n2) {; )case 2:; )4.分支程序设计实例 4.1 判断年份是否为闰年。 用include "stdio.h"mainO { int year;printf(,zinput the year:"); scanf&year);if((year%4 == 0) && (year%100 != 0)) printf ("该年是闰年\n"); else if(year%400 == 0)printf ("该年是闰年\n"); elseprint

28、f ("该年是平年\n"); }4. 2计算天数: ftinclude,zstdio. h" main()( int day, month, year, sum, leap; printf ('Anplease input year, month, day\n,z); scanf (,/%d%d%d,,> &year, &month, &day); switch(month)/*先计算某月以前月份的总天数*/ ( case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;brea

29、k; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;brcak; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf("data error");break; ) sum=sum+day; /*再加上某天的天数*/ if (year%400==01 I (year%4==0&&year%l00!

30、0))/*判断是不是闰年*/ leap=l; else leap=0; if (leap-l&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ sum++; printf (,zIt is the %dth day. ”, sum);} 1循环语句1循环语句主要包括三种:while、do-while> for。 2while语句处理循环Iwhi le语句基本形式: While (表达式){循环体语句} 2. 2执行流程:首先计算while表达式的值,当非零时执行循环体内的语句,执行 完之后继续判断while表达式的值,如果非零,继续执行循环体,直到表达式

31、值为 零时,跳出循环,执行后续的语句。 例子代码: 注:使用sum和i时一定要赋初始值。 2. 3while语句使用注意: 循环体要是多条语句必须使用符合语句形式;在循环体表达式中一定要有控制循环趋向结束的语句,否那

32、么循环将无限进行;循环体可为空; 2. 4whilc 实例:a+aa+aaa+.... 代码: 思考问题:求阶乘。 3do while语句处理循环常量分为:直

33、接常量和符号常量。 例题:求任意圆的周长和面积,使用常量定义:n。 ttinclude "stdio. h"ftdefine PI 3.1415926 ma in() {float r,1,area; scanf ("%f", &r);1 = 2*PI*r; area = Pl*r*r;printf(*Xn l=%f area=%f \n”, 1, area); )注:常量值不能被修改;习惯上常量名大写,变量名小写: 整型常量(整型): 1 .十进制整常数:0~9数字,无前缀等,也就是整常数。例如:237、-783、65535;.八进制正常数:以0为前缀,数值为0、7,八进制通

34、常是无符号数。例如:023; 2 .十六进制整常数:前缀为0X或Ox,由0〜9, a~f或A~F组成(不区分大小写), 例如:0X23A、OXAA、OxFFFO; 3 .长整型常量:使用L或小写1作为后缀,例如:123L (十进制123)、0121 (八 进制10) > 0xl5L (十六进制 21)。 3. Ido while语句基本形式: do (循环体语句}while(表达式); 3. 2执行流程:先执行do后面的循环体,然后计算while里的表达式值,当值非零 时继续执行do的循环体,当值为零时,跳出循环。 例子代码:

35、x;include "stdio. h"main ()( int i, sum; i=2; sum=0; do /*先执行循环*/ ( sum+=i; i+=2; )while(i<=100);/*判断条件*/ printf ("sum=/d\n”, sum );} 3. 3while和do while的区别:就是while首先要判断while的表达式是否成立再 执行循环体,而do while是无论while的表达式是否成立,都会先执行一次do的 循环体。 4for语句处理循环4.1基本语法形式: for (表达式1;表达式2;表达式3) 循环体;注:f

36、or是C语言关键字,括号里的3个表达式可以是任意的表达式,当循环体内 有多条语句时,注意使用复合语句。 4. 2先计算表达式1,表达式1只执行一次,一般是赋值语句,用于初始化变量;然 后求解表达式2,假设值为零,那么退出循环,假设非零,那么执行循环体;接着执行表达 式3,然后继续判断表达式2,再执行循环体,直到表达式2不成立。 例子代码:

37、); }3for语句的特点:表达式1、2、3都可以省略,但“;”分号不能省略;表达式 可以是任意形式的表达式;循环体可以为空;for的括号里可以使用多个控制循环 的变量。 判断素数例子代码:

38、"math, h” mainO (int n, m, flag; flag=l; 为素数,否那么不是素数。初值为1*/ printf(,z\n enter n:"); scanf &n); for(m=2;m /*flag变量为旗帜变

39、量,值为1那么n /*输入n*/ /*判断n能否被2〜n-1之间的数整 /*n不 /*假设flag的值 4思考问题: 1 .求阶乘。 2 .输出斐波那契数歹h.输出水仙花数。 3 .输出如下列图形: ***** *** ** *5流程控制语句 有时我们在执行循环的过程中,可能需要在中途中断循环或者跳过本次循环,这时 我们就需要使用流程控制语句。 4. 1 break:在switch语句中我们常使用break用来跳出switch分支,其实break 同样也可以使用在循环语句中用来跳出循环。在循环中使用break让循环语句可以 有多个出口,使程序变的更加灵活。 bre

40、ak语句可以使循环在未到达结束条件时提前跳出循环。 例子代码: for(i=0;i<10;i++){printfi); if(i—O) break;} 思考问题:使用break语句修改判断素数问题。 5. 2continue:在循环过程中使用continue可以根据条件判断是否执行本次循环, 使用continue之后,后面的代码就不再执行,直接执行下次循环。但是不像break 既可以用在分支也可以用在循环中,continue只能用在循环结构中。 例子代码: for(i=0;i<10;i++){ if (i==0) continue; /*当 i=0 时不执行循环*/ prin

41、tfi); ) 思考练习:使用continue实现求1000内能被3、5、7整除的数。 ,******************************************************************** 6. 3goto:也叫无条件转向语句. 它的一般格式为:goto标号; 例子代码: #include main() {int i,s=0; i=l;loop: if (i<=100) {/*标号,表示出goto语句转向的位置*/ s+=i;i++; goto l

42、oop;printf("1+2+3+…100=%d\n”, s); } 在结构化程序设计中不提倡使用goto语句,但有时使用goto却比拟方便,比方在 一个多层的循环体中,要跳出到最外层的循环就要使用多个break,但使用got。直 接就可以实现******************************************************************************/ 附录资料:不需要的可以自行删除SHA算法的实现 C语言程序: #includc #include 〃定义 vector 数组

43、include 〃记录消息using namespace std; const int NUM = 8; 〃一个字由32比特(或者8个16进制数) const int BIT = 512; 〃消息认证码要以512比特一组 〃字常量 string HO = ”67452301”; string Hl 二"EFCDAB89”; string H2 = "98BADCFE”; string H3 = "10325476"; string H4 = "C3D2E1F0”; 〃定义SHA1(平安哈希算法)类 class SHA1 ( public: 〃将一个字

44、符串形式的字转化为vector数组 vector hex_inlo_dec(string word); 〃将vector转化为string字符串形式 string num_into_mcssagc(vcctor A); 〃两个字X和Y的逻辑”和“ vector word_AND(vector A,vector B); //两个字X和Y的逻辑”或“ vector word_OR(vector A,vector B); 〃两个字X和Y的逻辑“异或” vector word_XOR(vector<

45、int> A,vector B); 〃两个字X和Y的逻辑“补” vector word_COMPLEMENT(vector A); 〃两个字X和Y的摸2八32整数加 vector word_ADD(vector A,vector B); 〃将字X循环左移s个位置 vector ROTL(vector A,ini s); //SHA-1的填充方案,我们设定msg由ASCII码组成 vector > SHA_l_PAD(string msg); 〃将SHA-1压成以字为单位

46、vector > > compress(vector > result); 〃定义ft函数,每个ft函数都有B,C,D三个字作为输入,并产生一个字作 为输出 vector Ft(int t,vector B,vector C,vector D); 〃定义字常数K vector K(int t); 〃开始进行SHA-1(平安Hash算法)的加密 vector > SHA_1 (string msg); 〃将vector转化为string字符串形式

47、 string SHAl::num_into_mcssage(vector A) ( int i; string msg = for(i = 0;i < A.size();i++) (if(A[i] >=0&&A[il <= 9) msg += 'O' + AliJ;else if(A[il >= 10 && A[i] <= 15) msg += 'A' + (A[i] - 10); ) return msg; 〃将一个字符串形式的字转化为vector数组 vector SHA1 ::hex_into_dec(string word) ( int i;

48、 vector result(NUM,O); for(i = 0;i < NUM;i++) (if(word[i] >= 'O' && word[i] <= '9') (result[i] = word[i] - *0*; )else if(wordfi] >= 'A1 && word[i] <= 'F) (resultfil = 10 + wordfil - 'A'; ) ) return result; I //两个字X和Y的逻辑”和“ vector SHA 1 ::word_AND(vector A,vector B) (

49、vector result(NUM,O); int i; for(i = 0;i < NUM;i++) |result[i]=A[i]&B[i]; ) return result;) //两个字X和Y的逻辑”或“ vector SHA 1 ::word_OR(vector A,vector B) { vector result(NUM,O); int i; for(i = 0;i < NUM;i++) return result;〃两个字X和Y的逻辑“异或” vector SHA 1 ::word_XOR(ve

50、ctor A,vector B) ( vector result(NUM,O); int i; for(i = 0;i < NUM;i++) (result[i] = A[i] A B[i]; } return result;) 〃两个字X和Y的逻辑“补” vector SHA1 ::vvord_COMPLEMENT(vector A) ( vector result(NUM,O); int i; for(i = 0;i < NUM;i++) (result[i] = 15-A[i]; I return r

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服