C-class Week1.Day2

作业小结

ABC比大小

C语言中 算法比较快,但是调用内存会很慢,所以比较较多的时候,不见得会比交换值的快

判断闰年

if( 	!(year%4) 	&& 	(year%100) || 	!(year%400) )

判断月份几天

可以这样!

int is_leap = if( 	!(year%4) 	&& 	(year%100) || 	!(year%400) );

is_leap 代替是否加二月的那一天

出现游离的错误 会出现2-3个错误,因为中文符号一般对应2-3个字符;

水仙花数

ge = num%10;	s =num/10%10;	b=num/100;

man查找函数所在头文件

如果运用math.h---->gcc task.c -lm

判断成绩

考虑欠缺了成绩有可能是小数的情况,应该用float

查漏补缺

ls cd touch rm mv chmod catore clear sudo11

mkdir rmdir pwd whoami

find grep ifconfig ping

//ssh telent ftp tar

三大模式

gg G ngg nG vim filename.c +100

替换代码:r cw R

进入模式 I o O a A

插入模式 jj Ctrl+x Ctrl+z Ctrl+p

行底模式:set nu set nonu %s/old/new /key !cmd w q x X

C语言发展 unix Linux gcc

汇编的部分相当薄弱

c代码变成可执行过程

预处理,查看宏定义的替换结果,gcc -E 生成.i文件

编译,理解c戴梦得的底层工作原理 i++的工作原理 gcc -S 生成.s文件

汇编,生成目标文件.o结尾,生成代码库,静态库,共享库。 gcc -c 生成 .o 文件

链接 ,多文件编程的基础 gcc a.o

-wall 尽可能多的产生警告

-Werror 警告编程错误

gcc常用参数

-E -S -c -o -I -l -D(命令行定义宏)-DDBUG

.h .h.gsh .c .o .a .so

数据类型

bool <bool true

分支语句补充(开关语句)

​ switch(n)//可以是一个数值,表达式,运算结果一定是一个整数否则报错

{

​ case val: //val 必须是常量 否则就报应该是一个整常量

​ printf(“123”);

​ break;

​ //如果所有的case 后面都有break,就形成了多分支结构

​ default:

​ //如果前面的都不满足就执行edefault、功能类似else

​ 都记得加break; 因为可能default不一定在行尾,会导致通铺

}

switch 不能于continue 配合使用

练习1:输入一个月份,判断季节

可以写成

case 1:case 2:case 3: // 让1-3开关打通~

case 1 … 3: // 只能在vim上用 表示一段范围

练习2:输入一个月份,忽略闰月,判断改月多少天

return 0; 结束 不是exit()

for循环语句体

​ 循环是一种让一段代码反复执行,从而达到你想要的结果

for是一种比较灵活而且危险(相比较其他语句循环来说)

一般使用一个变量来引导这个循环的运行,这个变量叫做循环标量。

index 索引 i

for([1];[2];[3])

{

​ [4];

}

1、可以给循环变量赋值,C99也可以在此定义循环变量!!!C89不行会报错

所以在配置文件vimrc中添加 gcc -std=gnu99 (gnu99包括了gnu98)

2、判断循环是否到达边界 边界值如果给个负数就会死循环

4、当 2 满足后 先去执行 4 ,也叫做循环体

3、当完成循环体后再做3,改变循环变量,防止出现死循环,一般对循环体变量进行自加减

顺序是 1----2----4----3 第二轮-----2----4----3。。。。。。

大括号的问题:

​ 1、没有加大括号,只会默认把下面一行代码作为循环体,如果循环语句只有一句,大括号可以不加

​ 一般商业代码都要求加上大括号,都不会省略

​ 2、建议上下对齐(方便查看是否缺少大括号)

for循环的多种写法:

​ for(;;)== while(true)==while(1)

​ for(int i=0;i<10li++)

{

}

while语句:

​ while(条件)//当条件为真,执行循环体,为假时结束

{

​ //循环体

}

while是for循环的精简版本,for循环负责明确循环次数的问题

而while循环只知道结束条件,而不限定循环次数的问题。也就是pat的多测试例!!

do while语句

do

{

​ //循环体

}while(循环条件); //分号不能少

先执行循环语句,在判断循环条件,该循环语句至少执行一次

适合先干活,在检查的问题 特殊的情况

例如:输入密码 先输入再检查、文件读写

循环嵌套:

​ 循环语句中有包含了循环语句,在二维数组中嵌套很多!

外层循环执行一次,内层循环执行全部。

练习三:找出所有三位水仙花数

练习四:输入一个正整数判断是否是素数

练习五:输入一个整数,分解显示 例如-1234 —>- 1 2 3 4

练习六:输入一个正整数,判断是否是回文数12321 123321 1234321

int num = 0; new =0;

int old = num;

while(old)

{

	new = new*10 + old%10;

	old /= 10;

}

if(old == new)

{

	yes 

}

这题就是自己想太复杂了,不用判断第一个和n个,2和n-1个。。反过来输出判断是否一样就可以了!

跳转语句

goto

它可能会破坏已经设计好的分支语句循环语句,因此绝大多数公司都是禁止使用的。

在特定的场景下很有用:适用于硬件编程的异常处理!

不使用循环语句解决一些问题~~~,只能用goto

标签名 temp1:

​ goto 标签名;

在函数内,不能再函数外调用;

练习7:不适用循环语句计算n的阶乘

先用for循环写一遍

再次用goto实现 循环体内容 和 for语句的自加减内容

Break

​ 1、在switch语句中,用于关闭执行开光

​ 2、在循环语句中,用于跳出一层循环

Continue

​ 结束本次循环,进入下一次循环

Return

​ 1、返回一个数据给函数的调用者

​ 2、结束函数的执行

练习8:不使用循环语句来计算出前n项的斐波那契数列

上一篇:2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165301


下一篇:20165324 《网络对抗技术》week1 Kali的安装与配置