【练习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)的更多相关文章

  1. C语言编程 菜鸟练习100题(21-30)

    [练习21]计算自然数的和 0. 题目: 计算自然数的和 1. 分析: 练习使用 for 循环结构.for 循环允许一个执行指定次数的循环控制结构. 2. 程序: #include <stdio ...

  2. C语言编程 菜鸟练习100题(51-60)

    [练习51]矩阵转置 0. 题目: 矩阵的转置 1. 分析: 练习使用 for 循环嵌套,多维数组的表达. 2. 程序: #include <stdio.h> int main() { i ...

  3. C语言编程 菜鸟练习100题(41-50)

    [练习41]字符串翻转 0. 题目: 字符串翻转 1. 分析: 学习递归思想和方法. 2. 程序: 方法一: #include <stdio.h> void reverseSentence ...

  4. C语言编程 菜鸟练习100题(11-20)

    [练习11]计算 int, float, double 和 char 字节大小 0. 题目: 计算 int, float, double 和 char 字节大小 1. 分析: 使用 sizeof 操作 ...

  5. C语言编程 菜鸟练习100题(01-10)

    [练习1]输出 "Hello, World!" 0. 题目: 输出 "Hello, World!" 1. 分析: 使用 printf() 输出 "He ...

  6. C语言编程学习打造——做题游戏

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  7. Ideone:在线多语言编程执行器工具

    Ideone:在线多语言编程执行器工具此网站提供40种编程语言以上, 能在线直接做编译和执行的动作,该工具是一款简易的编程测试工具,虽然不能替代专业版的工具,但是其功能非常全面. Ideone,一款在 ...

  8. 数据结构+算法面试100题~~~摘自CSDN

    数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...

  9. Go面试题精编100题

    Golang精编100题 选择题 1.   [初级]下面属于关键字的是()A. funcB. defC. structD. class 参考答案:AC 2.   [初级]定义一个包内全局字符串变量,下 ...

随机推荐

  1. vue Element-ui 表格多选 修改选中行背景色

    实现的效果: 整体思路方式: 1.给获取到的数据添加自定义的className 2.在点击行(row-click)和手动点击勾选框的事件(select-all)中获取到当前的row的className ...

  2. React函数式组件的性能优化

    优化思路 主要优化的方向有2个: 减少重新 render 的次数.因为在 React 里最重(花时间最长)的一块就是 reconction(简单的可以理解为 diff),如果不 render,就不会 ...

  3. RF-字符串拼接

    贪婪截取(abcABC123edf123,左边截取abc,右边截取123,得到ABC123edf) 截取字符串 [Arguments] ${string} ${left} ${right} ${str ...

  4. 关于Spring Boot 多数据源的事务管理

    自己的一些理解:自从用了Spring Boot 以来,这近乎零配置和"约定大于配置"的设计范式用着确实爽,其实对零配置的理解是:应该说可以是零配置可以跑一个简单的项目,因为Spri ...

  5. PAT 乙级 -- 1008 -- 数组元素循环右移问题

    题目简述 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--AN-1)变换为(AN-M -- AN ...

  6. LA2678最短子序列

    题意:       给你一个正整数序列,问你在里面找到一个最短的子序列,要求子序列的和大于等于k,输出序列长度. 思路:       这个序列的每个数字都是正整数,那么就比较好想了,我们可以直接枚举终 ...

  7. POJ2709 染料贪心

    题意:       要搭配出来n种颜料,每种颜料要用mi升,除了这n种颜色还有一个合成灰色的毫升数,灰色是由三种不同的颜色合成的,三种m m m 的不同颜色能合成m升灰色,然后问你满足要求至少要多少盒 ...

  8. SpringBoot 项目 部署 jar方式

    SpringBoot部署-jar方式 步骤1部署方式 Springboot 和我们之前学习的web 应用程序不一样,其本质上是一个 Java 应用程序,那么又如何部署呢?  通常来说,Springbo ...

  9. 使用 cmake 来搭建跨平台的应用程序框架:C语言版本

    目录 一.前言 二.示例代码说明 1. 功能描述 2. 文件结构 3. cmake 构建步骤 4. Utils 目录说明 5. Application 目录说明 三.Linux 系统下操作步骤 1. ...

  10. linux集群压测部署方案

    我们今天主要分享的内容从三方面讲解. 集群压力机部署 shell脚本简介 shell脚本搞定压力机部署 集群压力机部署   linux.png 分布式压测背景介绍 在企业项目实战时,如果被压的服务器处 ...