1. 若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是
A.
#include <stdio.h>
int main( )
{
int i;
int p;
for(i=1;i<=5;i++ )
{
p=1;
p*=i;
}
printf("5!=%d\n", p);
return 0;
}
每次执行循环体时, 变量p的值都重新置为1, 这不符合阶乘运算的规则.
B.
#include <stdio.h>
int main( )
{
int i;
int p;
i=1;
p=1;
while(i<=5)
{
p*=i;
i++;
}
printf("5!=%d\n", p);
return 0;
}
C.
#include <stdio.h>
int main( )
{
int i;
int p;
for(i=1,p=1;i<=5;i++)
{
p*=i;
}
printf("5!=%d\n", p);
return 0;
}
D.
#include <stdio.h>
int main( )
{
int i;
int p;
i=1;
p=1;
do{
p*=i;
i++;
}while(i<=5);
printf("5!=%d\n", p);
return 0;
}
2. 以下程序执行后的输出结果是
#include <stdio.h>
int main( )
{
int x=0,y=5,z=3;
while(z-->0 && ++x<5)
{
y=y-1;
}
printf("%d, %d, %d", x, y, z);
return 0;
}
[分析]
对程序做出修改, 使得每一次进入循环后程序都输出当前x、y、z的值.
#include <stdio.h>
int main( )
{
int x=0,y=5,z=3;
while(z-->0 && ++x<5)
{
y=y-1;
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
printf("%d, %d, %d", x, y, z);
return 0;
}
[运行结果]
对题目所给程序做出修改, 观察两个程序的运行结果是否相同(z的值不同).
#include <stdio.h>
int main( )
{
int x=0,y=5,z=3;
while(z>0 && x<5)
{
y=y-1;
z--;
x++;
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
printf("%d, %d, %d", x, y, z);
return 0;
}
3.
4. 我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。用100元买100只鸡,问公鸡、母鸡和小鸡各能买多少只?
[解法1]
#include<stdio.h>
int main()
{
short x, y;//x -> 公鸡, y -> 母鸡
short counter=0;
printf("公鸡 母鸡 小鸡\n");
for(x=0;x<=20;x++)
{
for(y=0;y<=33;y++)
{
//若小鸡的数量能被3整除, 则小鸡的钱数为整数.
//反之若小鸡的数量不能被3整除, 则小鸡的钱数会带小数, 加上母鸡和公鸡的钱数不可能为整数.
if((100-x-y)%3==0)
{
if(x*5+y*3+(100-x-y)/3==100)
{
printf("%5d%5d%5d\n", x, y, 100-x-y);
}
}
counter++;
}
}
printf("求解过程共执行%hd次循环.\n", counter);
//
return 0;
}
[解法2](程序执行效率大幅提升)
#include<stdio.h>
int main()
{
short x, y;//x -> 公鸡, y -> 母鸡
short counter=0;
printf("公鸡 母鸡 小鸡\n");
for(x=0;x<=20;x++)
{
for(y=0;y<=33;y++)
{
//若当前的钱数已超过100元, 直接跳出内层循环
if(x*5+y*3+(100-x-y)/3.0>100)
{
break;
}
//
//若小鸡的数量能被3整除, 则小鸡的钱数为整数.
//反之若小鸡的数量不能被3整除, 则小鸡的钱数会带小数, 加上母鸡和公鸡的钱数不可能为整数.
if((100-x-y)%3==0)
{
if(x*5+y*3+(100-x-y)/3==100)
{
printf("%5d%5d%5d\n", x, y, 100-x-y);
}
}
counter++;
}
}
printf("求解过程共执行%hd次循环.\n", counter);
//
return 0;
}