经典例题-流程控制语句
知识点https://blog.csdn.net/m0_71813740/article/details/140599796?spm=1001.2014.3001.5501
注: for循环中的i++不受循环体的影响,如果在循环体中用continue,i++依旧执行。
变量的完整初始化,类型 标识符 初始化。如果不加初始化,很容易产生随机数。
- 以下程序的运行结果是
int main()
{
int m=5;
if(m++>5)
printf(“%d\n”,m);
else
printf(“%d\n”,m--);
}
A) 4 B) 5 C) 6 D) 7
tip:这道题主要考察的是i++,在不是单独运行也就是“i++;”的情况下,要先执行,后++,包括printf(),是先输出,后++。 -- C
2.语句 while(!E);中的表达式!E 等价于_______.
a)E==0 b)E!=1 c)E!=0 d)E==1
tip:先判断E,如果E为真,则!E为假,反之,如果E为假,则!E为真。这道题只能假设E为假,!E为真的情况。另一种情况的答案选项不唯一。B选项E=0,1,2,3.。。,C选项E位真,D选项E为真 --A
3.输入年份,判断是否闰年。
int main()
{
int year;
printf("请输入一个年份\n");
scanf("%d",&year);
if((year%4==0&&year%100!=0)||year%400==0)
printf("该年份为闰年\n");
else
printf("该年份为平年\n");
}
4.已知 a,b,c 都是 1 位整数,求当三位数 abc+cba 的值为 1333 时 a,b,c 的值。
int main()
{
int a,b,c,sum;
for(a=0;a<=9;a++)
{
for(b=0;b<=9;b++){
for(c=0;c<=9;c++){
sum =(a*100+b*10+c)+(c*100+b*10+a);
if(sum==1333){
printf("当三位数 abc+cba 的值为 1333 时 a,b,c 的值分别为%d,%d,%d\n",a,b,c);
}
}
}
}
return 0;
}
5.编程计算 1! +2! +3! + …… +10!的值。
/*
作者: zcy
日期:
功能描述:编程计算 1! +2! +3! + …… +10!的值
思路:
1-10的阶乘和
int num = 1;
循环次数已知 -- for
初始值: i = 1
条件: i <=10
计数器: i++
循环操作:
1.i的阶乘
1! = 1*1 = 1
2! = 1*2 = 1!*2
3! = 1*2*3 = 2!*3
4! = 1*2*3*4 = 3!*4
num = num * i;
2.累加
sum += num;
输出 sum的值
*/
int main()
{
int num = 1,sum = 0;
for(int i=1;i<=10;i++)
{
num*=i;
sum+=num;
}
printf("1! +2! +3! + …… +10!的值为%ld\n",sum);
return 0;
}
6.编程计算1* 2 * 3+3 * 4 * 5+……+99 * 100 * 101 的值。
/*
作者: zcy
日期:
功能描述:编程计算 1*2*3+3*4*5+……+99*100*101 的值
思路:
1-100之间 -- 区间 -- 次数已知 -- for
初始值: i = 1
条件: i <100
计数器: i+=2
循环操作:
sum += i*(i+1)*(i+2); // 规律
输出sum值
*/
int main()
{
int sum=0;
for(int i=1;i<=99;i+=2)
{
sum += i*(i+1)*(i+2);
}
printf(" 1*2*3+3*4*5+……+99*100*101 的值为%d\n",sum);
return 0;
}
7.打印所有水仙花数。所谓水仙花是指一个三位数,其各位数字的立方和等于该数。 例如:153=111+555+333=1+125+27
/*
作者: zcy
日期:
功能描述:打印所有水仙花数。所谓水仙花是指一个三位数,其各位数字的立方和等于该数。 例如:153=1*1*1+5*5*5+3*3*3=1+125+27
思路:
水仙花是指一个三位数 -- 100 - 999 -- 次数已知 -- for
初始值: i = 100
条件: i < 1000
计数器: i++
循环操作:
判断是否是水仙花数 -- 基本if选择结构
获得各位上数字 -- 211
百: int b = i/100
十: int s = i/10%10 -- i%100/10
个: int g = i%10
条件: b*b*b+s*s*s+g*g*g == i
执行:
真: 打印i
假: 无
*/
int main()
{
int i;
for(i=100;i<1000;i++)
{
if(((i/100)*(i/100)*(i/100)+(i/10%10)*(i/10%10)*(i/10%10)+(i%10)*(i%10)*(i%10))==i)
{
printf("%d是水仙花数\n",i);
}
}
return 0;
}
如果要用到数学函数,例如pow函数,那么编译的时候要加-lm, 从.h文件中找。./a.out -lm
8.输出 100 到 200 以内的所有素数(只能被本身或 1 整除的数)
/*
作者: zcy
日期:
功能描述:输出 100 到 200 以内的所有素数(只能被本身或则 1 整除的数)
思路: -- 标记法 -- 造条件
100 - 200以内 -- 循环次数已知 -- for
初始值: i = 100
条件: i <=200
计数器: i++
循环操作:
1.判断是否是素数--除了1和本身之外还有其他能够被整除的数
flag =1; //默认是素数
//验证是否是素数
2-本身 -- 求余 -- for
初始值: j = 2
条件: j < i
计数器: j++
循环操作:
判断i对j是否能整除
条件: i % j == 0
真: flag = 0;break;
假: 无
2.打印i
方法一:找打印i的条件 -- j == i
方法二: 标记法 -- 造条件 -- flag =1
*/
#include <stdio.h>
int main() {
for (int i=100;i<=200;i++) {
int flag=1;//默认是素数
for(int j=2;j<i;j++){
if (i%j==0) {
flag=0;
break;
}
}
if(flag){
printf("%d\n",i);
}
}
return 0;
}
9.用 1 元人民币兑换 5 分(20), 2 分(50), 1 分(100)的硬币共 50 枚, 每种硬币至少 1 枚,问共有多少种兑换方案, 输出每一种方案三种硬币的数量。
#include <stdio.h>
int main() {
int count = 0;
printf("兑换方案:\n");
for(int a=1;a<20;a++)
{
for(int b=1;b<50;b++){
int c=50-a-b;
if (c >= 1 && (5 * a + 2 * b + 1 * c) == 100) {
printf("5分硬币: %d, 2分硬币: %d, 1分硬币: %d\n", a, b, c);
count++;
}
}
}
printf("总共方案数: %d\n", count);
return 0;
}
10.已知银行定期存款利率为 r=2.25%,输入存款本金 x, 存款年数 n,输出本利之和 r=x(1+r)(1+r) (1+r),共 n 个(1+r).
#include <stdio.h>
int main() {
double x, n;
double r=0.0225;
printf("请输入存款本金和存款年数\n");
scanf("%lf%lf",&x,&n);
for(int i=1;i<=n;i++)
{
x=x*(1+r);
}
printf("本利之和: %lf\n", x);
return 0;
}
11.输出 10000 以内的所有完全数, 各个小于它的约数(真约数, 列出某数的约数, 掉该数本身, 剩下的就是它的真约数)的和等于它本身的自然数叫做完全数。
例如:第一个完全数是 6,它有约数 1、 2、 3、 6,除去它本身 6 外,其余 3 个数相加, 1+2+3=6。第二个完全数是 28,它有约数 1、 2、 4、 7、 14、 28,除去它本身 28 外,其余 5 个数相加, 1+2+4+7+14=28。
#include <stdio.h>
int main() {
int sum,i,j;
printf("10000以内的所有完全数w为:\n");
for(i=1;i<10000;i++)
{
sum=0;
for(j=1;j<i;j++)
{
if(i%j==0){
sum+=j;
}
}
if(sum==i){
printf("%d\n",i);
}
}
return 0;
}
12.有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13,... 求出这个数列的前 20 项之和。
/*
作者: zcy
日期:
功能描述:有一个分数序列: 2/1,3/2,5/3,8/5,13/8,21/13,... 求出这个数列的前 20 项之和
思路:
找规律 -- 从第二项开始
分子= 上一项的分子+分母
分母= 上一项的分子
共20项 -- 循环20次 -- for
初始化第一项内容: 分子= 2,分母=1
初始值: i = 2
条件: i <=20
计数器: i++
循环操作:
1.分子= 上一项的分子+分母
2.分母= 上一项的分子
3.累加 -- sum
打印输出sum的值
*/
int main()
{
//初始化第一项内容
float fz = 2,fm = 1;
float sum = 0;
for(int i = 1;i<=20;i++)
{
sum += fz/fm;
float temp = fz;
fz = fz + fm;
fm = temp;
}
printf("sum = %.2f\n",sum);
return 0;
}
13.求 Sn=a+aa+aaa+……+aa..aa(n 个 a)之值,其中 a 是一个数字,n 表示 a 的位数。例如:2+22+222+2222+22222(此时 n=5),n 由键盘输入。
/*
作者: zcy
日期:
功能描述:求 Sn=a+aa+aaa+……+aa..aa(n 个 a)之值,其中 a 是一个数字,n 表示 a 的位数。例如: 2+22+222+2222+22222(此时 n=5),n 由键盘输入
思路:
累加 n 次 -- for
记录任意位数的数据 -- temp
int temp = 0;
初始值: i = 1
条件: i <=n
计数器: i++
循环操作:
1. 求i位数据 -- i-1
2 = 0*10+2
22 = 2*10+2
222= 22*10+2
2222=222*10+2
temp=temp*10+a
2. 累加 -- sum+= temp;
打印sum的值
*/
#include <stdio.h>
int main() {
int a, n;
long long sum = 0;
long long term = 0;
printf("请输入数字 a: ");
scanf("%d", &a);
printf("请输入位数 n: ");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
term = term * 10 + a;
sum += term;
}
printf("Sn 的值为: %lld\n", sum);
return 0;
}
14.输入一个字符,如果是大写字母则,将其以小写形式输出,如果是小写字母,则将其以大写形式输出。如果不是英文字母,则原样输出。
#include <stdio.h>
int main() {
char c,data;
printf("输入一个字符\n");
scanf("%c",&c);
if(c>=65&&c<=90){
data = c +32;
}else if(c>=97&&c<=122){
data = c - 32;
}else {
data=c;
}
printf("Sn 的值为: %c\n", data);
return 0;
}