淘宝客网站虚拟主机,0元开店0元铺货无加盟费开网店,微网站建设哪家强,深圳seo网络推广公司片头
哈喽#xff01;小伙伴们#xff0c;大家好~#xff0c;今天我们来学习蓝桥杯基础篇#xff08;三#xff09;#xff0c;继续练习相关习题#xff0c;准备好了吗#xff1f;我们开始啦~ 一、while循环 可以简单理解为循环版的if语句。if语句是判断1次#xff0…片头
哈喽小伙伴们大家好~今天我们来学习蓝桥杯基础篇三继续练习相关习题准备好了吗我们开始啦~ 一、while循环 可以简单理解为循环版的if语句。if语句是判断1次如果条件成立则执行后面的语句while是每次判断如果成立则执行循环体中的语句否则停止。
int main() {int i 0;while (i 10) {cout i endl;i;}return 0;
}
题目1 求1~100中所有数的立方和
int main() {int sum 0 , sum2 0;int i 1;while (i 100) {sum1 i * i * i;i;}cout 1~100中所有数的立方和为: sum endl;return 0;
}
题目2求斐波那契数列的第n项。f(1)1f(2)1f(3)2f(4)3f(n)f(n-1)f(n-2)
首先我们来观察斐波那契数列规律是后一个数前2个数相加
f(1)1,f(2)1
f(3)f(1)f(2)
f(4)f(2)f(3)
f(5)f(3)f(4)
.....
f(n)f(n-2)f(n-1)
为此我们可以列出一张表表示 iab的关系
iab0f(1)f(2)1f(2)f(3)2f(3)f(4)3f(4)f(5)4f(5)f(6)5f(6)f(7).........n-3f(n-2)f(n-1)n-2f(n-1)f(n)n-1f(n)f(n1)
通过这张表我们可以看到i的范围在0~n-2采用while循环
//求斐波拉契数列的第n项,
//f(1)1,f(2)1,f(3)2,
//f(4)3,f(5)5,f(6)8,f(7)13,f(8)21,f(9)34,f(10)55//f(1)1,f(2)1
//f(3)f(1)f(2),
//f(4)f(2)f(3),
//f(5)f(3)f(4),
//...
//f(n)f(n-2)f(n-1)// i a b
// 0 f(1) f(2)
// 1 f(2) f(3)
// 2 f(3) f(4)
// 3 f(4) f(5)
// 4 f(5) f(6)
// 5 f(6) f(7)
// 6 f(7) f(8)
//...
// n-3 f(n-2) f(n-1)
// n-2 f(n-1) f(n)
// n-1 f(n) f(n1)//当in-1时,应该退出循环
//i的取值范围在0~n-2int main() {int i 0;int n;cin n;int a 1;int b 1;while (i n - 1) {int c a b;a b;b c;i;}cout a endl;return 0;
}
死循环循环永久执行无法结束。我们要避免写出死循环。
//死循环: 循环永久执行,无法结束。我们要避免写出死循环
int main4() {int x 1;while (x 1) puts(!);return 0;
}
二、do-while循环
do-while循环不常用。do-while语句与while语句非常相似。唯一的区别do-while语句限制性循环体后检查条件。不管条件的值如何我们都要至少执行1次循环。
int main() {int x 1;while (x 1) {cout x! endl;x;}int y 1;do {cout y! endl;} while (y 1);return 0;
}
输出结果 y! 再来举一个例子
int main() {int r 0;int j 1;while (j 10) {r j;j;}cout r endl;int s 0;int i 1;do {s i;i;} while (i 10);cout s endl;return 0;
} 可以看到在控制台中显示的结果相同均为50 三、for循环
基本思想把控制循环次数的变量从循环体中剥离 for(init-statement ; condition ; expression) { statement } init-statement 可以是声明语句、表达式、空语句一般用来初始化循环变量
condition 是条件表达式和 while 中的条件表达式作用一样可以为空空语句表示true
expression 一般负责修改循环变量可以为空
例题1打印0~9数字
int main() {for (int i 0; i 10; i) {cout i endl;}return 0;
}例题2求1~100中所有数的立方和
int main() {int sum 0;for (int j 1; j 100; j) {sum j * j * j;}cout 1~100中所有数的立方和为: sum endl;return 0;
}
例题3求斐波那契数列的第n项。f(1)1f(2)1f(3)2f(4)3f(n)f(n-1)f(n-2)
//使用for循环实现斐波那契数列
int main() {int a 1;int b 1;int n;cin n;for (int i 0; i n - 1; i) {int c a b;a b;b c;}cout a endl;return 0;
}
此外init-statement 可以定义多个变量expression 也可以修改多个变量
例题4求 1*10 2*9 3*8 4*7 5*6
int main() {int sum 0;int i 1, j 10;for (i 1, j 10; i j; i, j--) {cout i * j endl;sum i * j;}cout sum endl;return 0;
}
四、跳转语句
1. break
可以提前从循环中退出一般与if语句搭配。
例题5判断一个大于1的数是否为质数质数只能被1和自己整除的数
int main() {int num;cin num;bool flag 1; //假设该数为质数for (int i 2; i num; i) {if (num % i 0) {flag 0;break;}}if (flag 1) {cout 这个数为质数 endl;}else {cout 这个数不是质数 endl;}return 0;
}
2. continue
可以直接跳到当前循环体的结尾。作用和if语句类似。
例题6求1~100中所有偶数的和
int main() {int i 1;int sum 0;for (i 1; i 100; i) {if (i % 2 1)continue;sum i;}cout sum endl;return 0;
}
五、多层循环
//多层循环
int main() {//外层循环控制行数//内层循环控制列数for (int i 0, k 1; i 10; i) {for (int j 0; j 10; j, k){cout k ;}cout endl;}return 0;
}
结果如下 我们还可以将代码优化一下
int main() {int n;cin n;for (int i 1, k 1; i n; i) {for (int j 1; j n; j, k) {printf(%-5d , k); //左对齐//printf(%5d , k); //右对齐//cout k ;}cout endl;}return 0;
} 例题7打印1~100中的所有质数并计算质数的数量
//练习: 打印1~100中所有的质数
int main() {int num 0;for (int i 1; i 100; i) {bool flag 1; //假设此时的i为质数for (int j 2; j i; j) {if (i % j 0) {flag 0;break;}}if (flag 1) {cout i endl;num;}}cout 1~100中所有的质数有 num 个 endl;return 0;
} 例题8打印正三角 *************************分析这类题型我们需要定义3个变量 i,j,k分别表示行数空格以及* 比如我输入n5,外层循环打印5行i的取值范围1~n 接下来观察空格的数量变化 第1层空格的数量为4 第2层空格的数量为3 第3层空格的数量为2 第4层空格的数量为1 第5层没有打印空格。 通过以上分析我们得知空格的数量为 n-i 再来观察*的数量变化 第1层打印1个* 第2层打印3个* 第3层打印5个* 第4层打印7个* 第5层打印9个*。 通过以上分析我们得知”*“的数量为 2*i-1 代码如下
int main() {int n;cin n;//外层控制行数for (int i 1; i n ; i) {//内层循环1控制空格数量for (int j 1; j n-i; j) {printf( );}//内层循环2控制*数量for (int k 1; k 2*i-1; k) {printf(*);}cout endl;}return 0;
}
例题9打印倒三角 ********* ******* ***** *** * 和上一道题的做法类似我们依然定义3个变量 i,j,k分别表示行数空格*的数量 比如我输入n5则打印5行i 的取值为 1~n 接下来观察空格的数量 第1层没有空格 第2层1个空格 第3层2个空格 第4层3个空格 第5层4个空格 通过上述分析我们得知空格的数量为 i-1 再来观察*的数量 第1层9颗*, 第2层7颗* 第3层5颗* 第4层3颗* 第5层1颗* 通过上述分析我们得知*的数量为 2*(n-i)1 代码如下
int main() {int n;printf(请输入行号: );scanf(%d, n);//外层循环控制行数for (int i 1; i n; i) {//内层循环1控制空格数量for (int j 1; j i - 1; j) {printf( );}//内层循环2控制*数量for (int k 1; k 2 * (n - i) 1; k) {printf(*);}cout endl;}return 0;
}
例题10输入一个n打印n阶菱形n为奇数 n 9 的结果 * *** ***** ******* ********* ******* ***** *** * 方法一 我们可以将这个菱形拆成2个三角形正三角和倒三角用for循环分别输出行数i空格j的数量*号的数量k 打印正三角时当 n9 时只有5行i 的取值范围 1 ~ n/21空格的取值范围 n/21 - i“*号的取值范围 2*i-1 打印倒三角时当 n9 时只有4行i 的取值范围 1 ~ n/2空格的取值范围为 i ”*号的取值范围 [2*(n/2i)-1]-2*i 代码如下
//方法一: 可以打印出菱形,但是不推荐!!!
int main19() {int n; //代表行数cin n;int i, j, k;//正三角for (i 1; i n/2 1; i) {for (j 1; j n/21 - i; j) {printf( );}for (k 1; k 2 * i - 1; k) {printf(*);}cout endl;}//倒三角for (i 1; i n/2 ; i) {for (j 1; j i; j) {printf( );}for (k 1; k (2*(n/21)-1)-2*i ; k) {printf(*);}cout endl;}return 0;
}
方法二采用曼哈顿距离 代码如下
//方法二: 运用曼哈顿距离
int main() {int n;cin n;//构造一个 n×n 的正方形//计算每个方格到中心原点的距离//如果距离n/2 , 都是*//如果距离n/2 , 为空格//(cx,cy)表示中心原点int cx n / 2;int cy n / 2;for (int i 0; i n-1; i) {for (int j 0; j n-1; j) {if (abs(i - cx) abs(j - cy) n / 2) {printf(*);}else {printf( );}}cout endl;}return 0;
}
例题11输入一个n,打印n阶空心菱形,n为奇数 n 9 的结果 * * * * * * * * * * * * * * * *
空心菱形顾名思义和实心菱形相比只有外围需要打印*内部都是空格 代码如下
int main() {int n;cin n;//构造一个 n×n的正方形//计算每个方格到中心原点的距离//如果距离n/2 , 都是*//如果距离n/2 , 为空格//(cx,cy)表示中心原点int cx n / 2;int cy n / 2;for (int i 0; i n - 1; i) {for (int j 0; j n - 1; j) {if (abs(i - cx) abs(j - cy) n / 2) {printf(*);}else {printf( );}}cout endl;}return 0;
}
六、习题
第1题 偶数
输出1~100之间(包括1和100)的全部偶数 代码如下
int main() {int n;cin n;for (int i 1; i n; i 2) {cout i endl;}return 0;
} 第2题 奇数
输入一个整数x,输出1到x之间(包括1和x)的全部奇数 代码如下
int main() {int n;cin n;for (int i 1; i n; i 2) {cout i endl;}return 0;
} 第3题 正数
输入6个数字,它们要么是正数,要么是负数统计并输出正数的个数6个数字,每个占一行输出格式为x positive numbers,其中x为正数的个数 代码如下
int main() {int num 0;double x;for (int i 0; i 5; i) {cin x;if (x 0) {num;}}cout num positive numbers endl;return 0;
}
另外我们还可以使用数组来解决
int main() {int num 0;int a[6];for (int i 0; i 5; i) {cin a[i];if (a[i] 0) {num;}}cout num positive numbers endl;return 0;
} 第4题 连续奇数的和1
给定2个整数x和y,输出在它们之间(不包括x和y)的所有奇数的和第一行输入x,第二行输入y输出一个整数,表示所有满足条件的奇数的和 代码如下
void swap(int a, int b) {int temp a;a b;b temp;
}int main() {int x, y;cin x y;if (x y) swap(x, y);int sum 0;for (int i x 1; i y; i) {if (i % 2 0)continue;sum i;}cout 所有满足条件的奇数的和为:sum endl;return 0;
} 第5题 最大数和它的位置
给定100个数,请你找出其中最大的数字,以及它的输入位置(位置从1开始)输入共100行,每行包含1个整数第一行输出最大的数字第二行输出该数字的输入位置 我们采用擂台法解决此类问题
int main() {int a[110];for (int i 0; i 99; i) {cin a[i];}int max a[0];int max_i 0;for (int j 1; j 99; j) {if (a[j] max) {max a[j];max_i j;}}cout 最大的数字为: max endl;cout 该数字的输入位置为: max_i 1 endl;return 0;
} 还可以进一步简化
int main() {int a[110];int max 0; //这里max赋值为0方便和后面的数进行比较int max_i;for (int i 0; i 99; i) {cin a[i];if (a[i] max) {max a[i];max_i i;}}cout 最大的数字为: max endl;cout 该数字的输入位置为: max_i 1 endl;return 0;
} 第6题 递增序列 代码如下
int main() {int x;while (true) {cin x;if (x 0) break;for (int i 1; i x; i) {cout i ;}cout endl;}return 0;
} 片尾
今天我们学习了C蓝桥杯基础篇三希望这篇文章对友友们有所帮助
求点赞收藏加关注
谢谢大家