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;)
[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的次数了.
今天就分享这么多,谢谢观看^_^
- 1:交换两个数组内容,数组长度一致;2:计算1/1-1/2+1/3-...+1/999-1/100;3:计算0~100中9出现的次数
- 练习:数组内容交换、计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值、 编写程序数一下 1到 1000 的所有整数中出现多少次数字9
- 将数组A中的内容和数组B中的内容进行交换,计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,1到 100 的所有整数中出现多少次数字9。
- 两个数组内容交换、1~100中9出现的次数、三个数从大到小输出
- 【C语言】交换两个数组内容(数组一样大)
- 【C语言】交换两个数组内容(数组等大)
- 任意给定一整数数组,求两个元素之差的最大值和数组中出现次数最多的数
- [置顶] 【C语言】交换两个数组内容(数组等大)
- php编程: 怎样计算某一值在数组中重复出现的次数?
- C语言 实现两个数组内容交换
- 【C语言】计算输入整数中每个数字出现的次数
- 数组交换、计算求值、出现9的次数
- 【C语言】交换两个数组内容(数组一样大)
- 数组运算——出现次数最多的整数
- C语言- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字,编程实现。
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- 数组-10. 求整数序列中出现次数最多的数(15)
- ZOJ 1205题解本来是一道大数运算水题,可是却纠结了很久,原因是没能真正读懂题意,要求的计算必须是一一对应输出即使前面出现几个0最后也要把前面的0输出,看别人用C++自己还是两个都提交了结果还是C占的内存少。
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
- C语言,用数组实现结果为100000位内的大整数幂运算。