大家好,今天给大家分享的是C语言经典题目第三部作品。
一.计算一个数是否可以等于两个素数之和
素数定义:除1和这个数本身之外,不能被其它数整除的数。
#include <stdio.h> // 判断素数 int checkPrime(int n) { int i, isPrime = 1; for(i = 2; i <= n/2; ++i) { if(n % i == 0) { isPrime = 0; break; } } return isPrime; } int main() { int n, i, flag = 0; printf("输入正整数: "); scanf("%d", &n); for(i = 2; i <= n/2; ++i) { // 检测判断 if (checkPrime(i) == 1) { if (checkPrime(n-i) == 1) { printf("%d = %d + %d\n", n, i, n - i); flag = 1; } } } if (flag == 0) printf("%d 不能分解为两个素数。", n); return 0; }
输出结果如下:
输入正整数: 34 34 = 3 + 31 34 = 5 + 29 34 = 11 + 23 34 = 17 + 17
注意:这里判断素数的上限是n/2是因为这里的运算符是取模运算符,从n/2开始往后到n的数就相当于从1开始到n/2的数,它们取模之后的值是一一对应的,这是我的理解。
二.二进制转化为十进制
#include <stdio.h> #include <math.h> int convertBinaryToDecimal(long long n); int main() { long long n; printf("输入一个二进制数: "); scanf("%lld", &n); printf("二进制数 %lld 转换为十进制为 %d", n, convertBinaryToDecimal(n)); return 0; } int convertBinaryToDecimal(long long n) { int decimalNumber = 0, i = 0, remainder; while (n!=0) { remainder = n%10; n /= 10; decimalNumber += remainder*pow(2,i); ++i; } return decimalNumber; }
输出结果如下:
输入一个二进制数: 110110111 二进制数 110110111 转换为十进制为 439
三.十进制转化为二进制
#include <stdio.h> #include <math.h> long long convertDecimalToBinary(int n); int main() { int n; printf("输入一个十进制数: "); scanf("%d", &n); printf("十进制数 %d 转换为二进制位 %lld", n, convertDecimalToBinary(n)); return 0; } long long convertDecimalToBinary(int n) { long long binaryNumber = 0; int remainder, i = 1, step = 1; while (n!=0) { remainder = n%2; printf("Step %d: %d/2, 余数 = %d, 商 = %d\n", step++, n, remainder, n/2); n /= 2; binaryNumber += remainder*i; i *= 10; } return binaryNumber; }
输出结果如下:
输入一个十进制数: 100 Step 1: 100/2, 余数 = 0, 商 = 50 Step 2: 50/2, 余数 = 0, 商 = 25 Step 3: 25/2, 余数 = 1, 商 = 12 Step 4: 12/2, 余数 = 0, 商 = 6 Step 5: 6/2, 余数 = 0, 商 = 3 Step 6: 3/2, 余数 = 1, 商 = 1 Step 7: 1/2, 余数 = 1, 商 = 0 十进制数 100 转换为二进制位 1100100
四.字符串翻转
1.使用递归
#include <stdio.h> void reverseSentence(); int main() { printf("输入一个字符串: "); reverseSentence(); return 0; } void reverseSentence() { char c; scanf("%c", &c); if( c != '\n') { reverseSentence(); printf("%c",c); } }
输出结果如下:
输入一个字符串: guoxize ezixoug
五.计算数组的平均值
1.使用for循环
#include <stdio.h> int main() { int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int sum, loop; float avg; sum = avg = 0; for(loop = 0; loop < 10; loop++) { sum = sum + array[loop]; } avg = (float)sum / loop; printf("平均值为 %.2f", avg); return 0; }
2.使用scanf来控制
#include <stdio.h> int main(void) { float x; printf("请输入数字:(输入q退出)"); int i=0; float status; float sum=0; float avg=0; status=scanf("%f", &x); while ( status==1 ) { sum+=x; printf("请输入数字:(输入q退出)"); status=scanf("%f", &x); i++; } avg=sum/(i); printf("%.2f",avg); return 0; }
注意:scanf的返回值是参数的个数,也即在while里面scanf函数返回值是1
六.找出数组元素最大值
1.for循环
#include <stdio.h> int main() { int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int loop, largest; largest = array[0]; for(loop = 1; loop < 10; loop++) { if( largest < array[loop] ) largest = array[loop]; } printf("最大元素为 %d", largest); return 0; }
2.巧妙运用三目运算符
1.#include <stdio.h> int main(){ int n[]={3,2,1,4,7,6,5,8,0,9}; int largest,i,num; num= sizeof(n)/sizeof(n[0]); for(i=0;i<num;i++) largest=(n[i] > largest)? n[i] : largest; printf("Largest Number is:%d",largest); }
七.数组的拆分
1.将一个数组分为奇数数组与偶数数组
#include <stdio.h> int main() { int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int even[10], odd[10]; int loop, e, d; e = d = 0; for(loop = 0; loop < 10; loop++) { if(array[loop]%2 == 0) { even[e] = array[loop]; e++; }else { odd[d] = array[loop]; d++; } } printf(" 原始数组 -> "); for(loop = 0; loop < 10; loop++) printf(" %d", array[loop]); printf("\n 偶数 -> "); for(loop = 0; loop < e; loop++) printf(" %d", even[loop]); printf("\n 奇数 -> "); for(loop = 0; loop < d; loop++) printf(" %d", odd[loop]); return 0; }
输出结果如下:
原始数组 -> 0 1 2 3 4 5 6 7 8 9 偶数 -> 0 2 4 6 8 奇数 -> 1 3 5 7 9
2.将一奇一偶的数组合并成一个数组
#include <stdio.h> int main() { int array[10]; int even[5] = {0, 2, 4, 6, 8}; int odd[5] = {1, 3, 5, 7, 9}; int loop, index, e_len, o_len; e_len = o_len = 5; index = 0; for(loop = 0; loop < e_len; loop++) { array[index] = even[loop]; index++; } for(loop = 0; loop < o_len; loop++) { array[index] = odd[loop]; index++; } printf("\n偶数 -> "); for(loop = 0; loop < e_len; loop++) printf(" %d", even[loop]); printf("\n奇数 -> "); for(loop = 0; loop < o_len; loop++) printf(" %d", odd[loop]); printf("\n合并后 -> "); for(loop = 0; loop < 10; loop++) printf(" %d", array[loop]); return 0; }
输出结果如下:
偶数 -> 0 2 4 6 8 奇数 -> 1 3 5 7 9 合并后 -> 0 2 4 6 8 1 3 5 7 9
八.将一个数组拷贝到另一个数组里面
#include <stdio.h> int main() { int original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int copied[10]; int loop; for(loop = 0; loop < 10; loop++) { copied[loop] = original[loop]; } printf("元素数组 -> 拷贝后的数组 \n"); for(loop = 0; loop < 10; loop++) { printf(" %2d %2d\n", original[loop], copied[loop]); } return 0; }
输出结果如下:
元素数组 -> 拷贝后的数组 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 0 0