该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
循环结构例题讲解以及各种图形(三角形及菱形等)输出案例:
1、 输入一周七天的温度,然后求出该周平均温度并打印
double sum = 0.0;
double temperature = 0.0;
for (int i = 1; i <= 7; i ++) {
printf("请输入第%d天温度:",i);
scanf("%lf", & temperature);
sum += temperature;
}
printf("平均温度为:%lf",sum/7);
2、给定一个数学表达式,然后求出其结果。数学表达式如下所示:
0 – 1 + 2 – 3 + 4 – 5 + 6 …… - 99 + 100
解法1: 偶数和 - 奇数和
这里省略
解法2:偶数相加,奇数相减
int result = 0;
for (int i = 0; i <= 100; i ++) {
if (i % 2 == 0) {//偶数
result += i;
} else {//奇数
result -= i;
}
}
printf("result = %d\n",result);
解法3:按符号位进行加减
int sign = 1;//保存符号位 1 或则 -1
int sum = 0;//保存结果
for (int i = 0; i <= 100; i ++) {
sum += i * sign;
sign = - sign;
}
printf("sum = %d",sum);
3、打印出0--10之间偶数,以及这些偶数的平方及立方值
for (int i = 0; i <= 10; i ++) {
if (i % 2 == 0) {
printf("%d %d\n", i * i, i * i * i);
}
}
4、输出n个连续的偶数,n为输入的值,如 n = 3,输出 0 2 4
int n = 0;
printf("请输入n的值:");
scanf("%d", &n);
//判定n是否为正数
if (n > 0) {
解法1:按照分支判断,只输出偶数,奇数不输出
for (int i = 0; i < 2 * n - 1; i ++) {
if (i % 2 == 0) {//判断输出输出偶数
printf("%d ",i);
}
}
解法2:按照自然数乘以2均为偶数的方式
for (int i = 0; i < n; i ++) {
printf("%d ", 2 * i);
}
解法3:按照偶数+2均为偶数的方式
for (int i = 0; i < 2 * n; i += 2) {
printf("%d ", i);
}
} else {
printf("error");
}
5、输入两个正整数,求得两个数之间所有整数的和,例如,n1 = 3, n2 = 10;结果sum = 3 + 4 + 5 + 6…+ 10 = 52;
int start = 0, end = 0, sum = 0;
printf("请输入开始和结尾数字,中间用空格隔开:");
scanf("%d %d", &start, &end);
for (int i = start; i <= end; i ++) {
sum += i;
}
printf("sum = %d", sum);
6、依次输入几个数据,直到0作为输入的结束,然后求出输入的这些数据的总和及平均值(结束循环,使用break)
解法1:
int number = 0;//接收输入的数
double sum = 0.0;
int count = 0;//记录个数
while (1) {
printf("请输入:");
scanf("%d", &number);
//判断
if (number == 0) {
break; //跳出
}
count ++;//次数累加
sum += number;//和
}
//解法2:
do {
printf("请输入:");
scanf("%d", &number);
count ++;
sum += number;
} while (number != 0);
count --;
printf("sum = %lf,平均值:%lf,count = %d",sum, sum/count, count);
7、使用do…while循环实现银行登录示例
/*
* 设定输入的固定密码;
* 提示用户输入密码;
* 如果用户输入错误,提示请重新输入,三次均错误,提示用户,“输入失败”;
* 如果用户输入正确,提示“登录成功”
*/
int password = 123456;
int pw = 0;
int count = 1;
do {
printf("请输入密码:");
scanf("%d", &pw);
if (pw == password) {
printf("登陆成功\n");
break;
} else {
printf("输入错误,请重新输入\n");
}
count ++;
} while (count <= 3);
if (count > 3) {
printf("输入失败");
}
8、Chuckie Lucky赢了100W美元,他把它存入一个每年盈利8%的账户。在每年的最后一天,Chuckie取出10W美元。编写一个程序,计算需要多少年Chuckie就会清空他的账户。(不考虑一天的盈利情况)
double sum = 100;
int count = 0;
while (1) {
if (sum < 0) {
break;
}
sum += sum * 0.08;
sum -= 10;
count ++;
printf("count = %d ,剩余 %.2f\n",count, sum);
}
9、 任何一个自然数m的立方均可写成m个连续奇数之和。例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 编程实现:输入一自然数n,求组成n的3次方的n个连续奇数。
int n = 2;
for (int i = n * (n - 1) ; i <= n * (n + 1) ; i ++) {
if (i % 2 != 0) {
printf("%d ", i);
}
}
10、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
double height = 100;
double sum = 100;
for (int i = 2; i < 11; i ++) {
height /= 2;
sum += 2 * height;
printf("第%d次反弹高度为:%lf,落地时经过距离为:%lf\n",i - 1, height, sum);
}
printf("第10次反弹高度为:%lf",height / 2);
11、打印输出9*9乘法表
for (int i = 1; i < 10; i ++) {
for (int j = 1; j <= i; j ++) {
printf("%d * %d = %2d ",i, j, i * j);
}
printf("\n");
}
12、编写程序,求e的值,e≈1+1/1!+1/2!+1/3!+1/4!+…
(1)用for循环,计算前50項。
(2)用while循环,要求直至最后一项的值小于10的-6次方。
第(1)小问:
double number = 1;
double sum = 1;
for (int i = 2; i < 50; i ++) {
//分子 1
//分母
double denominator = 1;
for (int j = 1; j < i ; j ++) {
denominator *= j;
}
sum += number / denominator;
}
printf("%lf", sum);
第(2)小问
double denominator = 1;//分母
double sum = 1;//和
int n = 1;//记录当前阶乘数据
while (1/denominator > 10e-6) {
sum += 1/denominator;
denominator *= n;
n ++;
}
printf("sum = %lf", sum);
13、水仙花数:水仙花数是指一个 n 位数 ( n 大于等于 3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1的3次方 + 5的三次方 + 3三次方 = 153)。根据这个要求,打印所有三位数的水仙花数。
解法1:
for (int a = 1; a <= 9; a ++) {
for (int b = 0; b <= 9; b ++) {
for (int c = 0; c <= 9; c ++) {
if (a * a * a + b * b * b + c * c * c == a * 100 + b * 10 + c) {
printf("%d%d%d\n",a,b,c);
}
}
}
}
解法2:
for (int i = 100; i <= 999; i ++) {
//分解
int a = i / 100; //百位
int b =( i / 10) % 10;//十位
int c = i % 10;//个位
if (a * a * a + b * b * b + c * c * c == a * 100 + b * 10 + c) {
printf("%d%d%d\n",a,b,c);
}
}
14、打印三角形,如下图
*
***
*****
*******
*****
***
*
7 - 2 * |i|
解题方式:按照中间对称式,中间设为0,往上递增,往下递减,依次找出空格与*号的规律;
for (int i = -3; i <= 3; i ++) {
//空格
int number = i > 0 ? i : (-1) * i;
for (int j = number; j > 0; j --) {
printf(" ");
}
//*号
for (int k = 1; k <= 7 - 2 * number; k ++) {
printf("*");
}
printf("\n");
}
15、编写出下面图形
1
2 3
4 5 6
7 8 9 0
int n = 1;//标记数量
for (int i = 0; i < 4; i ++) {
//打印空格
for (int j = 0; j < 3 - i; j ++) {
printf(" ");
}
// * 号
for (int k = 0; k < i + 1; k ++) {
printf("%d ", n ++ % 10);
}
printf("\n");
}
16、打印出如下图形
*****
****
***
**
*
for (int i = 1; i <= 5; i ++) {
//空格
for (int j = 1; j < i ; j ++) {
printf(" ");
}
//*号
for (int k = 0; k <= 5 - i; k ++) {
printf("*");
}
printf("\n");
}
17、
1
121
12321
1234321
123454321
for (int i = 1; i <= 5; i ++) {
//空格
for (int j = 0; j < 5 - i; j ++) {
printf(" ");
}
//数字
int n = -1;
for (int k = 1; k < 2 * i; k ++) {
if (k <= i) {
printf("%d", k);
n ++;
} else {
printf("%d", n);
n --;
}
}
printf("\n");
}
18、
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
for (int i = 1; i <= 5; i ++) {
//空格
for (int j = 0; j < 5 - i; j ++) {
printf(" ");
}
//数字
int n = -1;
for (int k = 1; k < 2 * i; k ++) {
if (k <= i) {
printf("%c", k + 64);
n ++;
} else {
printf("%c", n + 64);
n --;
}
}
printf("\n");
}
19、
*******
*****
***
*
***
*****
*******
for (int i = -3; i <= 3; i ++) {
//空格
int number = i > 0 ? i : (-1) * i;
for (int j = 1; j <= 3 - number; j ++) {
printf(" ");
}
//*号
for (int k = 1; k <= 2 * number + 1; k ++) {
printf("*");
}
printf("\n");
}
20、
*
* *
* *
* *
* *
* *
*
for (int i = -3; i <=3; i ++) {
int n = i > 0 ? i : - i;
for (int j = 0; j < n; j ++) {
printf(" ");
}
for (int k = 0; k < 7 - n; k ++) {
if (k == 0 || k == 6 - n - n) {
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}