这份文档《11004512实验报告》是一份详细的实验记录文件,包含了编号为11004512的实验目的、方法、数据和结论等内容。
### 第一题:整数转换为千分位形式
**问题描述**
将一个正整数n(长整型)输出成千分位的形式,即从个位起每三位之间加一个逗号。例如,7654321应当被表示为7,654,321。
**课题分析**
如果输入的数字小于一千,则不需要进行转换;若大于等于一千,则需要将该数除以一千,并取整和余数分别处理,在每三位之间插入一个逗号,直到所有位都被正确地分隔开。此题考察了C语言中的取整、取余及字符操作等知识的应用。
**数据结构设计**
```c
char c = ,; // 千分符的符号
int n, i, j;
int a[100]; // 存储转换后的数
```
如果输入的数字小于一千,直接输出该数字。否则执行以下步骤:
- 初始化循环计数器i和j。
- 每次迭代中计算n除以1000的余数并存储在数组a[i]中;然后将n更新为整商部分(即去除最后三位);
- 更新索引值,以便后续操作。
**源程序**
```c
#include
void main() {
char c = ,; // 千分符的符号
int n, i=0, j;
int a[100];
printf(请输入一个正整数n:\n);
scanf(%d, &n);
if(n < 1000) {
printf(%d\n, n); // 如果输入的数字小于一千,则直接输出
} else {
for(i = 0; n >= 1000; i++) {
a[i] = n % 1000;
n /= 1000;
j = i + 1;
}
a[j] = n;
for(i=j; i>0; --i) // 循环运行直到条件不符合
printf(%d%c, a[i], c);
printf(%d\n, a[0]); // 输出剩余部分
}
}
```
### 第二题:数制转换程序
**问题描述**
编写一个能够将任意十进制数字自动转化为其他数制表示(包括二进制、八进制和十六进制)的程序,要求使用算法实现而不是直接调用C语言中的格式化输出函数。
**课题分析**
通过不断地除以目标基数并记录每次所得余数来完成转换。对于不同的基数,只需适当调整如何处理余数值即可(如二进制、八进制和十六进制)。
**数据结构设计**
```c
unsigned long a, temp; // 存储待转换的十进制数及其运算过程中的中间值
char b[64]; // 存储二进制结果的数组
char o[21]; // 存储八进制结果的数组
char h[16]; // 存储十六进制结果的数组,考虑到无符号长整型数的有效范围。
```
**源程序**
```c
#include
int main() {
unsigned long a, temp;
char b[64], o[21], h[16];
int m = 1;
while(m) { // 循环输入直到用户选择退出
printf(请输入一个正整数:);
scanf(%ld, &a);
temp = a; i=0;
while(temp && i<64) {
b[i] = (temp%2)+0; // 求余;强制类型转换为实数
temp /= 2; // 整除运算
++i;
}
printf(\n二进制: );
for(i--; i>=0; --i)
printf(%c, b[i]);
printf(\n);
}
return 0;
}
```
以上程序实现了从十进制到其他数制的转换,并且支持用户循环输入多个数字进行转换。