回顾C语言(四)
C语言流程控制语句20道练习题
1、break continue 使用 break 和 continue 来分别显示一个 4 之后函数就不再打印 i。(i 的变化范围是 0~10)
void Homework_Break(void)
{
for(int i = 0;i <= 10;i++)
{
? if(i > 4)
? {
? printf("Problem1.1_result: %d \n",i);
? break;
? }
}
}
void Homework_Continue(void)
{
for(int i = 0;i <= 10;i++)
{
? if(i > 4)
? {
? continue;
? }
? printf("Problem1.2_result: %d \n",i);
}
}
2、求 100 之内自然数中最大的能被 17 整除的数。
void MaxValue_OneHundred_Divided_Seventeen()
{
int i = 1;
while((i++)*17 < 100);
printf("Problem2_result: %d \n",(i-2)*17);
}
3、已知 a,b,c 都是 1 位整数,求当三位数 abc+cba 的值为 1333 时 a,b,c 的值。
void Conclusions_Of_A_B_C()
{
int a,b = 1,c;
for(a = 4; a < 10;a++)
for(c = 1; c < 10;c++)
{
if((a + c == 13))
{
printf("Problem3_result: %d , %d ,%d\n",a,b,c);
printf("a = %d,b = %d,c = %d, result: abc:%d + cba:%d = %d\n\n",a,b,c,(a*100+b*10+c),(c*100+b*10+a),(a*100+b*10+c)+(c*100+b*10+a));
}
}
}
4、输入年份,判断是否闰年。
void JudgeIntercalaryYear()
{
int year;
scanf("璇疯緭鍏ュ勾浠斤細 %d",&year);
if((year%400 == 0) || ((year%4 == 0) && (year%100 != 0)))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
5、计算并输出 200—400 之间不能被 3 整除的整数的和
void BetweenTwoHundredAndThreeHundredSumNoDividedThree()
{
int sum = 0;
for(int i = 200; i <= 400; i++)
{
if(i%3 == 0)
{
continue;
}
sum += i;
}
}
6、编程计算 1! +2! +3! + …… +10!的值。
int fun(int num)
{
if(num == 1)
return 1;
return num*fun(num - 1);
}
void Sum()
{
int sum = 0;
for(int i = 1;i <= 10;i++)
{
sum+=fun(i);
}
printf("Problem6_result: %d\n",sum);
}
7、编程计算 1*2*3+3*4*5+…+99*100*101 的值。
//problem 7
void PrefixOddNumSum()
{
int sum = 0,i;
for(i = 1; i <= 99;i += 2)
{
sum += i*(i+1)*(i+2);
}
printf("Problem7_result: %d\n",sum);
}
8、输出所有 200-400 以内能被 3 整除且个位数字为 7 的整数。
//problem 8
void BetweenTwoHundredAndThreeHundredSumDividedThree()
{
printf("Problem8_result:");
for(int i = 200; i <= 400; i++)
{
if((i%3 == 0) &&(i%10 == 7))
{
printf(": %d\n",i);
}
}
}
9、打印所有水仙花数。所谓水仙花是指一个三位数,其各位数字的立方和等于该数。
例如:153=1*1*1+5*5*5+3*3*3=1+125+27
//problem 9
void ThreedigitSumIsSelf()
{
int a,b,c;
printf("Problem9_result:\n");
for(int i = 100;i < 999;i++)
{
a = i / 100;
b = (i % 100) /10;
c = i % 10;
if(i == (a*a*a + b*b*b + c*c*c))
{
printf(": %d\n",i);
}
}
}
10、输出 100 到 200 以内的所有素数(只能被本身或则 1 整除的数)
//problem 10
void SUshu()
{
printf("Problem10_result: \n");
int flag = 1;
for(int i = 100;i <= 200;i++)
{
for(int j = 2;j <= i/2;j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag == 1)
{
printf(": %d\n",i);
}
flag = 1;
}
}
11、求 1-1/2+1/3-1/4+……+1/99-1/100 的值
// problem 11
// 方式一:直接相加,判断分母奇偶分母是偶数乘以 -1
void Problem11()
{
double sum = 0;
for(int i = 1; i <= 100;i++)
{
if(i%2 == 1)
{
sum += 1/(i*1.0);
}
else
{
sum += -1/(i*1.0);
}
}
printf("Problem11_result: %f\n",sum);
}
/* 方式二:奇偶分别相加,再相减
void Problem11()
{
double sum1 = 0,sum2 = 0;
for(int i = 1; i <= 100;i++)
{
if(i%2 == 1)
{
sum1 += 1.0/i;
}
else
{
sum2 += 1.0/i;
}
}
printf("Problem11_result: %.8f\n",sum1-sum2);
}
*/
12、用 1 元人民币兑换 5 分(20), 2 分(50), 1 分(100)的硬币共 50 枚, 每种硬币至少 1 枚,
问共有多少种兑换方案, 输出每一种方案三种硬币的数量。
void Problem12()
{
int x,y,z;
for(int i = 1;i <= 20;i++)
{
x = i;
y = 50 - 4*x;
z = 3*x;
if((x >= 1) && (y >= 1) && (z >= 1))
{
printf("Problem12_result: x= %d,y= %d,z= %d\n",x,y,z);
}
}
}
13、已知银行定期存款利率为 r=2.25%,输入存款本金 x, 存款年数 n,输出本利之和 r=x(1+r) (1+r) …(1+r),共 n 个(1+r).
void Problem13()
{
double r = 0.0225;
double result = 1;
double x = 0;
int year;
scanf("%lf%d",&x,&year);
for(int i = 1;i <= year;i++)
{
result *= (1 + r);
}
printf("Problem13_result: %f\n",x*result);
}
14、输入正整数,将正整数分解质因数。质因数要满足两个条件:1)是这个数的因数;2)是质数(素数) 如: 6=2*3 12=2*2*3。
void Problem14()
{
int num,temp = 2;
printf("璇疯緭鍏ヤ竴涓鏁存暟锛?);
scanf("%d",&num);
printf("Problem14_result锛?);
for(int i = 2;i <= num;i++)
{
while(num % i == 0)
{
printf("%d ",i);
num /= i;
}
}
printf("\n");
}
15、输出 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。
void Problem15()
{
int sum;
printf("Problem15_result:\n");
for(int i = 2;i < 10000;i++)
{
sum = 1;
for(int j = 2; j < i;j++)
{
if(i % j == 0)
sum += j;
}
if(sum == i)
printf(": %d\n",i);
}
}
16、写一段程序,输入 x,输出 y 值。 x x<1 y= 2x-1 1≤x<10 3x-11 x≥10
void Problem16()
{
int x,y;
scanf("%d",&x);
if(x < 1)
{
y = x;
}
else if( x >= 1 && x < 10)
{
y = 2*x - 1;
}
else if(x >= 10)
{
y = 3*x - 11;
}
else
printf("输入不合法\n");
printf("%d\n",y);
}
17、求 Sn=a+aa+aaa+……+aa…aa(n 个 a)之值,其中 a 是一个数字,n 表示 a 的位数。 例如:2+22+222+2222+22222(此时 n=5),n 由键盘输入。
int Pow(int n,int m)
{
if(m == 0)
{
return 1;
}
return n*Pow(n,m-1);
}
int Num(int a,int n) 求 n 位数均为 a 的数
{
int result = 0;
for(int i = 0;i < n;i++)
{
result += a*Pow(10,i);
}
return result;
}
void Problem17()
{
int a,n,sum = 0;
scanf("%d%d",&a,&n);
for(int i = 1;i <= n;i++)
{
sum += Num(a,i);
}
printf("Problem17_result: %d\n",sum);
}
18、有一个分数序列: 2/1,3/2,5/3,8/5,13/8,21/13,… 求出这个数列的前 20 项之和。
void Problem18()
{
int i = 20,temp;
double a = 2,b = 1;
double sum;
while(i--)
{
sum += a/b;
temp = a;
a = a + b;
b = temp;
}
printf("Problem18_result: %f\n",sum);
}
19、小猴摘了很多桃子,第一天吃了一半又多吃一个,第二天又吃掉一半再多吃一个,如此下去,到第 真十天吃前恰好还剩一个桃子。问第一天小猴摘了多少桃子?
void Problem19()
{
int i = 9;
int n = 0;
while(i--)
{
n = (n+1)*2;
}
printf("Problem19_result: %d\n",n);
}
20、两个乒乓球队进行比赛,各出 3 人。甲对为 A、B、C 3 人,乙队为 X、Y、Z 3 人。已抽签决定比赛 名单。有人向队员打听比赛的名单,A 说他不和 X 比,C 说他不和 X、Z 比,编程找出 3 对赛手的 名单。
void Problem20()
{
char xyz[] = {'X','Y','Z'};
char A,B,C;
for(int i = 0;i < 3;i++)
{
A = xyz[i%3];
B = xyz[(i+1)%3];
C = xyz[(i+2)%3];
if((A != 'X') && (C != 'X') && (C != 'Z'))
{
printf("Problem20_result: A : %c, B : %c, C : %c\n",A,B,C);
}
}
}
|