【C语言】(交换两个数组内容,计算分数运算的值,编程计算指定区间整数出现9的次数)

今天的几道简单的题:

1.将数组A中的内容和数组B中的内容进行交换.(数组一样大)

2.计算1/1-1/2+1/3-1/4+1/5........+1/99-1/100的值

3.编写程序数一下1到100的所有整数中出现多少次数字9

有的题可能有很多种方法,在这里我只写了一种或者两种,以及一些小点;

编译环境:vs2013.

1.将数组A中的内容和数组B中的内容进行交换.(数组一样大)

这道题值得注意的有两点:
  1)在输入输出数组的时候可以用一个循环也可以用两个循环,在这里我用了两个循环.

  2)交换两个数值的时候有下列常见方法:

        a:创建一个临时变量来交换(temp = a;a = b;b = temp;)

        b:采用加减法     {a = a + b;  b = a - b;  a = a - b;}

        c:采用二进制异或的方法(就是我用的方法,这种方法可以防止数据溢出,用了一次后就爱上了)

          (a = a ^ b;  b = a ^ b; a = a ^ b;)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a[10];
	int b[10];
	printf("请输入a数组:");
	for (int i = 0; i < 10; ++i)
	{
		scanf("%d", a + i);
	}
	printf("请输入b数组:");
	for (int i = 0; i < 10; ++i)
	{
		scanf("%d", b + i);
	}
	for (int i = 0; i < 10; ++i)
	{
		a[i] ^= b[i];
		b[i] ^= a[i];    //采用异或的方法交换具体的两个值
		a[i] ^= b[i];
	}
	printf("交换后a[10]为:");
	for (int i = 0; i < 10; ++i)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
	printf("交换后b[10]为:");
	for (int i = 0; i < 10; ++i)
	{
		printf("%d ", b[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}

2.计算1/1-1/2+1/3-1/4+1/5........+1/99-1/100的值

  这道题值得注意是:

          1)和sum一定要定义为double类型的变量,因为不难想到之后的结果是有小数的,用int的话他就会输出一个整数,肯定是不太正确的.

         2)输出的时候一定不要写%d,而要写成%f,int类型才用%d,而double类型应该是%f.

   法一:     比较简单,用了一个循环,创建了一个变量t来改变下一项的正负.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	double sum = 0;
	int t = 1;    //创建一个变量,用来改变下一项的正负.
	for (int i = 1; i <= 100; ++i)
	{
		sum = sum + t*(1.0 / i);
		t = -t;
	}
	printf("%f\n", sum);
	system("pause");
	return 0;
}

法二:稍复杂一点,里面两个循环,分别计算奇数位和偶数位,最后运算得到结果.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	double sum = 0,sum1 = 0, sum2 = 0;
	for (int i = 1; i <= 99; i += 2)   //计算奇数位
	{
		sum1 = sum1 + 1.0 / i;
	}
	for (int i = 2; i <= 100; i += 2)  //计算偶数位
	{
		sum2 = sum2 + 1.0 / i;
	}
	sum = sum1 - sum2;
	printf("%f\n", sum);
	system("pause");
	return 0;
}

3.编写程序数一下1到100的所有整数中出现多少次数字9

这道题应该注意的是:

1)判断一个数中有几个9,应该判断它的个位和十位,而不只是个位,所以就要分别判断它的个位和十位判断是否为9.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int i;
	int count = 0;
	for (i = 1; i <= 100; ++i)
	{
		if (i % 10 == 9 | i / 10 == 9)         //判断个位
		{
			count++;
		}
	}
	printf("9出现的次数为:%d\n", count);
	system("pause");
	return 0;
}

那么我们来想一下,要是我要求一个很大的区间里面会出现多少次9呢?应该怎么办?

我们来优化一下算法:

    1)可以设置一个输入函数scanf,那么我们想求哪个区间的话都可以

   2)很大的数我们要是一位一位判断的话一定会非常的麻烦,总不至于判断几十行吧,所以我们可以设置一个循环,使得程序变的简单,每次%10 之后再给他除以10,循环进来再%10就可以得到下一位.

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	//通过程序计算出1~100的所有证书中出现多少次9;
	int left = 0, right = 0;    //所求区间左右值;
	int i = 0;
	int temp;
	int count = 0;              //用来计数
	printf("请输入所求区间:");
	scanf("%d %d", &left, &right);
	for (i = left; i <= right; ++i)
	{
		temp = i;              //创建一个临时变量来存储i的值;
		while (temp > 0)
		{
			if (temp % 10 == 9)
			{
				count++;
			}
			temp = temp / 10;
		}
	}
	printf("出现的9的次数为:%d\n", count);
	system("pause");
	return 0;
	
}

这样的话我们就可以求任意两个数之间出现9的次数了.

今天就分享这么多,谢谢观看^_^

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值