您的位置:首页 > 编程语言 > C语言/C++

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

2018-12-02 22:07 363 查看

今天的几道简单的题:

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;)

[code]#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来改变下一项的正负.

[code]#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;
}

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

[code]#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.

[code]#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)         //判断个位
{
count++;
}
if (i / 10 == 9)         //判断十位
{
count++;
}
}
printf("9出现的次数为:%d\n", count);
system("pause");
return 0;
}

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

我们来优化一下算法:

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

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

代码如下:

[code]#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的次数了.

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

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐