C语言编程 菜鸟练习100题(31-40)
2021/4/12 20:29:46
本文主要是介绍C语言编程 菜鸟练习100题(31-40),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【练习31】判断质数
0. 题目:
判断质数
1. 分析:
质数(prime number),指大于 1的、且除 1 和本身以外没有其他因数的自然数。
2. 程序:
#include <stdio.h> #include<math.h> int main() { int i, iNum, iFlag = 0; printf("输入一个正整数: "); scanf("%d",&iNum); for(i=2; i<=sqrt(iNum); i++) { if(iNum%i==0) // 能被其它数整除则不是质数 { iFlag=1; break; } } if (iFlag==0) printf("%d 是素数",iNum); else printf("%d 不是素数",iNum); return 0; }
3. 输入输出:
输入一个正整数: 123457
123457 是素数
【练习32】判断Armstrong数
0. 题目:
判断Armstrong数(阿姆斯壮数)
1. 分析:
Armstrong 数是指 n位数的各位数的 n次方之和等于该数。例如:153=13+53+3^3。
练习使用函数调用。函数调用就是使用已经定义好的函数。创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。
2. 程序:
#include <stdio.h> #include <math.h> int checkArmstrongNumber(int n); // 函数声明,名称、返回类型和参数 int main() { int n, flag; printf("输入正整数: "); scanf("%d", &n); // 检测 Armstrong 数 flag = checkArmstrongNumber(n); if (flag == 1) printf("%d 是 Armstrong 数。", n); else printf("%d 不是 Armstrong 数。",n); return 0; } int checkArmstrongNumber(int number) { int originalNumber, remainder, result = 0, n = 0, flag; originalNumber = number; while (originalNumber != 0) // 判断位数 { originalNumber /= 10; n++; } originalNumber = number; while (originalNumber != 0) { remainder = originalNumber%10; result += pow(remainder, n); originalNumber /= 10; } // 判断 Armstrong 数条件 if(result == number) flag = 1; else flag = 0; return flag; }
3. 输入输出:
输入三位数: 370
370 是 Armstrong 数。
【练习33】求整数的所有因数
0. 题目:
求一个整数的所有因数
1. 分析:
如果整数 a 除以整数 b(b≠0) 的商正好是整数而没有余数, 就说 b 是 a 的因数。因数包括 1和自身。
2. 程序:
#include <stdio.h> int main() { int iNum, i; printf("输入一个整数: "); scanf("%d",&iNum); printf("%d 的因数有: ", iNum); for(i=1; i <= iNum; i++) { if (iNum%i == 0) { printf("%d ",i); } } return 0; }
3. 输入输出:
输入一个整数: 60
60 的因数有: 1 2 3 4 5 6 10 12 15 20 30 60
【练习34】创建三角形图案
0. 题目:
创建三角形图案
1. 分析:
练习使用 for 循环结构。for 循环允许一个执行指定次数的循环控制结构。
2. 程序:
#include <stdio.h> int main() { int i, j, k, rows, space; printf("输入行数: "); scanf("%d",&rows); // 打印 * 三角形 for(i=1; i<=rows; i++) { for(j=1; j<=i; j++) { printf("* "); } printf("\n"); } // 打印 * 倒三角形 printf("\n\n"); for(i=rows; i>=1; i--) { for(j=1; j<=i; j++) { printf("* "); } printf("\n"); } // 打印 * 金字塔三角形 printf("\n\n"); for(i=1; i<=rows; i++, k=0) { for(space=1; space<=rows-i; space++) { printf(" "); } while(k != 2*i-1) { printf("* "); k++; } printf("\n"); } // 打印弗洛伊德三角形 printf("\n\n"); for(i=1,j=1;i<=rows;i++) { for(k=1;k<=i;k++,j++) printf("%5d",j); printf("\n"); } return 0; }
3. 输入输出:
输入行数: 6
前 3 个图略
弗洛伊德三角形的输出如下:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
【练习35】表格形式输出数据
0. 题目:
表格形式输出数据: 将 1~100 的数据以 10x10 矩阵格式输出。
1. 分析:
练习使用 for 循环结构。for 循环允许一个执行指定次数的循环控制结构。
2. 程序:
#include <stdio.h> int main() { int i, j, count; for(i = 1; i <= 10; i++) { for(j = i; j <=100; j += 10 ) printf(" %3d", j); printf("\n"); } return 0; }
3. 输入输出:
1 11 21 31 41 51 61 71 81 91 2 12 22 32 42 52 62 72 82 92 3 13 23 33 43 53 63 73 83 93 4 14 24 34 44 54 64 74 84 94 5 15 25 35 45 55 65 75 85 95 6 16 26 36 46 56 66 76 86 96 7 17 27 37 47 57 67 77 87 97 8 18 28 38 48 58 68 78 88 98 9 19 29 39 49 59 69 79 89 99 10 20 30 40 50 60 70 80 90 100
【练习36】实现简单的计算器
0. 题目:
实现简单的计算器
1. 分析:
实现加减乘除计算。
2. 程序:
# include <stdio.h> int main() { char cOperator; float fNum1, fNum2; printf("输入操作符 (+, -, *, /): "); scanf("%c", &cOperator); printf("输入两个数字(逗号分隔): "); scanf("%f,%f",&fNum1, &fNum2); switch(cOperator) { case '+': printf("%.1f + %.1f = %.1f", fNum1, fNum2, fNum1 + fNum2); break; case '-': printf("%.1f - %.1f = %.1f", fNum1, fNum2, fNum1 - fNum2); break; case '*': printf("%.1f * %.1f = %.1f", fNum1, fNum2, fNum1 * fNum2); break; case '/': printf("%.1f / %.1f = %.1f", fNum1, fNum2, fNum1 / fNum2); break; // operator doesn't match any case constant (+, -, *, /) default: printf("Error! operator is not correct"); } return 0; }
3. 输入输出:
输入操作符 (+, -, *,/): / 输入两个数字(逗号分隔): 1.2,2.0 1.2 / 2.0 = 0.6
【练习37】计算一个数是否可为两个素数之和
0. 题目:
计算一个数是否可为两个素数之和
1. 分析:
练习使用 for 循环结构。for 循环允许一个执行指定次数的循环控制结构。
2. 程序:
#include <stdio.h> int checkPrime(int n); int main() { int num, i, flag = 0; printf("输入正整数: "); scanf("%d", &num); for(i = 2; i <= num/2; ++i) { // 检测判断 if (checkPrime(i) == 1) { if (checkPrime(num-i) == 1) { printf("%d = %d + %d\n", num, i, num-i); flag = 1; } } } if (flag == 0) printf("%d 不能分解为两个素数。", num); return 0; } // 判断素数 int checkPrime(int n) { int i, isPrime = 1; for(i = 2; i <= n/2; ++i) { if(n % i == 0) { isPrime = 0; break; } } return isPrime; }
3. 输入输出:
输入正整数: 34
34 = 3 + 31
34 = 5 + 29
34 = 11 + 23
34 = 17 + 17
【练习38】二进制转与十进制相互转换
0. 题目:
二进制转与十进制相互转换
1. 分析:
2. 程序:
#include <stdio.h> #include <math.h> int convertBinaryToDecimal(long long nBinary); long long convertDecimalToBinary(int nDecimal); int main() { char cFlag; int nDecimal; long long nBinary; printf("B:将二进制数转换为十进制\n"); printf("D:将十进制数转换为二进制\n"); printf("请输入 B 或 D:\n"); scanf("%c", &cFlag); if (cFlag=='B' || cFlag=='b') { printf("输入一个二进制数: "); scanf("%lld", &nBinary); nDecimal = convertBinaryToDecimal(nBinary); printf("二进制数 %lld 转换为十进制为 %d", nBinary, nDecimal); } else if (cFlag=='D' || cFlag=='d') { printf("输入一个十进制数(<1024): "); scanf("%d", &nDecimal); nBinary = convertDecimalToBinary(nDecimal); printf("十进制数 %d 转换为二进制位 %lld", nDecimal, nBinary); } else { printf("输入错误。"); } return 0; } int convertBinaryToDecimal(long long nBinary) { int decimalNumber = 0, i = 0, remainder; while (nBinary!=0) { remainder = nBinary%10; nBinary /= 10; decimalNumber += remainder*pow(2,i); ++i; } return decimalNumber; } long long convertDecimalToBinary(int nDecimal) { long long binaryNumber = 0; int remainder, i = 1, step = 1; while (nDecimal!=0) { remainder = nDecimal%2; printf("Step %d: %d/2, 余数 = %d, 商 = %d\n", step++, nDecimal, remainder, nDecimal/2); nDecimal /= 2; binaryNumber += remainder*i; i *= 10; } return binaryNumber; }
3. 输入输出:
B:将二进制数转换为十进制
D:将十进制数转换为二进制
请输入 B 或 D:
B
输入一个二进制数: 110110111
二进制数 110110111 转换为十进制为 439
D
输入一个十进制数(<1024): 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
【练习39】八进制与十进制相互转换
0. 题目:
八进制与十进制相互转换
1. 分析:
2. 程序:
#include <stdio.h> #include <math.h> int convertDecimalToOctal(int decimalNumber); int main() { int decimalNumber; printf("输入一个十进制数: "); scanf("%d", &decimalNumber); printf("十进制数 %d 转换为八进制为 %d", decimalNumber, convertDecimalToOctal(decimalNumber)); return 0; } int convertDecimalToOctal(int decimalNumber) { int octalNumber = 0, i = 1; while (decimalNumber != 0) { octalNumber += (decimalNumber % 8) * i; decimalNumber /= 8; i *= 10; } return octalNumber; }
3. 输入输出:
输入一个十进制数: 1024
十进制数 1024 转换为十进制为 2000
【练习40】八进制与二进制相互转换
0. 题目:
八进制与二进制相互转换。
1. 分析:
2. 程序:
#include <stdio.h> #include <math.h> int convertBinarytoOctal(long long binaryNumber); int main() { long long binaryNumber; printf("输入一个二进制数: "); scanf("%lld", &binaryNumber); printf("二进制数 %lld 转换为八进制为 %d", binaryNumber, convertBinarytoOctal(binaryNumber)); return 0; } int convertBinarytoOctal(long long binaryNumber) { int octalNumber = 0, decimalNumber = 0, i = 0; while(binaryNumber != 0) { decimalNumber += (binaryNumber%10) * pow(2,i); ++i; binaryNumber/=10; } i = 1; while (decimalNumber != 0) { octalNumber += (decimalNumber % 8) * i; decimalNumber /= 8; i *= 10; } return octalNumber; }
3. 输入输出:
输入一个二进制数: 10101100
二进制数 10101100 转换为八进制为 254
版权说明:
题目和例程 源于 菜鸟教程,作者重新编写了程序、注释和算例,并增加了难点分析。
这篇关于C语言编程 菜鸟练习100题(31-40)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding