【练习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. Linux终端更改字体

    1 概述 这里的终端是指通过F1-F6/F2-F7进入的纯命令终端. 修改字体可以通过setfont命令. 2 查看字体 可以通过查找目录consolefonts来确定本地机器上的字体位于哪里: fi ...

  2. Typora配置PicGo时,提示Failed to fetch【Bug集中营】

    Typora配置PicGo时,提示Failed to fetch 两者配置的端口不一致造成的 打开Typora,选择文件-偏好设置-图像-验证图片上传选项,点击验证图片上传选项 会提示错误:Faile ...

  3. SQL Server 审计(Audit)

    审计(Audit)用于追踪和记录SQL Server实例,或者单个数据库中发生的事件(Event),审计运作的机制是通过捕获事件(Event),把事件包含的信息写入到事件日志(Event Log)或审 ...

  4. 构建基于表单配置的 Jenkins 测试项目(接口、UI、APP、Jmeter)

    1. 第一个 hello world 项目 2. 构建自动触发的项目(接口测试) 1)新建测试项目(执行测试脚本) 2)新建 Maven 打包项目 3)手动执行构建 4)修改 Web 工程代码并 pu ...

  5. 4-1 Postman脚本的应用

    前面我们讲解了在接口发送每个请求,得到响应.这是接口本身的问题.但是"请求前后"的动作,是怎么处理的?比如在发送一个请求前,需要获取当前的时间戳,或者对我们的变量进行参数化,设置变 ...

  6. 基于IMU与磁力计的手势提取手套-原理及其实现

    手势提取依据所采用传感器的不同,可以分为基于视觉,基于惯性传感器,基于FSR,基于EMG传感器的方法.其中基于视觉的方法使用场景有限,且无法获取精确的手指关节角度:基于FSR的方法难以布置传感器且难以 ...

  7. PHP实现网站访客来访显示访客IP&浏览器&操作系统

    PHP实现网站访客来访显示访客IP&浏览器&操作系统 代码 function getOs() { if (!empty($_SERVER['HTTP_USER_AGENT'])) { ...

  8. 仁者见仁:缓冲区栈溢出之利用 Exploit 形成完整攻击链完全攻略(含有 PayLoad)

    > 前言 内存缓冲区溢出又名 Buffer OverFlow,是一种非常危险的漏洞,在各种操作系统和应用软件中广泛存在.利用缓冲区溢出进行的攻击,小则导致程序运行失败.系统宕机等后果,大则可以取 ...

  9. Linux系统应急响应

    目录 排查用户相关的信息 排查进程端口相关的信息 查找恶意程序并杀掉 斩草除根 判断入侵方式,修复漏洞 当我们被告知一台Linux服务器被黑客入侵,黑客利用该服务器进行挖矿,并且在该服务器上放置了木马 ...

  10. 【maven和jdk】报错:系统找不到指定的文件

    创建一个maven项目出错 问题描述 在idea.log出现如下错误(系统找不到指定的文件,但是不知道指定文件是什么) com.intellij.execution.process.ProcessNo ...