C语言学习 从入门到进阶
Posted Jack Chao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学习 从入门到进阶相关的知识,希望对你有一定的参考价值。
循环继续的学习。
这边我们学习一下循环的嵌套;
我们之前学习过条件语句的嵌套,其实循环语句的嵌套也是一样的。
我们看一个代码:
#include<stdio.h>
int main()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
printf("%d ", j);
}
printf("\\n");
}
return 0;
}
这个语句大家在自己电脑当中实现一下就会像我一样得到如图的结果:
那是不是只有相同的循环才能相互嵌套呢?
其实不是的。嵌套的两个循环其实可以不一样的。
大家可以试试。
那么学习循环之后我们可以干什么呢?
那我们来看看下面的这两个代码:
#include<stdio.h>
int main()
{
printf("haha\\n");
printf("haha\\n");
printf("haha\\n");
printf("haha\\n");
printf("haha\\n");
printf("haha\\n");
return 0;
}
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i < 6; i++)
{
printf("haha\\n");
}
return 0;
}
这两段代码的输出都是一样的,可是放在实际操作的时候,我们会更喜欢什么呢?
答案大家可以发在评论里。
循环就是用来解决操作性相类似的拥有冗余的操作。
这个比较绕口,其实就是,当我们遇到操作想类似的,操作次数很多的时候就要用到循环。
我们现在拥有三把宝剑,分别针对三种不同的怪兽。什么时候用什么宝剑就显得至关重要了。
这边是我总结的几个方法:
1.知道循环次数的用for语句。
2.知道结束条件的用while。
3.do-while比较少用。
那我们来看看几道题目来看看循环的魅力
这道题目我们看到之后首先要知道,我们要用到什么宝剑。
利用上面的口诀。
我们要计算n的阶乘,我们是不是知道循环的次数。n的阶乘就是n个数相乘,那就是循环n次。
知道用什么宝剑之后,我们就要先写个模板
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
for (i = 1; i <= n; i++)
{
}
return 0;
}
这样的模板写好之后,我们就要修饰了。首先我们要获得一个数字,就是n,
那我们就要用到scanf来帮忙。
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
}
return 0;
}
之后我们就要丰满一下for的肚子对不对。光有骨架没有肉就不好了。
那我们计算阶乘是怎么算的
是不是123*……;
那我们用到for循环是可以遍历所有数字的,我们要做的就是把他们乘起来。
我们要算3的阶乘。我们可以先计算2的阶乘然后乘三。我们算2的阶乘,我们可以先算1的阶乘然后乘2.
那我们可以先定义一个sum变量。用来保存之前计算过的阶乘。
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
int sum = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
sum = sum * i;
}
printf("%d", sum);
return 0;
}
这样子我们就可以完成这个题目了。
第二题:
那这道题怎么算呢?
我们可以利用之前的思路。
我们计算好1!之后,保存,计算好2!保存,计算好3!……然后把他们就加起来。是不是就解决了?
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
int sum = 1;
int end = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
sum = sum * i;
end = end + sum;
}
printf("%d", end);
return 0;
}
这样这个题目也轻松解决了。学会的call 1 。
那我们继续。
这个题目怎么解决?
我们可以想想,我们要找这个数字,我们是不是可以先遍历一遍数组就好了。
#include<stdio.h>
int main()
{
int a[10] = { 0 };
int i = 0;
for(i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
int n = 0;
scanf("%d", &n);
for (i = 0; i < 10; i++)
{
if (a[i] == n)
{
printf("找到了,下标为:%d", i);
}
}
return 0;
}
但是我们是不是忽略了一个点,这个数组是有序的数组。那比如我们要找的数字在很后面,我们是不是要花很多时间。
那我们该怎么让效率更高呢?
我们是不是可以这样,我们先找最中间的数字和我们要找的数字比较,如果比中间的数字大或者小,我们就可以把范围缩小。那我们是不是可以更快解决。那我们应该用什么宝剑来呢?
我们利用口诀,我们知道循环的次数吗?
是不是不知道,我们只知道我们找到之后我们的程序就结束了,那我们就用while这个循环模式。那我们在没找到的时候,我们的中间下标和左右的下标是怎么变化的呢?
代码如下:
#include<stdio.h>
int main()
{
int a[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
int n = 0;
scanf("%d", &n);
int right = 9;
int left = 0;
int mid = (right + left) / 2;
while (left < right)
{
if (a[mid] == n)
{
break;
}
else if (a[mid] < n)
{
left = mid - 1;
}
else
{
right = mid + 1;
}
mid = (left + right) / 2;
}
printf("%d", mid);
return 0;
}
这题学会了吗?
为了奖励大家
我给大家一个代码,
这个代码可以用于整蛊的。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 60");
while (1)
{
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\\n请输入:>");
scanf("%s", input);
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
break;
}
}
return 0;
}
这个代码可以让你的电脑关机,除非你输入“我是猪”;好啦就到这吧。
休息
以上是关于C语言学习 从入门到进阶的主要内容,如果未能解决你的问题,请参考以下文章