用指针编写1到100求和
时间: 2024-06-20 09:03:44 浏览: 11
可以用指针来编写1到100求和的程序,具体实现如下:
```
#include <stdio.h>
int main() {
int nums[100];
int *ptr = nums; // 定义指针变量,并将其指向数组首元素
int sum = 0;
// 初始化数组
for (int i = 0; i < 100; i++) {
nums[i] = i + 1;
}
// 求和
for (int i = 0; i < 100; i++) {
sum += *(ptr + i);
}
printf("1到100的和为:%d\n", sum);
return 0;
}
```
这段程序中,首先定义了一个长度为100的整型数组`nums`,并定义了一个指向数组首元素的指针变量`ptr`。然后,通过循环初始化数组元素的值为1到100。接着,再通过循环累加指针变量`ptr`所指向的元素值,并将累加结果赋值给变量`sum`。最后,输出求和结果。
相关问题
用dosbox实现1到100求和,并以字符串形式显示,再实现直接显屏
首先,我们需要编写一个 DOS 下的程序来实现 1 到 100 求和,并将结果以字符串形式显示出来。
以下是一个简单的汇编程序,可以实现这个功能:
```
.model tiny
.code
org 100h
start:
mov ax, 0 ; 初始化累加器
mov cx, 100 ; 循环次数
mov bx, offset result ; 存放结果的地址
sum_loop:
add ax, cx ; 累加
loop sum_loop ; 循环
call num2str ; 将结果转换为字符串
mov ah, 09h ; 调用 DOS 中断显示字符串
mov dx, offset result_str
int 21h
mov ah, 4ch ; 返回 DOS
int 21h
num2str:
mov si, offset result ; 存放结果的地址
mov di, offset result_str ; 存放结果字符串的地址
mov bx, 10 ; 除数
num2str_loop:
xor dx, dx ; 清除余数
div bx ; 除法运算
add dl, '0' ; 将余数转换为 ASCII 码
mov [di], dl ; 存储到结果字符串中
inc di ; 移动指针
cmp ax, 0 ; 判断是否已经除尽
jne num2str_loop
mov byte ptr [di], '$' ; 字符串结尾
ret
result dw ?
result_str db 10 dup ('$')
end start
```
这个程序使用了两个变量:`result` 存放结果,`result_str` 存放结果字符串。在主过程中,使用循环将 1 到 100 累加起来,并将结果存放到 `result` 变量中。然后调用 `num2str` 过程将结果转换为字符串,并存储到 `result_str` 中。最后使用 DOS 中断显示字符串。
接下来,我们需要使用 DOSBox 来运行这个程序。首先,需要将程序保存到一个文件中,例如 `sum.asm`。然后,在 DOSBox 中执行以下命令编译和运行程序:
```
tasm sum.asm
tlink sum.obj
sum.exe
```
这样,程序就会在 DOSBox 中运行,并将结果以字符串形式显示出来。
如果需要直接显示在屏幕上,可以修改程序,调用 DOS 中断显示字符(`int 10h`)来逐个输出结果字符串中的字符。以下是修改后的程序:
```
.model tiny
.code
org 100h
start:
mov ax, 0 ; 初始化累加器
mov cx, 100 ; 循环次数
sum_loop:
add ax, cx ; 累加
loop sum_loop ; 循环
call num2str ; 将结果转换为字符串
mov si, offset result_str ; 存放结果字符串的地址
print_loop:
mov ah, 0eh ; 调用 DOS 中断显示字符
mov al, [si]
cmp al, '$'
je print_end
int 10h
inc si
jmp print_loop
print_end:
mov ah, 4ch ; 返回 DOS
int 21h
num2str:
mov si, offset result ; 存放结果的地址
mov di, offset result_str ; 存放结果字符串的地址
mov bx, 10 ; 除数
num2str_loop:
xor dx, dx ; 清除余数
div bx ; 除法运算
add dl, '0' ; 将余数转换为 ASCII 码
mov [di], dl ; 存储到结果字符串中
inc di ; 移动指针
cmp ax, 0 ; 判断是否已经除尽
jne num2str_loop
mov byte ptr [di], '$' ; 字符串结尾
ret
result dw ?
result_str db 10 dup ('$')
end start
```
这个程序将结果字符串逐个输出到屏幕上,直到遇到字符串结尾符 `$`。最后调用 DOS 中断返回操作系统。
在 DOSBox 中执行命令编译和运行程序:
```
tasm sum.asm
tlink sum.obj
sum.exe
```
这样,程序就会在 DOSBox 中运行,并直接显示结果。
stream求和bigdecimal空指针异常
在使用stream求和时,如果涉及到BigDecimal类型的属性值可能为null的情况,可能会导致空指针异常。为了避免这种情况,可以使用Comparator.nullsLast来处理null值。具体的解决方法如下:
第一种方法是使用Comparator.nullsLast和stream的sorted方法进行排序。首先,获取对象集合recordList,然后使用stream()方法将其转换为流。接着,使用sorted方法和Comparator.comparing来进行排序,同时使用Comparator.nullsLast来处理null值,即将null值排在最后。最后,使用collect(Collectors.toList())方法将排序后的结果收集为列表。示例代码如下:
recordList = recordList.stream().sorted(Comparator.comparing(EquipOverrunRecord::getPeakValue, Comparator.nullsLast(Double::compareTo))).collect(Collectors.toList());
第二种方法是自己编写排序逻辑来处理null值。首先,获取对象集合recordList,然后使用Collections.sort方法进行排序。在Comparator的compare方法中,对属性值进行判断,如果两个值都不为null,则直接比较它们的大小;如果一个值为null,则将null值放在最后。示例代码如下:
Collections.sort(recordList, new Comparator<EquipOverrunRecord>() {
@Override
public int compare(EquipOverrunRecord o1, EquipOverrunRecord o2) {
Double v1 = o1.getPeakValue();
Double v2 = o2.getPeakValue();
if (v1 != null && v2 != null) {
return v1.compareTo(v2);
} else {
return v1 == null ? 1 : -1;
}
}
});
这样,无论使用哪种方法,都能避免在求和过程中出现BigDecimal空指针异常的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)