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语言中的重要地位.废话不多说,首先我们先要知道什么是指针. 指针:指针是一个变量,它存储另一个对象 ...
随机推荐
- 1653: [Usaco2006 Feb]Backward Digit Sums
1653: [Usaco2006 Feb]Backward Digit Sums Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 285 Solved: ...
- CoreAnimation 图层几何学
CoreAnimation 图层几何学 博客园MakeDown支持不佳,如有需要请进GitHub 图层几何所讲主要是有关图层的位置,尺寸等几何类属性. 布局 在UIView中与位置,尺寸有关的属性有 ...
- dtree大型树插件
一.dtree简介 dtree是一个由JavaScript编写成的简单的树形菜单组件,目前免费并且开源.同时支持动态从数据库引入数据. 二.使用方法 1.下载dtree.js及dtree.css 下载 ...
- 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)
使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...
- Asp.Net 常用工具类---Config操作(7)
近期工作比较忙,忙到忘记写博客(自己的借口,主要加班下班后不想动). 月初的时候,打算每两天写一篇博文,分享自己的一些心得和开发体验,无奈现在只写到第六篇,然而时间已经是20号,岁月不饶人! 总想写点 ...
- Java标准注释配置
eclipse中java文件头注释格式设置 windows->preferences->java->Code Templates->comments->Type-> ...
- git使用教程及github远程仓库管理
git使用教程步骤 1.安装git 安装完后,在开始菜单里找到"git"->"Git Bash",蹦出一个类似命令行窗口,说明安装成功.2 注册git 在 ...
- 基于原生js的返回顶部组件,兼容主流浏览器
基于原生js的返回顶部插件,兼容IE8及以上.FF.chrome等主流浏览器. js文件中封装了getScrollTop()和changeScrollTop()函数分别用于获取滚动条滚动的高度和修改滚 ...
- 核心模块Path
核心模块Path 作用:用于帮助程序员来操作硬盘上的路径. 核心模块注意点:当引用核心模块的时候直接require('模块名'),不需要加任何路径或者后缀. Path中的常用API: dirname( ...
- 1.跨平台开发之~ VSCode开发第一个C程序
VSCode的安装就不讲了,可以参考这个(http://www.cnblogs.com/dunitian/p/6661644.html) 写一个简单的C,然后F5运行,根据提示来配置文件 删掉前面的内 ...