例4-8:求最值问题,输入一批学生的成绩,找出最高分。
思路1:先输入一个正整数n,代表数据的个数,然后在输入n个数据,循环重复n次,属于指定次数的循环,用for语句。
#include <stdio.h>
int main()
{
int n,mark,max,i;
printf("Enter n:");
scanf("%d",&n);
printf("Enter %d marks:",n);
scanf("%d",&mark);//读入第一个成绩
max=mark;//假设第一个成绩是最高分
for (i = 1; i < n; i++)
{
scanf("%d",&mark);//读入下一个成绩
if(max<mark)//比较
max=mark;
}
printf("Max=%d\n",max);
return 0;
}
思路2:设定一个特殊数据(伪数据)作为循环的结束标志,由于成绩都是正数,选用一个负数作为输入的结束标志。由于循环次数未知,考虑使用while语句。
#include <stdio.h>
int main()
{
int max, mark;
printf("Enter marks:");
scanf("%d", &mark);
max = mark;
while (mark >= 0)
{
if (mark > max)
max = mark;
scanf("%d", &mark);
}
printf("MAX=%d", max);
return 0;
}
例4-9:逆序问题,输入一个正整数,将其逆序输出。例如,输入12345,输出54321。
#include <stdio.h>
int main()
{
int n;
printf("Enter n:");
scanf("%d", &n);
while (n != 0)
{
printf("%d", n % 10); //分离一位
n = n / 10; //为下一次分离做准备
}
return 0;
}
例4-10:素数问题,求100以内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
1:
#include <stdio.h>
int main()
{
int count = 0, i, m;
for (m = 2; m <= 100; m++)
{
for (i = 2; i <= m / 2; i++)
if (m % i == 0)
break;
if (i > m / 2)
{
printf("%6d", m);
count++;
if (count % 10 == 0)
printf("\n");
}
}
printf("\n");
return 0;
}
2
#include <stdio.h>
#include <math.h>
int main()
{
int count = 0, i, m, n;
for (m = 2; m <= 100; m++)
{
n = sqrt(m);
for (i = 2; i <= n; i++)
if (m % i == 0)
break;
if (i > n)
{
printf("%6d", m);
count++;
if (count % 10 == 0)
printf("\n");
}
}
printf("\n");
return 0;
}
例4-11:斐波那契数列问题。输出斐波那契数列的前10项:1.2.3.5.8.13.21.34.55。
#include <stdio.h>
int main()
{
int i, x1, x2, x;
x1 = 1;
x2 = 1;
printf("% 6d% 6d", x1, x2);//先输出头两项
for (i = 1; i <= 8; i++)//循环输出后8项
{
x = x1 + x2;//计算新的一项
printf("%6d", x);
x1 = x2;//更新x1和x2,为下一次计算作准备
x2 = x;
}
printf("\n");
return 0;
}
例4-12:穷举算法。某工地需要搬运砖块,已知男人1人搬3块,女人一人搬2块,小孩两人人搬一块。有多少种搬法用45人正好搬45块砖?
#include <stdio.h>
int main()
{
int men,women,child;
for(men=0;men<=15;men++)
for(women=0;women<=22;women++)
{
child=45-men-women;
if(men*3+women*2+child*0.5==45)
printf("men=%d,women=%d,child=%d\n",men,women,child);
}
return 0;
}
练习4-10:找出最小值:输入一个正整数n,再输入n个整数,输出最小值。试编写相应程序。
#include <stdio.h>
int main()
{
int min,mark,n,i;
printf("Enter n:");
scanf("%d",&n);
printf("Enter %d marks:",n);
scanf("%d",&mark);
min=mark;
for(i=1;i<n;i++)
{
scanf("%d",&mark);
if (mark<min)
{
min=mark;
}
}
printf("MIN=%d\n",min);
return 0;
}
练习4-11:统计素数并求和,输入2个正整数m和n(1≤m≤n≤500),统计并输出m和n之间的素数的个数以及这些素数的和。素数就是只能被1和自身整除的数,1不是素数,2是素数。
#include <stdio.h>
int main()
{
int m, n;
int i;
int count = 0;
int sum = 0;
printf("Enter two number m n:");
scanf("%d%d", &m, &n);
if (m == 1)
{
m = 2;
}
for (i = m; i <= n; i++)
{
int isPrime = 1;
int k;
for (k = 2; k < i - 1; k++)
{
if (i % k == 0)
{
isPrime = 0;
break;
}
}
if (isPrime)
{
count++;
sum += i;
}
}
printf("%d %d\n", count, sum);
return 0;
}