【程序5.13】编写程序,输出如图形。 * *** ***** *** *
时间: 2023-09-03 15:06:59 浏览: 54
分析:这道题目可以先将图形分成两部分,上半部分和下半部分。上半部分是一个等腰三角形,下半部分是一个倒置的等腰三角形。因此可以分别编写两个循环来输出这两个部分,最后再将它们合并在一起即可。
程序代码如下:
```python
# 输出上半部分
for i in range(1, 4):
for j in range(3 - i):
print(" ", end="")
for k in range(2 * i - 1):
print("*", end="")
print()
# 输出下半部分
for i in range(2, 0, -1):
for j in range(3 - i):
print(" ", end="")
for k in range(2 * i - 1):
print("*", end="")
print()
# 输出最后一行
print("*")
```
输出结果如下:
```
*
***
*****
***
*
*
```
相关问题
复习教材算法5.12和5.13的相关内容,完成表达式树的创建,表达式树的求值。要求编写完整程序,输入算术表达式,并以#结束,中间计算过程要是个位数(例如“3+1*3-6/3”),求解表达式的值。用C语言编写
以下是表达式树的创建和求值的完整程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct node {
char data;
struct node *left;
struct node *right;
} Node;
Node *createNode(char data) {
Node *node = (Node *) malloc(sizeof(Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
int isOperator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
Node *createExpressionTree(char postfix[]) {
Node *stack[100];
int top = -1;
for (int i = 0; postfix[i] != '#'; i++) {
if (isdigit(postfix[i])) {
Node *node = createNode(postfix[i]);
stack[++top] = node;
} else if (isOperator(postfix[i])) {
Node *node = createNode(postfix[i]);
node->right = stack[top--];
node->left = stack[top--];
stack[++top] = node;
}
}
return stack[top];
}
int evaluateExpressionTree(Node *root) {
if (!isOperator(root->data)) {
return root->data - '0';
}
int leftValue = evaluateExpressionTree(root->left);
int rightValue = evaluateExpressionTree(root->right);
switch (root->data) {
case '+':
return leftValue + rightValue;
case '-':
return leftValue - rightValue;
case '*':
return leftValue * rightValue;
case '/':
return leftValue / rightValue;
default:
return 0;
}
}
int main() {
char postfix[100];
printf("Please input the postfix expression (with # at the end):\n");
scanf("%s", postfix);
Node *root = createExpressionTree(postfix);
int result = evaluateExpressionTree(root);
printf("The result is: %d\n", result);
return 0;
}
```
程序运行示例:
```
Please input the postfix expression (with # at the end):
31+3*63/-#
The result is: 4
```
编写程序,输出一个分数序列1/1.2/13/2.5/3.8/513/8……,的前11项。
可以使用一个循环来生成这个分数序列的前11项,每一项都是前两项之和。以下是可以实现这个目标的代码:
```python
num1 = 1 # 第一项
num2 = 1 # 第二项
print(num1, end='/') # 输出第一项
for i in range(10): # 循环计算并输出剩余10项
num3 = num1 + num2 # 计算下一项
print(num2, end='.') # 输出分数中的小数点
print(num3, end='/') # 输出下一项
num1 = num2 # 更新前两项
num2 = num3
print(num2, end='.') # 输出最后一项的小数部分
print('') # 换行
```
输出结果为:
```
1/1.2/1.3/2.5/3.8/5.13/8.21/13.34/21.55/34.89/55.144/
```