0
点赞
收藏
分享

微信扫一扫

C程序设计(谭浩强版)第二章课后习题

独西楼Q 2022-01-04 阅读 54
c语言

1.有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换

(即A瓶原来盛醋,现改成酱油,B瓶则相反)

显然如果只有两个瓶子是不行的,需要有第三个空瓶子C的加入

步骤如下:


2.依次将十个数输入,要求输出其中最大的数

先讲一下思路

这题我用的是数组+循环的方式

代码实现:

int a [ 10 ];
	printf( "请依次输入十个需要比较的数字:\n" );
	for ( int i = 0; i < 10;i++ ) {
		scanf_s( "%d", &a[i] );
	}
	for ( int i = 0; i < 10;i++ ) {
		for ( int j = i + 1; j < 11;j++) {
			if (a[i]<a[j] ) {
				int t;
				t = a [ i ];
				a [ i ] = a [ j ];
				a [ j ] = t;
			}
		}
	}
	printf( "排序好了的序列:\n" );
	for ( int i = 0; i < 10;i++ ) {
		printf( "%2d", a[i] );
	}
	printf( "\n" );
	printf( "其中最大的数为:\n%d", a [ 0 ] );

运行结果如图:

 


3.有3个数a,b,c,要求按大小顺序把他们输出

先判断

int a, b, c;
	printf( "请输入三个数字:\n" );
	scanf_s( "%d %d %d", &a, &b, &c );
	if (a>b ) {
		int t;
		t = b;
		b = a;
		a = t;
	}
	if (a>c ) {
		int t;
		t = c;
		c = a;
		a = t;
	}
	if (b>c ) {
		int t;
		t = c;
		c = b;
		b = t;
	}
	
	printf( "%d %d %d", a, b, c );

运行结果如下:

 


4.求1+2+3+...+100

代码如下:

int sum = 0;
	for ( int i = 1; i <= 100;i++ ) {
		sum += i;
	}
	printf( "%d", sum );

运行结果如下:

 


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

条件并列用&&这个逻辑运算符

int n;
	printf( "请输入需要判断的数字:\n" );
	scanf_s( "%d", &n );
	if (n%3==0&&n%5==0 ) {
		printf( "%d可以同时被3和5整除", n );	
	}
	else {
		printf( "%d不可以同时被3和5整除", n );
	}

运行结果:

 


6.将100-200之间的素数输出 

素数:除了1和它本身以外不再有其他因数的自然数。

比如3就是素数

判断素数就判定他的平方根,看平方根是否整除(2-他的平方根的整数),

如果能整除,则是素数,反之则不是.

例如

判断24,24在4-5之间,那么我们就只需要判断24能否整除在2-他的平方根这个范围内的整数即可,

可能我讲的有点迷糊

可以看一下这个老哥写的更清楚些

http://c.biancheng.net/view/498.html

这里直接附代码了 :

#include<stdio.h>
#include<math.h>
int main(){

int prime( int i );//函数声明
printf( "100-200的素数为:\n" );
for ( int i = 100; i <= 200;i++ ) {
		prime( i );
    }
return 0;
}
int prime( int i) {
	
	int j = ( int ) sqrt( i );
	int k;
	for (  k = 2; k <= j;k++ ) {
		if (i%k==0 ) {
			break;
		}
	}
	if ( k > j )
		printf( "%d是素数\n",i );
	
}

这里我用了一个函数来进行包裹,看起来更清爽些.

运行结果:

 


7.求两个数m和n的最大公约数

我用的是转转相除法求得最大公约数和最小公倍数

不理解思路的可以看看我这篇文章https://blog.csdn.net/weixin_44143600/article/details/118979768?spm=1001.2014.3001.5501

这里我就直接附代码了

int sum=0;
	
	int n, m,r;
	printf( "请输入需要计算的两个数字:\n" );
	scanf_s( "%d %d", &n, &m );
	if (n<m ) {
		int t;
		t = n;
		n = m;
		m = t;
	}
	sum = n * m;
	while ( m!=0 )
	{
		r = n % m;
		n = m;
		m = r;
	}
	printf( "最大公约数是:%d\n", n );
	printf( "最小公倍数是:%d\n", sum/n );

运行结果:

 


8.求一元二次方程的根\tiny ax^2+bx+c=0

平方根函数sqrt

代码如下:

double a, b, c,x1,x2;

		printf( "请输入方程的三个系数:\n" );
		scanf_s( "%lf %lf %lf", &a, &b, &c );
		double del = pow( b, 2 ) - 4 * (a * c);
		x1 = ( ( -b ) + sqrt( del ) ) / 2;
		x2 = ( ( -b ) - sqrt( del ) ) / 2;
		if (del>0 ) {
			printf( "方程有两个实根\n" );
			printf( "分别是\n" );
			printf( "x1=%lf\n", x1 );
			printf( "x2=%lf\n", x2 );
		}
		else if (del==0 ) {
			printf( "方程有一个实根\n" );
			printf( "x1=x2=%lf\n", x1 );
		}
		else {
			printf( "此方程无解!" );
		}

运行结果:

两个实数根:

 两个相等的实数根:

 无实数根:

 有做错的地方欢迎指正!

发私信评论都可!

举报

相关推荐

0 条评论