C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

时间:2023-03-09 04:42:17
C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

C语言程序小练习

1、用C语言设计程序算出1-1/2+1/3-14+1/5。。。+1/99-1/100的值

#include<stdio.h>
int main()
{
int i=;
double a=1.0,b=2.0,sum;
while(b<=)
{
i=-i;
sum=i/b;
a=a+sum;
b=b+;
}
printf("%f\n",a);
return ;
}

2、用C语言设计程序算出1x2x3x4x5的值

 #include<stdio.h>
int main()
{
int t,i;
t=;
i=;
while(i<=)
{
t=t*i;
i=i+;
}
printf("%d\n",t);
return ;
}

版本1

 #include<stdio.h>
int main()
{
int i,s=;
for(i=;i<;i++)
{
s=s*i;
}
printf("%d\n",s);
return ;
}

版本2

3,、用C语言设计程序算出两个数的最大值

 //第一种
#include<stdio.h>
int main()
{
int a,b;
scanf("%d,%d",&a,&b);
if(a<b)a=b;
printf("%d\n",a);
return ;
} //第二种
#include<stdio.h>
int main()
{
int max(int x,int y);//声明max函数
int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b);//调用下面定义的max函数
printf("%d\n",c);
return ;
} int max(int x,int y)
{
if(x>y)return(x);
else return(y);
}

4、用C语言设计程序算出三个数中的最大值

 //第一种
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
if(a<b)a=b;
if(a<c)a=c;
printf("%d\n",a);
return ;
} //第二种
#include<stdio.h>
int main()
{
int max(int x,int y,int z);
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
int temp=max(a,b,c);
printf("%d\n",temp);
return ;
}
int max(int a,int b,int c)
{
int max2(int x,int y);
int num=max2(a,b);
int result=max2(num,c);
return(result);
}
int max2(int x,int y)
{
if(x>y)return(x);
else return(y);
} //第三种
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
{
if(a<c)a=c;
}
else
{
if(b>c)a=b;
else a=c;
}
printf("%d\n",a);
return ;
}
//还有很多。。。

5、用C语言设计程序算出1到12之间奇数的乘积

 #include<stdio.h>
int main()
{
int i,s=;
for(i=;i<;i++)
{
if(i%!=)//取模(余数),不为零i为奇数不能被整除,否则能被整除为偶数
s=s*i;
else
continue; }
printf("%d\n",s);
return ;
}
 #include<stdio.h>
int main()
{
int t,i;
t=;
i=;
while(i<)
{
if(i%!=)
t=t*i;
i=i+;
}
printf("%d\n",t);
return ;
}

版本二

课后习题P36

8.1、输出1900——2000年中是闰年的年份,符合下面两个条件之一的年份是闰年

  1)能被4整除,但不能被100整除;

  2)能被100整除,且能被400整除。

 #include<stdio.h>
int main()
{
int i;
for(i=;i<=;i++)
{
if((i%== && i%!=)|| i%==) //闰年的经典判断条件
printf("%d is a leap year!\n",i);
else
printf("%d is not a leap year!\n",i); }
return ;
}

4.1、两数互换

 //互换值的位置
#include<stdio.h>
int main()
{
int a,b,c;
printf("输入两个值并互换>>: \n");
scanf("%d,%d",&a,&b);
c=a;
a=b;
b=c;
printf("%d %d\n",a,b);
return ;
} //经典互换,把大的值放第一位
#include<stdio.h>
int main()
{
int a,b,c;
printf("请输入两个值并互换>>: \n");
scanf("%d,%d",&a,&b);
if(a<b)
{
c=b;
b=a;
a=c;
}
printf("%d %d\n",a,b);
return ;
}

互换位置

4.2、依次将10个数输入,要求输出其中最大的数。

 #include<stdio.h>
int main()
{
int i,a[],s=;
printf("请输入10个数字>>: \n");
for(i=;i<=;i++)
{
scanf("%d",&a[i]);
}
for(i=;i<=;i++)
{
if(s<a[i])
s=a[i];
}
printf("最大的数是: %d\n",s);
return ;
}

4.3、按大小顺序输出一些数

 #include<stdio.h>
int main()
{
int i,j,a[],s=;
printf("请输入三个整数>>: \n");
for(i=;i<;i++)
{
scanf("%d",&a[i]);//存储输入数值
}
for(i=;i<;i++) //双循环
{
for(j=i+;j<;j++)//第二个循环到n-1,第二个循环到n,
if(a[i]<a[j])//每次拿前面的数与后面的数比较,即把小的数值与下一个数比较
//小于号表示从大到小,大于号表示从小到大排列
{
s=a[i];
a[i]=a[j];
a[j]=s;
}
}
for(i=;i<;i++)//重新定义循环输出数组中新排列的数
printf("%d-",a[i]);
return ;
}

输入三个数

 #include<stdio.h>
int main()
{
int i,j,a[],s=;
printf("请输入三个整数>>: \n");
for(i=;i<;i++)
{
scanf("%d",&a[i]);//存储输入数值
}
for(i=;i<;i++) //双循环
{
for(j=i+;j<;j++)//第二个循环到n-1,第二个循环到n,
if(a[i]<a[j])//每次拿前面的数与后面的数比较,即把小的数值与下一个数比较
//小于号表示从大到小,大于号表示从小到大排列
{
s=a[i];
a[i]=a[j];
a[j]=s;
}
}
for(i=;i<;i++)//重新定义循环输出数组中新排列的数
printf("%d-",a[i]);
return ;
}

输入五个数

4.4、求1+2+3+4+5+···+100。

 #include<stdio.h>
int main()
{
int i=,t=;
while(i<)
{
i=i+;//最后一个数99+1=100
t=t+i;
}
printf("sum is %d\n",t);
return ;
}

while循环

 #include<stdio.h>
int main()
{
int i,sum=;
for(i=;i<=;i++)
sum=sum+i;
printf("sum is %d\n",sum);
return ;
}

for循环

4.5、判断一个数n能否同时被3和5整除。

 #include<stdio.h>
int main()
{
int n;
printf("输入一个整数能被3和5整除返回TRUE否则返回FALSE!\n");
printf("输入>>: ");
scanf("%d",&n);
if(n%==&&n%==)
printf("TRUE\n");
else
printf("FALSE!\n");
return ;
}

4.6、将100~~200之间的素数输出。

 #include<stdio.h>   //采用调用函数和求根取素.
#include<math.h> //下面用到sqrt,所以需要包含数据函数.sqrt是求根,属数学函数. int main()
{
int prime_number(int m);//要先声明
int i;
for (i=; i<=; i++) //指定区间
{
if(prime_number(i) == ) //i是实参,传入形参m中进行运算,然后再由形参j带出返回
printf("%d \n ",i);
}
return ;
}
int prime_number(int m) //m是形参,用于接收实参i给的值
{
int j,k;
k=(int)sqrt(m); //求根,(int)是强制转换,求根里要是浮点型.
for(j=;j<=k;j++)
{
if(m%j==)
return ; //返回值,0为不是素数,1是素数
}
return ;
}

4.7、求两个数m和n的最大公约数。

 #include<stdio.h>
int main()
{
int m,n,c;
int gcd(int x,int y);
printf("请输入两个数>>: \n");
scanf("%d,%d",&m,&n);
c=gcd(m,n); //获取最大公约数
printf("%d 和 %d 的最大公约数是:%d\n",m,n,c);
return ;
}
int gcd(int x,int y)
{
int temp;
while(x%y!=)
{
temp=y;
y=x%y;
x=temp;
}
return y;
} 最大公约数

最大公约数

补充:最小公倍数

 #include<stdio.h>
int main()
{
int lcm(int x,int y);
int m,n,c;
printf("请输入两个数>>: \n");
scanf("%d,%d",&m,&n);
c=lcm(m,n);
printf("最小公倍数是: %d\n",c);
return ;
}
int lcm(int x,int y)
{
int i,temp;
if(x<y) //保证x,y中较大的数在x上,小的数在y上,小于号降序,大于号升序。
{ //下面三行是经典代码,实现两个数互换
temp=x;
x=y;
y=temp;
}
for(i=;i<=y;i++)//设定一个区间,从1到小的数之间的循环
{
if(!((x*i)%y)) //反复运算,直到取模无余数,那么小的数x乘以区间当前的i值,就是最小公倍数
{
return x*i;
}
}
} 最小公倍数

最小公倍数

 #include<stdio.h>
int main()
{
int gcd(int x,int y);
int lcm(int x,int y);
int m,n,c,d;
printf("输入两个数字: \n");
scanf("%d,%d",&m,&n);
c=gcd(m,n);
d=lcm(m,n);
printf("最大公约数是: %d\n",c);
printf("最小公倍数是: %d\n",d);
return ;
}
int gcd(int x,int y)
{
int temp;
while(x%y!=)
{
temp=y;
y=x%y;
x=temp;
}
return y;
}
int lcm(int x,int y)
{
int i,temp;
if(x<y)
{
temp=y;
y=x;
x=temp;
}
for(i=;i<=y;i++)
{
if(!((x*i)%y))
{
return x*i;
}
}
}

综合