C语言经典编程习题之循环
1、水仙花数
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
【难度系数】▲
【分析】153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
【代码】
#include <stdio.h>
int main(void)
{
int i = 0;
int sum = 0;
int j = 0;
for(i = 100; i < 1000; i ++)
{
sum = 0;
int temp = i;
while(temp)
{
j = temp % 10;
temp /= 10;
sum += j * j * j;
}
if(sum == i)
{
printf("%d ", i);
}
}
printf("n");
return 0;
}
2、分解质因数
将一个正整数分解质因数。
【难度系数】▲▲▲▲
【分析】例如:输入90,打印出90=2*3*3*5。
【代码】
#include <stdio.h>
int main(void)
{
int num = 0;
int i = 0;
int j = 0;
scanf("%d", &num);
printf("%d = ", num);
for(i = 2; i < num; i ++)
{
if(num % i == 0)
{
printf("%d*", i);
num /= i;
i = 1;
}
}
printf("%dn", num);
return 0;
}
3、条件运算符的嵌套
利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
【难度系数】▲▲
【分析】
【代码】
#include <stdio.h>
int main(void)
{
int score = 0;
scanf("%d", &score);
if(score >= 90)
{
printf("An");
}
else
{
if(score >= 60 && score <= 89)
{
printf("Bn");
}
else
{
printf("Cn");
}
}
/*
char ch = 0;
int score = 0;
scanf("%d", &score);
ch = (score >= 90) ? 'A' : (score >= 60) ? 'B' : 'c';
printf("%cn", ch);
*/
return 0;
}
4、统计字符个数
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
【难度系数】▲▲▲
【分析】
【代码】
#include <stdio.h>
int main(void)
{
char c = 0;
int arr[4] = {};
while(1)
{
scanf("%c", &c);
if(c == 'n')
break;
if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
arr[0] ++;
else if(c == ' ')
arr[1] ++;
else if(c >= '0' && c <= '9')
arr[2] ++;
else
arr[3] ++;
}
printf("英文个数为:%dn
空个数为: %dn
数字个数为:%dn
其他字符个数为:%dn",arr[0],arr[1],arr[2],arr[3]);
return 0;
}
5、求s=a+aa+aaa+aa...a的值
【难度系数】▲
【分析】
【代码】
#include <stdio.h>
int main(void)
{
int n = 0;
int i = 0;
int sum = 0;
int num = 0;
scanf("%d", &n);
for(i = 0; i < n; i ++)
{
num = num*10 + 2;
sum += num;
}
printf("sum = %dn", sum);
return 0;
}
6、猴子吃桃问题
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
【难度系数】▲▲
【分析】
利用循环
循环开始: i = 9
循环结束: i >= 1
循环增量: i --
给num赋初值为1,即第10天的
桃子个数为1
那么往上每一天的桃子个数为
后一天的个数加1 再乘以2
【代码】
#include <stdio.h>
int main(void)
{
int i = 0;
int num = 1;
for(i = 9; i >= 1; i--)
{
num = (num + 1) * 2;
}
printf("num = %dn", num);
return 0;
}
7、乒乓球比赛
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
【难度系数】▲
【分析】
a 只不和 x比,即a可以和除了x比
c 不和x,z比,即c可以和y比
剩下的没有约束条件
【代码】
#include <stdio.h>
int main(void)
{
char ch1[] = {'a', 'b', 'c'};
char ch2[] = {'x', 'y', 'z'};
int i, j;
for(i = 0; i < 3; i ++)
{
for(j = 0; j < 3; j ++)
{
if(ch1[i] == 'a' && ch2[j] != 'x')
{
printf("%c --- > %cn", ch1[i], ch2[j]);
}
else if(ch1[i] == 'c' && ch2[j] != 'x' && ch2[j] != 'z')
{
printf("%c --- > %cn", ch1[i], ch2[j]);
}
else if(ch1[i] == 'b')
{
printf("%c --- > %cn", ch1[i], ch2[j]);
}
}
}
return 0;
}
8、求1+2!+3!+...+20!的值
求1+2!+3!+...+20!的和
【难度系数】▲▲▲▲
【分析】
双重循环:
外循环确定所需求阶乘的个数
内循环求每一个数的阶乘
acc保存每一个阶乘
sum保存前i个数的阶乘之和
【代码】
#include <stdio.h>
int main(void)
{
int i = 0;
int j = 0;
int acc = 1;
int sum = 0;
for(i = 1; i <= 20; i ++)
{
acc = 1;
for(j = 1; j <= i; j ++)
{
acc *= j;
}
sum += acc;
}
printf("sum = %dn", sum);
return 0;
}
9、逆序打印正整数
给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
【难度系数】▲▲▲
【分析】
【代码】
#include <stdio.h>
int main(void)
{
int num = 0;
int counter = 0;
scanf("%d", &num);
if(num == 0)
printf("%d 1位n", num);
else
{
while(num)//1234
{
counter ++;
printf("%d ", num % 10);
num /= 10;
}
printf("n%d位数n", counter);
}
return 0;
}
10、星期判断
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
【难度系数】▲
【分析】
【代码】
#include <stdio.h>
int main(void)
{
char ch = 0;
scanf("%c", &ch);
getchar();
if(ch == 'M')
printf("星期一!n");
else if(ch == 'T')
{
scanf("%c", &ch);
if(ch == 'u')
printf("星期二!n");
else if(ch == 'h')
printf("星期四!n");
}
else if(ch == 'W')
printf("星期三!n");
else if(ch == 'F')
printf("星期五!n");
else if(ch == 'S')
{
scanf("%c", &ch);
if(ch == 'a')
printf("星期六!n");
else if(ch == 'u')
printf("星期日!n");
}
return 0;
}
11、乘积最大
【难度系数】▲▲▲
【分析】
【代码】
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 0;
int c = 0;
/*
a ~ 1 ---> 18
b ~ 1 ---> 18
c ~ 1 ---> 18
*/
int i, j, num = 0;
int max = 0;
for(i = 1; i <= 18; i ++)
{
for(j = 1; j <= 20 - 1 - i; j ++)
{
num = i * j * (20 - i - j);
if(max < num)
{
max = num;
a = i;
b = j;
}
}
}
printf("max = %d, a = %d, b = %d, c = %dn", max, a, b, 20-a-b);
return 0;
}
12、打印倒三角
打印倒三角形,输入一个底边长n
例如:
n = 7
* * * * * * *
* * * * *
* * *
*
【难度系数】▲▲▲▲
【分析】
【代码】
#include <stdio.h>
int main(void)
{
int i = 0;
int j = 0;
int n = 0;
int counter = 0;
scanf("%d", &n);
for(i = n; i > 0; i -= 2)
{
for(j = 0; j < counter; j ++)
{
printf(" ");
}
for(j = 0; j < i; j ++)
{
printf("*");
}
counter ++;
printf("n");
}
return 0;
}
13、奇偶个数
【难度系数】▲▲▲
【分析】
【代码】
#include <stdio.h>
int main(void)
{
int num;
int sumeven = 0,even = 0;
int sumodd = 0,odd = 0;
while(1)
{
scanf("%d", &num);
if(num == 0)
break;
switch(num % 2)
{
case 0:
even ++;
sumeven += num;
break;
case 1:
odd ++;
sumodd += num;
break;
}
}
printf("偶数的个数为:%d, 平均值为:%.2fn", even, sumeven / (float)even);
printf("奇数的个数为:%d, 平均值为:%.2fn", odd, sumodd / (float)odd);
return 0;
}
14、工资纳税小程序
编写程序,要求输入一周中的工作小时数,然后打印工资总额、税金以及净工资。作如下假设:
a. 基本工资等级如下面的菜单可供选择
b. 加班(超过40小时)= 1.5倍的时间
c. 税率 前300美元为15%,下一个150美元为20%,余下的为25%
要求,用switch选择工资等级,程序的开头应该如下所示:
*************************************************
Enter the number corresponding to the desired pay rate or action:
(1) $8.75/hr (2) $9.33/hr
(3) $10.00/hr (4) $11.20/hr
*************************************************
#include <stdio.h>
int main(void)
{
float worktime = 0;
int grade = 0;
float basic = 0;
float all = 0;
float tax = 0;
float netwage = 0;
grade:
printf("**********************************n
Enter the number corresponding ton
the desired pay rate or action:nn
(1)$8.75/h (2)$9.33/hn
(3)$10.00/h (4)$11.20/hn
**********************************n");
printf("Please select:n");
scanf("%d", &grade);
printf("Worktimes of this week?n");
scanf("%f", &worktime);
switch(grade)
{
case 1:
basic = 8.75;
break;
case 2:
basic = 9.33;
break;
case 3:
basic = 10.00;
break;
case 4:
basic = 11.20;
break;
default:
printf("Select Error!n");
goto grade;
}
if(worktime <= 40)
{
all = worktime * basic;
}
else
{
all = (worktime - 40) * 1.5 * basic + 40 * basic;
}
/*
tax = (all > 300) ? 300 * 0.15 + (((all - 300) > 150) ?
150 * 0.2 + (all - 300 - 150) * 0.25 : (all - 300) * 0.2)
: all * 0.15;*/
if(all > 300)
{
if(all - 300 > 150)
{
tax = 300 * 0.15 + 150 * 0.2 + (all - 450) * 0.25;
}
else
{
tax = 300 * 0.15 + (all - 300) * 0.2;
}
}
else
{
tax = all * 0.15;
}
netwage = all - tax;
printf("Detail:n");
printf("all = %.2fntax = %.2fnnetwage = %.2fn", all, tax,
netwage);
return 0;
}
15、输出两个分数的和
输入两个分数,输出两分数之和(要求约分)
比如:
输入 3/5 7/8
输出:
59/40
输入:2/8 5/12
输出:
2/3
【代码】
#include <stdio.h>
int main(void)
{
int a1, b1, a2, b2;
char ch1, ch2;
int s1, s2;
int m, n, r, temp;
scanf("%d%c%d %d%c%d", &a1, &ch1, &b1, &a2, &ch2, &b2);
s1 = a1 * b2 + b1 * a2;//分子
s2 = b1 * b2;//分母
n = s1;
m = s2;
//求最大公约数
if(n < m)
{
temp = m;
m = n;
n = temp;
}
while(m != 0)
{
r = n % m;
n = m;
m = r;
}
//n即为
s1 /= n;
s2 /= n;
printf("%d/%dn", s1, s2);
return 0;
}
16、循环输出
输入一个大写字母,如F
比如:
输入:F
输出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
输入:C
输出:
A
ABA
ABCBA
【代码】
#include <stdio.h>
int main(void)
{
char ch = 0;
int i = 0;
int j = 0;
int k = 0;
scanf("%c", &ch);
for(i = 1; i <= ch - 64; i++)
{
for(j = 65; j <= 64 + i; j++)
{
printf("%c", j);
}
for(k = 64 + i; k > 65 ; k--)
{
printf("%c", k - 1);
}
printf("n");
}
return 0;
}
17、循环输出
输入一个大写字母,如 F,输出
比如:
输入:F
输出:
F
EFE
DEFED
CDEFEDC
BCDEFEDCB
ABCDEFEDCBA
输入:D
输出:
D
CDC
BCDCB
ABCDCBA
【代码】
#include <stdio.h>
int main(void)
{
char ch = 0;
int i = 0;
int j = 0;
int k = 0;
scanf("%c", &ch);
for(i = 1; i <= ch - 64; i++)
{
for(j = ch - i + 1; j <= ch; j++ )
{
printf("%c", j);
}
for(k = ch - 1; k > ch - i; k --)
{
printf("%c", k);
}
printf("n");
}
return 0;
}
18、循环输出
输入一个大写字符,如F
比如:
输入:F
输出:
FEDCBA
EDCBAB
DCBABC
CBABCD
BABCDE
ABCDEF
输入 B
输出:
BA
AB
【代码】
#include <stdio.h>
int main(void)
{
char ch = 0;
int i = 0;
int j = 0;
int k = 0;
scanf("%c", &ch);
for(i = 1; i <= ch - 64; i++)
{
for(j = ch - i + 1; j >= 65; j--)
{
printf("%c", j);
}
for(k = 66; k < 65+i; k++)
{
printf("%c", k);
}
printf("n");
}
return 0;
}
查看评论 回复
"C语言经典编程习题之循环"的相关文章
- 上一篇:C语言之父
- 下一篇:R语言k均值聚类分析