一、基础
1)求 100 之内自然数中最大的能被 17 整除的数。
#include
int main()
{
int i,tmp;
printf("所有能被17整除最大的数:");
for(i = 1; i <= 100; i++)
{
if(i % 17 == 0)
{
tmp = i;
}
}
printf("%d \n", tmp);
return 0;
}
2)输入年份,判断是否闰年。
#include
int main()
{
int year;
printf("请输入年份:");
scanf("%d", &year);
if((year % 4 == 0 && year %100 != 0)|| (year % 400 == 0))
{
printf("%d是闰年\n", year);
}
else
{
printf("%d不是闰年\n", year);
}
return 0;
}
3)计算并输出 200—400 之间不能被 3 整除的整数的和。
#include
int main()
{
int i;
int s;
printf("200--400之间不能被3整除的整数的和:");
for(i = 200; i <= 400; i++)
{
if(i % 3 != 0)
{
s += i;
}
}
printf("%d\n", s);
return 0;
}
4)求 1-1/2+1/3-1/4+……+1/99-1/100 的值。
#include
int main()
{
int i;
float sum = 0;
for(i = 1; i <= 100; i++)
{
if(i % 2 == 0)
{
sum -= 1.0 / i;
}
else
{
sum += 1.0 / i;
}
}
/*float i = 1.0;
int j = 0;
int k = 1;
float s = 1.0;
for(j = 2; j <= 100; j++)
{
k *= -1;
s += k * (1.0 / j);
printf("%f\n", s);
}*/
printf("1-1/2+1/4...-1/100的值是: %f\n", sum);
return 0;
}
5)已知 a,b,c 都是 1 位整数,求当三位数 abc+cba 的值为 1333 时 a,b,c 的值。
#include
int main()
{
int i, a, b, c;
for(a = 1; a <= 9; a++)
{
for(b = 1; b <= 9; b++)
{
for(c = 1; c <= 9; c++)
{
i = a*100+b*10+c+c*100+b*10+a;
if(i == 1333)
{
printf("a = %d,b = %d,c = %d\n", a, b, c);
}
}
}
}
return 0;
}
6)输出所有 200-400 以内能被 3 整除且个位数字为 7 的整数。
#include
int main()
{
int i;
printf("200--400以内能被 3 整除且个位数字为 7 的整数:\n");
for(i = 200; i <= 400; i++)
{
if(i % 3 == 0)
{
if(i % 10 == 7)
{
printf("%d\n", i);
}
}
}
return 0;
}
7)break continue
使用 break 和 continue 来分别显示一个 4 之后函数就不再打印 i。(i 的变化范围是 0~10)
#include
int main()
{
int i;
for(i = 0; i < 10; i++)
{
printf("break:%d ", i);
printf("\n");
if(i == 4)break;
}
for(i = 0; i < 10; i++)
{
if(i > 4)
continue;
printf("continue:%d ", i);
printf("\n");
}
return 0;
}
8)写一段程序,输入 x,输出 y 值。
x,x<1
y= 2x-1,1≤x<10
3x-11,x≥10
#include
int main()
{
int x;
printf("请输入x的值");
scanf("%d", &x);
if(x < 1)
{
printf("x < 1 时,y = %d\n", x);
}else if(x >= 1 && x < 10)
{
printf("1 <= x < 10 时,y = %d\n", 2 * x - 1);
}else
{
printf("x >= 10 时,y = %d\n", 3 * x - 11);
}
return 0;
}
二、巩固
1)编程计算 1! +2! +3! + …… +10!的值。
#include
int main()
{
int i;
int s;
int k = 1;
for(i = 1; i <= 10; i++)
{
k *= i;
s += k;
}
printf("%d\n", s);
return 0;
}
2)编程计算 1*2*3+3*4*5+……+99*100*101 的值。
#include
int main()
{
int i;
int s;
int k;
for(i = 2; i <= 100; i += 2)
{
k = (i - 1) * i * (i + 1);
s += k;
}
printf("%d\n", s);
return 0;
}
3)打印所有水仙花数。所谓水仙花是指一个三位数,其各位数字的立方和等于该数。 例如:153=1*1*1+5*5*5+3*3*3=1+125+27
#include
int main()
{
int i,g,s,b;
printf("水仙花数:\n");
for(i = 100; i <= 999; i++)
{
g = i % 10;
s = i / 10 % 10;
b = i / 100;
if(b*b*b+s*s*s+g*g*g == i)
{
printf("%d\n", i);
}
}
return 0;
}
4)输出 100 到 200 以内的所有素数(只能被本身或则 1 整除的数)
#include
int main()
{
int i;
int j;
for(i = 100; i < 200; i++)
{
for(j = 2; j <= i; j++)
{
if(i % j == 0)//判读是否只能被1和自身整除
{
//printf("%d不是素数\n", i);
break;
}
}
if(i == j)
{
printf("%d是素数\n", i);
}
}
return 0;
}
5)用 1元人民币兑换 5 分(20), 2 分(50), 1 分(100)的硬币共 50 枚, 每种 硬币至少 1 枚,问共有多少种兑换方案, 输出每一种方案三种硬币的数量。
#include
int main()
{
int i, j, k;
int count = 0;
for(i = 1; i < 20; i++)
{
for(j = 1; j < 50; j++)
{
for(k = 1; k < 100; k++)
{
if((i*5+j*2+k == 100) && (i+j+k == 50))
{
printf("5分:%d, 2分:%d, 1分:%d\n", i,j,k);
count ++;
}
}
}
}
printf("总共:%d种\n", count);
return 0;
}
6)已知银行定期存款利率为 r=2.25%,输入存款本金 x, 存款年数 n,输出本利之和 r=x(1+r)(1+r)(1+r),共 n 个(1+r).
#include
int main()
{
float r = 0.0225;
int x;
int n;
int i;
float s = 1.0;
printf("请输入本金x和年份n:");
scanf("%d%d", &x, &n);
for(i = 0; i < n; i++)
{
s *= (1 + r);
}
r = x + s;
printf("本利和:%.3f\n", r);
return 0;
}
7)输出 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
int main()
{
int i,j,s;
for(i = 1; i <= 10000; i++)
{
s = 0;//每次近来s都重新赋值
for(j = 1; j < i; j++)
{
if(i % j == 0)//判断完数
{
s += j;//完数相加
}
}
if(s == i)//完数相加后是否等于i
{
printf("%d\n", s);
}
}
}
8)有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13,... 求出这个数列的前 20 项之和。
#include
int main()
{
float i = 2.0;
float j = 1.0;
int k;
int n;
float s = 0;
for(n = 0; n < 20; n++)
{
s += i / j;
k = i;
i = i + j;
j = k;
}
printf("前20项和为:%.3f\n", s);
return 0;
}
9)求 Sn=a+aa+aaa+……+aa..aa(n 个 a)之值,其中 a 是一个数字,n 表示 a 的位数。例如: 2+22+222+2222+22222(此时 n=5),n 由键盘输入。
#include
int main()
{
int n;
int i;
int a = 0;
int tmp = 0;
int sum = 0;
printf("请输入n的值,和要计算的a的值:");
scanf("%d%d", &n, &a);
for(i = 0; i < n; i++)
{
tmp = tmp * 10 + a;//重点
sum += tmp;
printf("a = %d:\n", tmp);
}
printf("Sn = %d:\n", sum);
return 0;
}
10)输入一个字符,如果是大写字母则,将其以小写形式输出,如果是小写字母,则将其以大写形式输出。如果不是英文字母,则原样输出。
#include
int main()
{
char c;
printf("请输入一个字符:");
scanf("%c", &c);
if(c >= 'a' && c <= 'z')
{
printf("小写变大写:%c\n", c - 32);
}
else if(c >= 'A' && c <= 'Z')
{
printf("大写变小写:%c\n", c + 32);
}
else
{
printf("原样输出:%c\n", c);
}
return 0;
}
三、提高
1)输入正整数,将正整数分解质因数。质因数要满足两个条件:1)是这个数的因数;2)是质 数(素数) 如: 6=2*3 12=2*2*3。
#include
int main()
{
int i,n;
printf("请输入一个数:");
scanf("%d", &n);
printf("%d = ", n);
for(i = 2; i < n; i++)
{
if(n % i == 0)
{
printf("%d * ", i);
n /= i;
}
}
printf("%d\n", n);
return 0;
}
2)小猴摘了很多桃子,第一天吃了一半又多吃一个,第二天又吃掉一半再多吃一个,如此下 去,到第真十天恰好还剩一个桃子。问第一天小猴摘了多少桃子?
#include
int main()
{
int sum = 1;
for(int i=0;i<10;i++)
{
sum = 2*(sum+1);
}
printf("sum = %d\n",sum);
return 0;
}
3)两个乒乓球队进行比赛,各出 3 人。甲对为 A、B、C 3 人,乙队为 X、Y、Z 3 人。已抽签决定比赛名单。有人向队员打听比赛的名单,A 说他不和 X 比,C 说他不和 X、Z 比,编程找出 3 对赛手的名单。
#include
int main()
{
char A,B,C;
for(A='X';A<='Z';A++){
for(B='X';B<='Z';B++){
for(C='X';C<='Z';C++)
{
if(A!='X'&&C!='X'&&C!='Z'&&A!=B&&B!=C&&A!=C)
printf("A--%c B--%c C--%c\n",A,B,C);
}
}
}
}