黑马程序员技术交流社区
标题:
笔记分享,C语言
[打印本页]
作者:
徐荘
时间:
2016-7-31 23:44
标题:
笔记分享,C语言
反馈:
1.进展好像慢了点
2.希望能抽时间把前面知识弄一遍
3.后面的知识别讲太快了,越来越难了
4.听懂了,不练就忘掉了
5.最后几个while的应用场景比较懵逼
知识回顾 做个练习:20
用while循环求100-999之间的水仙花数
提示:水仙花数:各个位上的数子的立方和==这个数本身
比如:123 ,1*1*1 + 2*2*2 + 3*3*3 = 1+8+27 !=123 所以123不是水仙花数
123:
123%10 -->3
123/10%10-->2
123/100%10-->1
int num = 100;
while(num < 1000){
int ge = num / 1 % 10;
int shi = num / 10 % 10;
int bai = num / 100 % 10;
if((ge*ge*ge + shi * shi * shi + bai * bai * bai ) == num){
printf("num = %d\n",num);
}
num++;
}
2.break:终止当前循环
continue:终止本次循环 进行下一次循环,用于加速循环
#pragma mark - 02 do-while循环结构的简单使用 [掌握]
1.do...while循环的语法:
do{
循环体;
}while();//此处有一个分号
注意:do-while循环最后面必须有一个分号
2.do-while循环结构和while结构的最大区别是什么?
while:当型循环
do-while:直到型循环,傻瓜式循环
无论如何,do-while 至少会执行一次
并不是说 无论如何 do-while 一定比while循环多执行一次
3.练习一下 打印 5次 "吃饭啦\n"
int num = 5;
while(num >0){
printf("吃饭啦\n");
num--;
}
int num = 5;
do
{
printf("吃饭啦\n");
num--;
}while(num > 0);
4.一个特殊的例子
//while
int main()
{
int i = 5;
while (i < 5) {
printf("hello world\n");
i--;
}
return 0;
}
//do - while
int main()
{
int i = 5;
do{
printf("hello world\n");
i--;
}while (i < 5);
return 0;
}
5.一般来说 do-while 什么时候使用:当循环体必须执行至少一次的时候
#pragma mark - 03 课堂练习 [掌握]
此知识点的复习时见第6天视频笔记/03 课堂练习.pdf
"可能考到"
######pragma mark - 04 do-while循环和while循环的区别 [掌握]
1.笔试考的很少,但是点招面试经常会问
问题:xxx和yyy的区别?
while和do-while的区别
1>相同点: 都是循环结构,目的是将一段代码 重复的执行指定次数
2>不同点:
1)do-while循环结构是先执行后判断
while循环结构是 先判断 再执行
2)在第一次判断条件都不成立的情况下
do-while循环会执行一次
而while循环1次也不会执行
do-while 循环结构至少执行1次,而while循环结构可能一次都不执行
3)什么时候使用?
1.当循环体无论如何至少要执行一次的时候,那么可以使用do-while循环
2.当循环体有可能一次都不执行的时候,那么就使用while循环
在实际开发中,do-while用的比较少
#pragma mark - 05 for循环的简单介绍 [掌握]
1.格式
for(一般来说是定义性语句,简称初始化表达式;判断条件;曾量语句)
{
循环体;//循环体 后面 不再需要i++,j++这些语句
}
2.while循环和for循环之间的转换
1>用for循环打印10次hello world
int main()
{
for (int i = 0; i<10; i++) {
printf("hello world\n");
}
return 0;]]
}
2>while循环打印10次hello world
int main()
{
int i = 0;
while (i < 10) {
printf("hello world!\n");
i++;
}
return 0;
}
3>for循环转换成while循环
int main()
{
int i = 0
for (;i<10;) {
printf("hello world\n");
i++
}
return 0;
}
#pragma mark - 0_06 for循环和while循环对比 [掌握]
此知识点的复习时见第6天视频笔记/10 for循环和while循环对比.pdf
#pragma mark - 0_07-08 课堂练习 [掌握]
练习1:
1.利用for循环求1-100之间的偶数的累加和
int sum = 0;//求和的变量
for (int i = 1; i < 101; i++) {
if (i % 2 == 0) {//判断这个数 是不是偶数
// printf("%d ",i);
//把打印去掉 直接加到某一个容器
sum+=i;
}
}
printf("sum = %d\n",sum);
2.利用for循环求100-999之间的水仙花数
for (int i = 100; i < 1000; i++) {
//水仙花数: 各个位上的立方和 等于本身的数
/*
456:
个位:456%10 -->6
十位:456/10%10--->5
百位:456/100 --->4
*/
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if ( (ge*ge*ge + shi*shi*shi + bai*bai*bai) == i) {
printf("%d ",i);
}
}
3.求一个数的n次方[了解]
引入一个头文件: #include <math.h>
使用这个函数:pow(第一个数,第二个数);
比如 要求5的三次方, 那么应该是 pow(5,3);
#pragma mark - 0_09 使用for循环注意 [掌握]
1.注意事项
1)如果在第三个表达式中 已经修改了循环增量的值
那么就不在循环体中修改循环增量的值了
2)第三个表达式后是没有分号的
3)三个表达式的位置是固定的,第1个是初始化表达式 第2个是循环条件
第3个是循环后改变增量的表达式
4)三个表达式都可以省略,但是分号不能省略
如果第2个表达式省略,那么循环条件默认就是成立的
5)这个表达式,可以写任意的c语句
"注意": 只能有三个表达式,中间只能有两个分号
在绝大多数的情况下,for循环都是像下面方式使用的
for(int i = 0;i < xxx;i++){
}
2.关于省略大括号
1)if(判断语句){
语句块1;
}
"注意":如果语句块1,就一句代码 那么这个大括号可以省略
比如:
if(5 > 3)
printf("哈哈哈\n");
else
printf("呵呵\n");
建议:都不省略
2)for循环的循环体只有一句的时候 也可以省略 但是也不建议省略
3)单独的一个分号 ";" 也是一个语句 空语句
#pragma mark - 0_10 while循环可以做的事情for循环一定也可以做 [掌握]
此知识点的复习时见第6天视频笔记/0_10 while循环可以做的事情for循环一定也可以做.pdf
"强调
使用while循环实现的 一定可以使用for循环来实现,反之亦然
#pragma mark - 0_11 while循环和for循环的使用建议 [掌握]
1.感觉while好实现就用while 感觉for好实现就用for
但是一般来说 如果是明确循环次数的 一般用for
如果次数不明确的 一般用while
2.死循环[了解]
while(1){}
for(;;){}
#pragma mark - 0_12 嵌套循环 [掌握]
最低要求:必须能看懂别人写的嵌套循环代码,并分析出结果
1.什么是嵌套循环
一个循环的循环体中 含有另外一个循环
2.嵌套循环的特点
外层循环执行一次,内存循环执行所有次
3.嵌套循环的使用场景
一件事要完成一次 必须完成另外一件事n次
要打印
/*
++++++
++++++
++++++
++++++
*/
for(int i = 0;i < 4;i++){//打印一行
for(int j = 0;j < 6;j++){
printf("+");
}
printf("\n");
}
"==========================以下内容听懂即可==============================="
#pragma mark - 0_13-0_15 打印三角形状[听懂]
1.
*
**
***
****
*****
******
*******
********
*********
**********
//推理过程
//先打印 10行10列的*
#include <stdio.h>
int main()
{
for(int i = 0; i< 10;i++)
{
for(int j = 0; j< 10;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
规律:遇到几行几列的图形 两层for循环
外层for循环控制的是行
里层的for循环控制的是列
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
/*
分析:
i的值 和 星星这个数
0 1
1 2
2 3
i i+1
*/
for (int i = 0; i < 10; i++) {
//不管i是几 经过分析 要打印的*的个数 是i+1个
//那么j从0开始循环i+1次 所以条件是j<i+1
for (int j = 0 ; j < i+1; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
#pragma mark - 0_13-0_16 打印倒三角形状[听懂]
2
**********
*********
********
*******
******
*****
****
***
**
*
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
/*
分析:
i的值 星星的个数
0 8
1 7
2 6
3 5
i 8-i
*/
for (int i = 0; i < 10; i++) {//8行
//不管i是几 我们分析出来 打印8-i个星星
//j是从0 开始 循环8-i 所以 j<8-i
for (int j = 0; j < 10 - i; j++) {//8列
printf("*");
}
printf("\n");
}
return 0;
}
#pragma mark - 0_13-0_16 打印三角形状3[听懂]
打印
*
**
***
****
*****
******
演变成下面图形,只要把"+"号 换成空格就行了
+++++*
++++**
+++***
++****
+*****
******
for (int i = 0; i < 6; i++) {//8行
//++++ **
/*
i +的个数 *的个数
0 5 1
1 4 2
2 3 3
i 5-i i+1
*/
//不管i是几 只要打印+号 5-i个 星号 i+1个就可以了
for (int j = 0; j < 5-i ; j++) {
printf("+");
// printf(" ");
}
for (int k = 0; k < i+1 ;k++ ) {
printf("*");
}
printf("\n");
}
#pragma mark 0_16 九九乘法表[听懂]
打印一下图形:
图形1:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
for (int i = 1; i < 6; i++) {//5行
//不管i是几 只要打印i个就可以了
//这里的j是从1开始 循环i次 所以需要j<i+1
for (int j = 1; j < i+1; j++) {//5列
//为什么打印i呢?
//经过分析 第i行 打印的值就是i
printf("%d ",i);
}
printf("\n");
}
图形2:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
for (int i = 1; i < 7; i++) {//6行
//不管i等于多少,只要打印i个就可以了
//因为j是从1开始的 要循环i次 那么j<i+1
for (int j = 1; j < i+1; j++) {//6列
printf("%d ",j);
}
printf("\n");
}
九九乘法表
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
/*
i 个数
1 1
2 2
i i
分析:
j的值 *号左边的值
1 1
2 2
3 3
j j
i的值 *号右边的值
1 1
2 2
3 3
i i
总结:不管i和j等于多少
*号左边都是 j
*号右边都是 i
j*i
*/
for (int i = 1; i < 10; i++) {
//不管i是多少,经过分析 要打印的式子是i个
//因为j是从1开始的 要循环i次 那么j<i+1
for (int j = 1; j < i+1; j++) {
printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
"==========================以上内容听懂即可==============================="
#pragma mark - 01 goto跳转语句 [听懂]
"强调
goto 跳转语句,了解一下就行,开发中不推荐使用,稍有不慎容易出现死循环
#pragma mark - 02 break与continue补充 [掌握]
1.break:代表"立即"结束当前循环,无论在哪些循环结构中都是立即马上结束,后面的循环体中代码都不会执行
2.continue:代表结束本次循环,而执行下一次循环,用于加速循环
在while循环中 结束本次循环体,立即回去判断循环条件 如果成立再执行循环体
比如:
int i = 0;
while(i < 5){
if(i==2){
continue;
//遇到continue 会结束本次循环 回去判断循环条件
//所以 i++不会执行
}
i++;
}
在for循环中 也是结束本次循环体,但是
for(int i = 0;i < 5;i++){
if(i == 2){
continue;
//遇到continue 会结束本次循环,但是会执行i++,然后在判断条件
}
}
面试题:
int main()
{
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
//这里写一段代码,结束外层循环
i = 10;
break;//注意,不会再执行j++
}
}
return 0;
}
#pragma mark - 03 函数的基本使用 [掌握]
1.函数是什么?
把一段特殊功能的代码封装到一个函数块中
2.函数定义的语法
1>位置:
必须一定要在main函数之外,直接写在源文件下
2>语法:
返回值类型 函数名字([参数列表])
{
//函数体:可以有一句 可以多句 甚至可以没有
}
void showLogo()
{
//函数体:要打印的logo
}
3.函数的调用:
1>CPU只会执行main函数中的代码
2>语法:
函数名字();
作者:
sunshine429
时间:
2016-7-31 23:51
感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2