C语言学习第四章
今天学习C语言循环结构,为什么要用循环呢?因为有时候我们对一堆的数字进行重复的处理的时候要重复的编写一些相同或者差不多的代码,让程序显得很臃肿,而且写着也麻烦,如果用循环来写的话能简化很多,出错的话也更容易查找,程序也更一目了然。
那么循环要怎么来用呢?又该在哪里开始用呢?首先我们要知道循环主要有三种: while循环,do…while循环和for循环。
while循环:先判断条件是否成立,如果条件成立将执行其下的循环体,如果条件不成立就不执行,要注意while循环有可能一次都不执行哦。
语法:
while(条件) //括号内的循环条件要注意,写错的话就不循环了
{
//循环体; //这就是要循环执行的指令,一遍一遍又一遍...直到循环结束。
结束方法; //每个循环都要设置有一个条件,当满足这个条件的时候就结束循环,如果没有这个条件的话循环会一直走直到永远...形成一个死循环。
//所以千万不要漏写结束的条件哦,除非你是故意想让它死循环。
}
示例:打印100遍"我是最棒的!",没事就打印一次可以激励自己哦,自我催眠一下哈哈。
int i=1; while(i<=100){ printf("第%d遍:我是最棒的!\n",i); i++; } |
示例2:计算0~100的偶数和
int i=0,sum=0; while(i<100){ if(i%2==0){//偶数 sum+=i; } i++; } printf("0~100之间的所有偶数和为:%d\n",sum); |
示例2:计算0~100的奇数和
int a=1;
int b=0;
while(a<=100){
if(a%2!=0){
b+=a;
}
a++;
}
printf("奇数和是%d",b);
do...while循环结构:先执行循环体,再判断条件是否为真,如果为真继续执行,如果为假终止循环。
和while循环不同的是do...while循环先执行循环体,再判断所以它至少会执行一次。
语法: do{
循环体;
}while(条件);
示例:用do...while循环再计算一下奇数和
int i=0,sum=0; do{ if(i%2!=0){ sum+=i; } i++; }while(i<100); printf("0~100之间的所有奇数和为:%d\n",sum); |
示例2.猜价格高低:5次机会
int number,i=0,price=100; do{ printf("请输入商品价格:\n"); scanf("%d",&number); if(number<price){ printf("低了!\n"); }else if(number>price){ printf("高了!\n"); }else{ printf("猜中了!\n"); break;//跳出循环 } i++; }while(i<5); |
自己的练习:加入了一点自己的想法,去实现猜错了以后显示的提示不相同。
int a,b=0,c=100;
printf("你猜是多少啊\n");
scanf("%d",&a);
if(a>b){
do{
printf("不对哦,你再猜\n");
scanf("%d",&a);
if(a>c){
printf("大了,你再猜\n");
}
else if(a<c){
printf("小了,你再猜\n");
}
else{
printf("猜对了\n");
break;
}
b++;
}
while(b<4);
}
小作业:
计算0~100之间所有能被3整除和带3的数字之和
int i=0;//循环变量 int sum=0; while(i<100){ if((i%3==0)||(i%10==3)||(i/10==3)){ sum+=i; } i++; } printf("0~100之间所有能被3整除和带3的数字之和为%d",sum); |
自己写的 还是要注意变量名的命名最好别用拼音...
#include <stdio.h>
void main(){
int he=0;
int xun=0;
int ge,shi;
ge=xun%10;
shi=xun/10%10;
while(xun<100){
if((xun%3==0)||(ge==3)||(shi==3)){
he+=xun;
}
xun++;
}
printf("0~100之间所有能被3整除和带3的数字之和为%d",he);
作业2:打印100~1000之间所有水仙花数,并统计其个数:如==>153=1^3+5^3+3^3
int i=100;//循环变量 int count=0,ge,shi,bai,he;//统计水仙花数 do{ ge=i%10;//获取个位 shi=i/10%10;//获取十位 bai=i/100; //获取百位 he=ge*ge*ge+shi*shi*shi+bai*bai*bai; if(he==i){ printf("%d\t",i); count++; } i++; }while(i<1000); printf("\n100~1000之间共有%d个水仙花数",count); |
自己写的:还是要注意变量名的命名最好别用拼音...
#include <stdio.h>
void main(){
int xun=100;
int ge,shi,bai,he,ci=0;
do{
ge=xun%10;
shi=xun/10%10;
bai=xun/100%10;
he=ge*ge*ge+shi*shi*shi+bai*bai*bai;
if(xun==he){
++ci;
printf("%d\n",xun);
}
xun++;
}while(xun<1000);
printf("水仙花数的个数是%d\n",ci);
}
作业3:李白闲来无事街上走,提壶去买酒,遇店加一倍,遇花喝一斗,五遇花和店喝光壶中酒,李白壶中原有多少酒? 经典问题需要多看多想几遍。
float x=0;//壶中原有酒的斗数 int i=0; while(i<5){ x=(x+1)/2;//遇到花和店之前的壶中酒的斗数 i++; } printf("李白壶中原有%7.3f斗酒",x); |
自己写的:思路,题目没有限定要求具体怎么样遇到花怎么样遇到店,所以就假设李白是交叉着一次花一次店的方式走的,倒着走一遍就是他最开始的量。
#include <stdio.h>
void main(){
int xun=0;
float x=0.0;
while(xun<5){
x=(x+1)/2;
xun++;
}
printf("李白原先有%f斗的酒\n",x);
}
循环和if条件语句一样是可以嵌套的。
循环嵌套:一个循环中嵌套其他循环,只有在内层循环结束时,才能执行下一次外层循环(外层循环执行1次,内层循环执行N次)
如:while(条件){
while(条件){
//循环体;
}
}
以及:do{
do{
//循环体;
}while(条件);
}while(条件);
示例: 使用循环打印矩形:外层循环控制打印的行数,内层循环控制每行打印*的个数 ******** ******** ******** int i=0,j; while(i<3){ j=0; while(j<8){ printf("*"); j++; } printf("\n"); i++; } |
打印直角三角形: * ** *** **** int i=0,j; while(i<4){//外层控制打印的行数 j=0; while(j<=i){//内层循环控制每行打印星号的个数 printf("*"); j++; } printf("\n"); i++; } |
打印倒直角三角形: **** *** ** * int i=0,j; while(i<4){ j=0; while(j<4-i){ printf("*"); j++; } printf("\n"); i++; } |
打印平行四边形 ******** ******** ******** int i=0,j,k; while(i<3){//外层循环控制行数 //打印空格循环 j=0,k=0; while(j<2-i){ printf(" "); j++; } //打印星号的循环 while(k<8){ printf("*"); k++; } //换行 printf("\n") ; i++; } |
打印直角三角形 * *** ***** ******* int i=1,j; while(i<5){//外层控制打印的行数 j=0; while(j<2*i-1){//内层循环控制每行打印星号的个数 printf("*"); j++; } printf("\n"); i++; } |
打印正的等腰三角形 * *** ***** ******* int i=0,j,k; while(i<4){//外层循环控制行数 j=0,k=0; //打印空格 while(j<3-i){ printf(" "); j++; } //打印星号 while(k<2*i+1){ printf("*"); k++; } //换行 printf("\n"); i++; } |
接下来是for循环;
for循环:在for循环中‘;’是不能或缺的,表达式1,表达式2,表达式3都可以省略。
for(表达式1[A1] ;表达2[A2] ;表达式3[A3] )
{
//循环体;[A4]
}
执行顺序: 初始化循环变量》循环条件判断》执行循环体》更改循坏变量
↑ ↓
←←←←←←←←←
[A1]初始化循环变量,只执行1次 .
[A2]循环条件
[A3]更改循环变量
[A4]循环体
示例:逢3过小游戏":遇到3或3的倍数或带3的数字替换成"过" 1 2 过 4 5 过 7 8 过
int i; for(i=1;i<40;i++){ if(i%3==0||i%10==3||i/10%10==3){ printf("过\t"); }else{ printf("%d\t",i); } } |
示例:根据用户输入的数字计算其阶乘 5!=1*2*3*4*5
int number,fac=1;//接受用户输入的数字 int i; printf("请输入数字"); scanf("%d",&number); for(i=1;i<=number;i++){ fac=i*fac; } printf("%d",fac); |
示例: 九九乘法表
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
int i,j; for(i=1;i<=9;i++){ for(j=1;j<=i;j++){ printf("%d*%d=%d\t",i,j,i*j); } printf("\n"); } |
有时候我们会遇到一种情况,一个循环还没走完,我们就想让它停止,这个时候应该怎么办呢?
这就用到了break和contine关键字。
break:跳出循环,这个就是终止循环不再走了。
continue: 跳过本次循环,继续下一次循环,只是跳过这一次还会继续循环。
示例: int i; for(i=1;i<9;i++){ if(i%3==0){ // break;//跳出循环 continue; } printf("%d\t",i); } |
作业1: 打印倒等腰三角形
*****
***
*
#include <stdio.h>
void main(){
/*
//打印正的等腰三角形,拆分一个空格的倒得直接三角形一个星号的正的直角三角形
int i,j,k;
for(i=0;i<3;i++){
for(j=0;j<i;j++){
printf(" ");
}
for(k=0;k<5-2*i;k++){
printf("*");
}
printf("\n");
}
*/
作业2:打印菱形
*
***
*****
*******
*****
**
*
/*
*打印菱形。
int i,j,k;
for(i=0;i<4;i++){
for(j=0;j<3-i;j++){
printf(" ");
}
for(k=0;k<2*i+1;k++){
printf("*");
}
printf("\n");
}
for(i=0;i<3;i++){
for(j=0;j<=i;j++){
printf(" ");
}
for(k=0;k<5-2*i;k++){
printf("*");
}
printf("\n");
}
作业3: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?(暴力破解)
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
int i,j,k,count=0;
for(i=1;i<5;i++){
for(j=1;j<5;j++){
for(k=1;k<5;k++){
if(i!=j&&i!=k&&j!=k){
printf("%d%d%d\t",i,j,k);
count++;
}
}
}
}
printf("\n一共有%d个",count);
总结一下,当我们遇到需要重复进行的某件事情的时候就可以用循环去代替一行一行的代码,这样简单明朗,容易排错,而且省下不少的敲代码时间。
C语言学习第四章的更多相关文章
- Go语言学习笔记四: 运算符
Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...
- Java基础知识二次学习--第四章 异常
第四章 异常处理 时间:2017年4月26日11:16:39~2017年4月26日11:28:58 章节:04章_01节 04章_02节 视频长度:20:46+01:16 内容:异常的概念 心得: ...
- R语言学习 第四篇:函数和流程控制
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- C#高级编程 (第六版) 学习 第四章:继承
第四章 继承 1,继承的类型 实现继承: 一个类派生于一个基类型,拥有该基类型所有成员字段和函数. 接口继承 一个类型只继承了函数的签名,没有继承任何实现代码. 2,实现继承 class MyDe ...
- C语言学习总结(四) 剩余内容
第六章.剩余内容 (预处理指令,宏定义,条件编译,文件操作) 预处理指令 简单的来说就是在程序编译之前需要做的事情 1.宏定义 概念: 是一个替换代码的预处理指令,可以在编译之前进行代码替换(宏展开, ...
- C语言学习第六章
今天开始尝试改变! 今天要学习函数,一个C语言中的重要组成部分. 首先先聊聊为什么要使用函数?随着学习的深入很多人会发现某段的代码重复使用的几率很大,而如果用一次写一次的话很明显的效率就会比较低,如果 ...
- C语言学习第五章
今天要进行一个重要元素数组的学习了.这一章要掌握什么是数组,数组怎么样命名,数组怎么样使用,以及一些常见的错误和需要注意的事项. 一. 数组的基本概念 数组是可以在内存中连续存储多个元素的结 ...
- C语言学习笔记第一章——开篇
本文章B站有对应视频 (本文图片.部分文字引用c primer plus) 什么是C语言 顾名思义,c语言是一门语言,但是和我们所讲的话不同,它是一门编程语言,是为了让机器可以听懂人的意思所以编写的一 ...
- C语言学习第七章
今天开始学习指针,指针在C语言中具有很重要的地位,按照老师所说,学C学不好指针跟没学一样,可见指针在C语言中的重要地位.废话不多说,首先我们先要知道什么是指针. 指针:指针是一个变量,它存储另一个对象 ...
随机推荐
- 个人C++学习路线
这段时间学习<<C++ primer >> 第四版,一边学一遍考虑,要怎么样往深处学习.查了网上的学习路线,知乎大神的问题回答,整理了一下思路,如下吧: <<C++ ...
- 通过Servlet生成验证码图片
原文出自:http://www.cnblogs.com/xdp-gacl/p/3798190.html 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类, ...
- applicationContext.xml的配置
想必用过Spring的程序员们都有这样的感觉,Spring把逻辑层封装的太完美了(个人感觉View层封装的不是很好).以至于有的初学者都不知道Spring配置文件的意思,就拿来用了.所以今天我给大家详 ...
- css重要属性之辩
一.relative 1)与兄弟 relative对absolute 1.限制left/top/right/bottom定位 2.限制z-index层级: 3.限制在overflow下 relativ ...
- 【树莓派】Linux 测网速及树莓派源
这篇文章比较杂,其中包含三点:linux环境中测试网络速度,树莓派下载软件的源,部分我写好的脚本: 一.Linux 测网速 Linux 测网速: sar -n DEV 1 100 1代表一秒统计并显示 ...
- 走入PHP-变量、运算符
通过define()定义常量: PHP 5.3.0之后,可以使用const关键字在类定义之外定义常量: 下面是PHP的几个魔术变量: PHP支持一个执行运算符:反引号(``),PHP将尝试将反引号中的 ...
- Unity 3D Framework Designing(3)——构建View和ViewModel的生命周期
> 对于一个View而言,本质上是一个MonoBehaviour.它本身就具备生命周期这个概念,比如,Awake,Start,Update,OnDestory等.这些是非常好的方法,可以让开发者 ...
- Intellij IDEA中文乱码解决
界面乱码 原因:IDEA默认设置界面的字体不支持中文 解决:修改为支持中文的字体,建议字体Microsoft Yahei UI.大小11,具体操作File -> Setting -> Ap ...
- css3-逐帧动画
time,这里有两个时间,前面一个是规定完成这个动画所需要的时间,全称叫animation-duration,第二个time为动画延迟开始播放的时间,全称叫animation-delay,这两个数值可 ...
- linux 下的 mkfifo、exec 命令使用
MKFIFOSection: User Commands (1)Updated: 1998年11月Index Return to Main Contents NAME(名称)mkfifo - 创建F ...