c语言程序设计课后习题答案
课后作业是为巩固学习效果而安排的作业,是课堂教学过程中的非常重要的组成部分,是巩固新授知识,形成技能技巧,培养良好的思维品质,发展学生智力的重要途径,是课堂教学过程中不可跨越的一环。今天学习啦小编分享了c语言程序设计课后习题答案,一起来学习。
c语言程序设计课后习题答案
例1、求100到999之间的所有水仙花数。
#include
void main(void)
{
int n,b,s,g;
for(n=100;n<=999;n++){
b = n/100;
s = (n-b*100)/10;
g = (n%100)%10;
if( b*b*b+s*s*s+g*g*g == n)printf("%d\n",n);
}
}
例2、求两个整数的最大公约数和最小公倍数
gcd(x,y) = gcd(x, x% y )
lcm(x,y) =(x×y)/gcd(x,y)
#include
void main(void)
{
int x,y,r,n,gcd,lcm;
scanf("%d%d",&x,&y);
n = x*y;
r=x%y;
gcd=y;
while(r!=0)
{
x=y;
y=r;
r=x%y;
gcd=y;
}
lcm = n/gcd;
printf("gcd=%d lcm=%d\n",gcd,lcm);
}
例3、将一张面值是100元的钱等值转换为5元、1元和0.5元的零钞,要求每种零钞至少一张,求所有的兑换方式。
#include
void main(void)
{
int i,j,k;
for(i=1;i<=20;i++){
for(j=1;j<=100;j++){
for(k=1;k<=200;k++){
if( i*5+j+0.5*k == 100 )
printf("%d %d %d\n",i,j,k);
}
}
}
}
例4、求爱因斯坦数学问题:有一条长台阶,若每步跨2阶,则最后剩余1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,则最后剩5阶,若每步跨7阶,则最后正好一阶不剩。求台阶长度。
#include
void main(void)
{
int n;
n=7;
while(1){
if( (n%2==1) && (n%3==2) &&
(n%5==4) && (n%6==5) )break;
n=n+7;
}
printf("%d\n",n);
}
例5、验证歌德巴赫猜想(任意一个大于6的偶数都可以分解为两个素数之和),验证范围是6~2000的偶数。
#include
#include
void main(void){
int n,i,k1,k2;
int isPrimeFlag1,isPrimeFlag2;
for(n=6;n<=100;n+=2){
for(k1=3;k1
isPrimeFlag1=1; //假设是素数
for(i=3;i<=sqrt(k1);i+=2){
if(k1%i==0){isPrimeFlag1=0;break;}
}
if( isPrimeFlag1==0 )continue;
k2=n-k1;
isPrimeFlag2=1; //假设k2是素数
for(i=3;i<=sqrt(k2);i+=2){
if(k2%i==0){isPrimeFlag2=0;break;}
}
if(isPrimeFlag1 && isPrimeFlag2 ){
printf("%d=%d+%d\n",n,k1,k2);
break;
}
}
}
}
例6、已知一正整数递增等差数列,前5项的和是25,前5项的积是945,根据上述条件,输出该数列的前10项。
#include
void main(void)
{
int a,d,i,s,r,x;
for(a=1;a<5;a++){
for(d=1;d<5;d++){
s=0; r=1;
for(i=0;i<5;i++){
x=a+d*i; s=s+x; r=r*x;
}
if(s==25 && r==945 )goto loop_exit;
}
}
loop_exit:
for(i=0;i<19;i++){
x=a+d*i; printf("%d\n",x);
}
}
例7、A、B、C、D和E合伙捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方休息。日上三竿,A第一个醒来,他将鱼分为五份,把多余的一条扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条扔掉,拿走自己的一份。C、D、E依次醒来,也按同样的方法分鱼。求他们合伙至少捕了多少鱼。
#include
void main(void)
{
int zs,n,i,flag;
zs=6;
while(1){
flag=1;n=zs;
for(i=0;i<5;i++){
if( n%5 !=1 ){flag=0;break;}
n=n-(n-1)/5;
}
if(flag==1)break;
n = ++zs;
}
printf("%d\n",zs);
}
例8、一辆卡车违反交通规则,撞人逃跑。现场有三个目击证人,但没有记住车号,只记下一些车号的特征。甲说:牌照的前两位数字相同;乙说:牌照的后两位数字是相同的;丙说:四位的车号刚好是一个整数的平方。根据上述线索求车号。
#include
#include
void main(void)
{
int n,x,k1,k2,k3,k4;
for(n=1000;n<=9999;n++){
x=(int)sqrt(n);
if(x*x != n)continue;
k1 = n/1000;
k2 = (n-k1*1000)/100;
k3 = (n-k1*1000-k2*100)/10;
k4 = (n-k1*1000-k2*100-k3*10);
if(k1==k2 && k3==k4 )printf("%d\n",n);
}
}
例9、某数组有20个元素,编程序将该数组中的所有元素逆序存储并输出。即用第一元素和最后一个元素对调,第二和最后一个对调。
#include
#include
void main(void)
{
int a[20],i,j,t;
for(i=0;i<20;i++)a[i]=i+1;
for(i=0,j=19;i
t=a[i];a[i]=a[j];a[j]=t;
}
for(i=0;i<20;i++)printf("%d\n",a[i]);
}
例10、编程序,输入一个十进制数,将其转换为二进制后存储到一个字符数组中。
#include
#include
void main(void){
int x,r,i=0,j;
char a[100]={0},t;
scanf("%d",&x);
while(1){
r=x%2; a[i++]=48+r; x=x/2;
if(x==0)break;
}
for(i=0,j=strlen(a)-1;i
t=a[i];a[i]=a[j];a[j]=t;
}
printf("%s\n",a);
}
例11、编程序求二维数组中最小元素所在的行和列。
#include
#include
#include
void main(void)
{
int a[4][5],i,j,max,row,col;
srand( (unsigned)time( NULL ) );
for(i=0;i<4;i++ )
for(j=0;j<5;j++)a[i][j]=rand();
max=a[0][0];row=0;col=0;
for(i=0;i<4;i++){
for(j=0;j<5;j++){
if(max>a[i][j]){max=a[i][j];row=i;col=j;}
}
}
printf("i=%d j=%d\,",i,j);
}
例12、编程产生3×4的矩阵A,并输出他经过行列互换后的矩阵B。
#include
#include
#include
void main(void)
{
int a[3][4],b[4][3],i,j;
srand( (unsigned)time( NULL ) );
for(i=0;i<3;i++ )
for(j=0;j<4;j++)a[i][j]=rand();
for(i=0;i<3;i++){
for(j=0;j<4;j++){
b[j][i]=a[i][j];
}
}
for(i=0;i<3;i++){
printf("\n");
for(j=0;j<4;j++){
printf("%6d",a[i][j]);
}
}
printf("\n");
for(i=0;i<4;i++){
printf("\n");
for(j=0;j<3;j++)printf("%6d",b[i][j]);
}
}
例13、不使用字符串比较函数strcmp,实现两个字符串的比较。
#include
#include
void main(){
char s1[300], s2[300];
int result, i=0;
scanf("%s%s",s1, s2 );
while( s1[i] && s2[i] && s1[i] == s2[i] ) i++;
result = s1[i]-s2[i];
if ( result == 0 ) printf(" s1等于s2 ");
else if( result > 0 ) printf(" s1大于s2 ");
else printf(" s1小于s2 ");
}
例14、判断字符串s1中是否包含字符串s2。
#include
#include
void main(void){
char s1[100],s2[100];
int i,j,len,flag;
gets(s1);gets(s2);
len = strlen(s2);
for(i=0;i<=strlen(s1)-len;i++){
flag=1;
for(j=0;j
if( s1[i+j]!=s2[j] ){flag=0;break;}
}
}
if(flag==1)printf("包含!\n");
else printf("不包含!\n");
}
以上是学习啦小编整理了c语言程序设计课后习题答案,有帮助到你吗?