收藏 分销(赏)

C语言学习笔记.docx

上传人:二*** 文档编号:4513067 上传时间:2024-09-26 格式:DOCX 页数:38 大小:57.93KB
下载 相关 举报
C语言学习笔记.docx_第1页
第1页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

2、f, area=%fn,z, 1, area);)注:r, 1, area是float类型的变量,程序运行中可改变,float是c语言中的一种 数据类型。3求两个数的和。ttinclude sldio. hmciinO int i, j, sum;int Add(int m, int n) ;/*声明函数*/0,01,0,00, 1,0逻辑或运算符例子代码:ttinclude “stdio. hmain() int m, n;int k;k=(m=0)|(m=l);或运算的计算规那么*/printf (%d, %dn”, in, k);k=(m=l) | | (m=0);printf (“为d

3、, %dn”, m, k);k=(m=2)|(m=l)|(m=0);算的规那么测试*/printf (与d,与dn”, m, k);m=0, k=0;n=+m|+k;printf (%d, %d, %dn”, k, m, n);m=0, k=0;n=+k|+m;printf (*%d, %d, %dn*, k, m, n);+m|+k+*/程序运行结果:/*逻辑/*多层逻辑或运/*测试表达式+k |+m与1, 11,12,10, 1, 11,0, 1逻辑与和逻辑或混合运算例子代码:#include “sldio. h mainO int m, k;/*表达式理解为(m=0) I I (m=l

4、)&(m=2)*/printf (,z%d, %dn,, rn, k); k=(m=2)|(m=0);(m=2)| (m=l)&(m=0)*/ printf (%d, %dn”, m, k); k=(m=2)&(m=l) | | (m=0);(m=2)&(m=l)|(m=0)*/ printf (“为d, %dn”, m, k); k=(m=0)&(m=l) | | (m=2);(m=0)&(m=1)|(m=2)*/ printf (“为d, %dnz,, m, k);/*表达式理解为/*表达式理解为/*表达式理解为程序运行结果:2,12,11,12, 14条件运算符和条件表达式4.1条件运算

5、符?是C语言中唯一的的三目运算符,优先级高于赋值运算表达式语法:表达式1?表达式2:表达式3其执行顺序是:先求解表达式1,假设为1那么执行表达式2,否那么执行表达式3。例子代码:ttinclude stdio. hmain() charch;scanf (枇,&ch);/*输入一个字符,赋给变量ch*/ch=(ch= AJ &ch=9%5+6%5) ?l:0;/*(9+6)%5 =9%5+6%5)等价于(9+6) %5)=(9%5 + 6%5)其值为 0*/printf(* x=%dn”,x);y+=z=x+3;/* y+=z=x+3 等价z=x+3, y=y+z*/printf(* y=%d

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

7、while、do while。1. 3跳转语句:跳转语句的作用主要是让程序从止常执行的走向中跳转到其它局部, 常见跳转语句如下间断语句:break、continue。转向语句:goto。Return 语句:return。L4复合语句:由一些语句组成,放在一个大括号中形成一个整体,句型如下:(语句1;语句2:语句n:C语言语法规定,复合语句作为条语句来处理。例子代码:ttinclude stdio. hmain() int a=I1, b=21, c=31;printf (a=与dtbKdtc=%dn”, a, b, c);/*复合语句开始*/*复合语句结束*/(int b=22;float c

8、=3. 3;printf (,/a=%dtb=%dtc=%fn/,, a, b, c);a二 b;printf (,/a=%dtb=%dtc=%dn/,, a, b, c);)输出结果如下:a=l1 b=21 c=31a=ll b=22 c=3. 300000a=22 b=21 c=31上面的代码可以和下面的代码比照运行:ftinclude stdio. hma in() int a=ll, b=21, c=31;printf (/,a=%dtb=%dtc=%dn,/, a, b, c); int a=l;int b=22;int b=22;/*复合语句开始*/float c=3. 3;pri

9、ntf(a=%dtb=%dtc=%fn”,a,b,c);a=b;/*复合语句结束*/printf (,/a=%dtb=%dtc=%dn,, a, b, c);程序运行结果:a=ll b=21 c=31a=l b=22 c=3. 300000a=ll b=21 c=31可以看到,在复合语句中声明的变量只在复合语句中起作用。1.5 空语句:空语句一般指只有一个分号占位,一般用在程序设计初期,表示待编 写的函数或代码。1.6 各种语句整体介绍:ttincludc stdio. h/*声明语句*/*控制语/*复合/*表达式语/*声明语句*/*控制语/*复合/*表达式语main() int a=10,

10、b=20, c; if (ba)句 */;语句 */c=a+b;句 */*函数调用语printf (飞d”, c);)else;/*空语句*/2库函数的调用与输入输出的关系2.1 标准的库函数是存放在函数库中的,因此使用时必须要告知计算机,说明函数 库属于哪个库,此过程为函数的声明,例如:ft include math, h /*标准数学函数的声明*/Main() y=sin(x); /*库函数的调用*/)Include是C语言中的特定字,是包含的意思,包含的文件一般为.h,称头文件。2. 2在C语言中提供了一些输入输出的标准库函数,例如printf和scanf,使用时 必须将函数库的头文件s

11、tdio.h包含进程序中。3格式化输出Iprintf函数:它的作用是向终端输出数据。函数格式:printf (格式控制语句:输出项1,输出项2);例如:printf(%f”,j);输出浮点类型的变量j, %f为控制符。常见的格式控制符::刎一十进制整型,%o一-八进制无符号整型,f输出实数,%s一字符串,猊一输出 单个字符等。4字符输出1字符输出可以利用putchar函数,在stdio. h中已经定义。例子代码:ftinclude stdio. hmciinO char a, b, c;a= C;b= A;c=T;putchar(a);putchar(b);putchar(c);putchar

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

13、*从键盘上带回显的读入一个字符送给字符变量ch*/putchar(c);/*输出该字符*/putchar(ch);6. 2getchar()函数:作用是从终端输入一个字符。getchar函数将空格符、制表符、和换行符都作为有效字符录入。例子代码:ftinclude stdio. hscanf(*%dsum = Add(i, j);/*调用函数*/printf (Xn sum=%d n, sum);int Add(int m, int n) /*函数*/return m + n;注:scanf C%d %d, &i,&j);中的&是取地址运算符。通过以上三个例子的总结:1. 一个c语言源程序可以

14、由一个或多个源文件组成,每个源文件可以由一个或多个 函数组成,一个源程序无论有多少个源文件或函数,都只能有一个且只能有一个 mian函数。由引入的指令为预处理指令。4常见语法规范。标示符:程序中的变量名、函数名、标号等统称为标示符。C语言规定标示符只能 由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。1常见数据类型Int、short、long unsigned% float、double、char、enum、void、指针类型、数 组类型、struct、union 等。基本数据类型:Int short long、unsigned、float、double、char enum 都属

15、于基本类型。特点是其值不可再分。2常量。常量定义方式:fidofino标示符常量main () char cl,c2;cl=getchar();c2=getchar();putchar(cl);putchar(c2);*/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=(-

16、b-sqrt(p)/(2*a);printf(xl=%f, x2=%fn”, 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=%dn”, m);c语言学习笔记(六)一分支程序设计1使用if语句设计选择程序:if语句一般分为两种方式:单条件单分支、和单条 件双分支if语句。1. 1单条件单分支的if语句一般语法:If (表

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

18、0,那么执行语句B, 条件不成立那么执行Co例子代码:i nclude stdio. hmainO(double score;printf(,zinput the score:);scanf (“机f”, &score);if (score=60) /*成绩开始判断*/printf (npass!n) ;/*及格说明分支*/elseprintf (*fail! n);printf (,zprogramming is over!n) ;/*和判断语句并列的下一条语句*/ 2嵌套的if语句2. 1嵌套常用格式:第一种:If(表达式)语句else if(表达式)语句第二种:If(表达式)语句else

19、 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 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)2)/*如果是闰年且月

20、份大于2,总天数应该加一天*/sum+;printf (,zIt is the %dth day. ”, sum);1循环语句1循环语句主要包括三种:while、do-while for。2while语句处理循环Iwhi le语句基本形式:While (表达式)循环体语句2. 2执行流程:首先计算while表达式的值,当非零时执行循环体内的语句,执行 完之后继续判断while表达式的值,如果非零,继续执行循环体,直到表达式值为 零时,跳出循环,执行后续的语句。例子代码:span style=,font-size: 18px;include “stdio. hmain () int i, sum

21、;i=l;sum=0;while ( i=100 )/*累加的数i小于或等于终止数n就循环累加,否那么结束循环*/ sum=sum+i;i+;printf (sum=%dn”, sum);注:使用sum和i时一定要赋初始值。2. 3while语句使用注意:循环体要是多条语句必须使用符合语句形式;在循环体表达式中一定要有控制循环趋向结束的语句,否那么循环将无限进行;循环体可为空;2. 4whilc 实例:a+aa+aaa+.代码:span style=zfont-size: 18px;include “stdio. hmain()(int a, x;long sum=0, n=l, tn ;sc

22、cinf &a, &x);tn=a;while(n=x)/*n 超过 x 那么中止*/sum+=tn;tn=tn*10+x;n+;)printf(result is %ld”, sum);思考问题:求阶乘。3do while语句处理循环常量分为:直接常量和符号常量。例题:求任意圆的周长和面积,使用常量定义:n。ttinclude stdio. hftdefine PI 3.1415926ma 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);)注:常量

23、值不能被修改;习惯上常量名大写,变量名小写:整型常量(整型):1 .十进制整常数:09数字,无前缀等,也就是整常数。例如:237、-783、65535;.八进制正常数:以0为前缀,数值为0、7,八进制通常是无符号数。例如:023;2 .十六进制整常数:前缀为0X或Ox,由09, af或AF组成(不区分大小写), 例如:0X23A、OXAA、OxFFFO;3 .长整型常量:使用L或小写1作为后缀,例如:123L (十进制123)、0121 (八 进制10) 0xl5L (十六进制 21)。3. Ido while语句基本形式: do (循环体语句while(表达式);3. 2执行流程:先执行do

24、后面的循环体,然后计算while里的表达式值,当值非零 时继续执行do的循环体,当值为零时,跳出循环。例子代码:span style=wfont-size: 18px;include stdio. hmain ()(int i, sum;i=2;sum=0;do/*先执行循环*/(sum+=i;i+=2;)while(i=100);/*判断条件*/printf (sum=/dn”, sum );3. 3while和do while的区别:就是while首先要判断while的表达式是否成立再 执行循环体,而do while是无论while的表达式是否成立,都会先执行一次do的 循环体。4for语

25、句处理循环4.1基本语法形式: for (表达式1;表达式2;表达式3)循环体;注:for是C语言关键字,括号里的3个表达式可以是任意的表达式,当循环体内 有多条语句时,注意使用复合语句。4. 2先计算表达式1,表达式1只执行一次,一般是赋值语句,用于初始化变量;然 后求解表达式2,假设值为零,那么退出循环,假设非零,那么执行循环体;接着执行表达 式3,然后继续判断表达式2,再执行循环体,直到表达式2不成立。例子代码:span style=zfont-size: 18px;include “stdio. hmain()(int i,sum;sum=0;for( i=l; i=100; i+)s

26、um+=i;printf(sum=%d”, sum);3for语句的特点:表达式1、2、3都可以省略,但“;”分号不能省略;表达式 可以是任意形式的表达式;循环体可以为空;for的括号里可以使用多个控制循环 的变量。判断素数例子代码:span style=,/font-size: 18px;include “stdio. hinclude math, h”mainO(int n, m, flag;flag=l;为素数,否那么不是素数。初值为1*/printf(,zn enter n:);scanf &n);for(m=2;mn&flag;m+)include math, h”mainO(int

27、 n, m, flag;flag=l;为素数,否那么不是素数。初值为1*/printf(,zn enter n:);scanf &n);for(m=2;mn&flag;m+)除*/if (n%m-0)flag=0;是素数*/if(flag=l)没有变化,那么为素数*/printf (n%d is a prime number./,, n);elseprintf(Xn %d is not a prime number. ”, n);/*flag变量为旗帜变量,值为1那么n/*输入n*/*判断n能否被2n-1之间的数整/*n不/*假设flag的值4思考问题:1 .求阶乘。2 .输出斐波那契数歹h.

28、输出水仙花数。3 .输出如下列图形:*5流程控制语句有时我们在执行循环的过程中,可能需要在中途中断循环或者跳过本次循环,这时 我们就需要使用流程控制语句。4. 1 break:在switch语句中我们常使用break用来跳出switch分支,其实break 同样也可以使用在循环语句中用来跳出循环。在循环中使用break让循环语句可以 有多个出口,使程序变的更加灵活。break语句可以使循环在未到达结束条件时提前跳出循环。例子代码:for(i=0;i10;i+)printfi);if(iO) break;思考问题:使用break语句修改判断素数问题。5. 2continue:在循环过程中使用co

29、ntinue可以根据条件判断是否执行本次循环, 使用continue之后,后面的代码就不再执行,直接执行下次循环。但是不像break 既可以用在分支也可以用在循环中,continue只能用在循环结构中。例子代码:for(i=0;i10;i+)if (i=0) continue; /*当 i=0 时不执行循环*/printfi);)思考练习:使用continue实现求1000内能被3、5、7整除的数。,*6. 3goto:也叫无条件转向语句.它的一般格式为:goto标号;例子代码:#include main() int i,s=0;i=l;loop: if (i=100) /*标号,表示出got

30、o语句转向的位置*/s+=i;i+;goto loop;printf(1+2+3+100=%dn”, s);在结构化程序设计中不提倡使用goto语句,但有时使用goto却比拟方便,比方在 一个多层的循环体中,要跳出到最外层的循环就要使用多个break,但使用got。直 接就可以实现*/附录资料:不需要的可以自行删除SHA算法的实现C语言程序:#includc #include 定义 vector 数组#include 记录消息using namespace std;const int NUM = 8; 一个字由32比特(或者8个16进制数) const int BIT = 512; 消息认证码

31、要以512比特一组字常量string HO = ”67452301”;string Hl 二EFCDAB89”;string H2 = 98BADCFE”;string H3 = 10325476;string H4 = C3D2E1F0”;定义SHA1(平安哈希算法)类class SHA1(public:将一个字符串形式的字转化为vector数组 vector hex_inlo_dec(string word);将vector转化为string字符串形式 string num_into_mcssagc(vcctor A);两个字X和Y的逻辑”和“vector word_AND(vector

32、A,vector B);/两个字X和Y的逻辑”或“vector word_OR(vector A,vector B);两个字X和Y的逻辑“异或”vector word_XOR(vector 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码组成vectorvector SHA_l_PAD(string m

33、sg);将SHA-1压成以字为单位vectorvectorvector compress(vectorvector result);定义ft函数,每个ft函数都有B,C,D三个字作为输入,并产生一个字作 为输出vector Ft(int t,vector B,vector C,vector D);定义字常数Kvector K(int t);开始进行SHA-1(平安Hash算法)的加密vectorvector SHA_1 (string msg);将vector转化为string字符串形式string SHAl:num_into_mcssage(vector A) (int i;string m

34、sg =for(i = 0;i =0&Ail = 10 & Ai = 15)msg += A + (Ai - 10);)return msg;将一个字符串形式的字转化为vector数组 vector SHA1 :hex_into_dec(string word) (int i;vector result(NUM,O);for(i = 0;i = O & wordi = A1 & wordi = F)(resultfil = 10 + wordfil - A;)return result;I/两个字X和Y的逻辑”和“vector SHA 1 :word_AND(vector A,vector B

35、) (vector result(NUM,O);int i;for(i = 0;i NUM;i+)|resulti=Ai&Bi;)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(vector A,vector B) (vector result(NUM,O);int i;for(i = 0;i NUM;i+)(resulti = Ai A Bi;return result;)两个字X和Y的逻辑“补”vector SHA1 :vvord_COMPLEMENT(vector A) (vector result(NUM,O);int i;for(i = 0;i NUM;i+)(resulti = 15-Ai;Ireturn r

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 开发语言

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

关于我们      便捷服务       自信AI       AI导航        获赠5币

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

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

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

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服