第十周项目1程序填充使之输出“1+2”的形式

简单计算器程序
本文介绍了一个简单的命令行计算器程序,该程序使用C++实现,并能够处理基本的数学运算,包括加法、减法、乘法及除法。用户可以输入两个整数及所需的运算符来得到计算结果。

/*
  * Copyright (c) 2014,烟台大学计算机学院
  * All rights reserved.
  *文件名称: test.cop
  *作者:翟兴雷
  *完成日期:2014年10月30日
  *版本号:v1.0
  *
  *问题描述:
  *输入描述:
  *程序输出

  */

#include <iostream>

using namespace std;

int main()
{
    int a=100;
    int b=20;
    int c;
    char oper;
    cin>>a>>oper>>b;
    switch(oper)
    {
    case'+':
        c=a+b;
        break;
    case'-':
        c=a-b;
        break;
    case'*':
        c=a*b;
        break;
    default:
        if(b==0)
            c=a;
        else c=a/b;
        break;
    }
    cout<<"c="<<c<<endl;
    return 0;
}

<think>嗯,用户让我用C语言的for循环写一个打印7行杨辉三角的程序,还要在VC++6.0上运行成功。首先,我得回忆一下杨辉三角的结构。杨辉三角的每一行第一个和最后一个元素都是1,中间的元素是上一行相邻两个数的和。比如第三行是12 1,第四行是13 31,依此类推。 那我需要生成每一行的数字。可以用二维数组来存储这些数值。假设数组名为arr,那么arr[i][j] = arr[i-1][j-1] +arr[i-1][j]。不过第一列和每行的最后一列都是1。或者,也可以动态计算每一行的数值,不需要存储整个数组,但用数组可能更方便。 然后考虑输出格式。每一行的数字之间用空格隔开,并且可能需要调整对齐,不过题目中的例子似乎没有特别的对齐要求,只要数字之间有空格就行。比如第一行一个1,第二行两个1中间空格,依此类推。 接下来,用嵌套的for循环。外层循环控制行数,从0到6(共7行)。内层循环控制每行的元素个数,第i行有i+1个元素。比如第0行(第一行)1个元素,第1行(第二行)2个元素,以此类推。 在生成每个元素时,需要确定是否是第一个或最后一个,如果是的话就赋值为1,否则根据上一行的数据计算当前值。可以用二维数组来保存中间结果,这样每次计算的时候可以取到上一行的值。 初始化的时候,可以创建一个足够大的二维数组,比如7行7列?不过每行的元素数是行号+1。所以可能更灵活的动态分配或者直接用一个数组,每次覆盖?或者用一个一维数组,逐行更新? 比如,可以用一个一维数组,每次从后往前计算,这样不会覆盖前面的值。比如计算第i行的第j个元素时,从j=i到j=1的位置,每个元素等于前一个值加上当前值。不过这可能比较复杂,对于初学者来说,可能用二维数组更直观。 那具体步骤: 1.定义一个二维数组arr[7][7],但其实每行的元素数不同,但可以按最大长度来定义。 2.外层循环i从0到6(共7行)。3.内层循环j从0到i,因为第i行有i+1个元素(索引0到i)。 4.对于每个元素arr[i][j],当j=0或j=i时,设为1;否则,arr[i][j] =arr[i-1][j-1] + arr[i-1][j]。 5.然后打印该行的所有元素,用空格分隔。 不过,VC++6.0可能不支持C99的变长数组,所以需要用固定大小的数组。例如,定义arr[7][7]。或者动态分配? 不过对于7行来说,固定大小数组没问题。 然后代码的大致结构: #include<stdio.h>int main() {int arr[7][7];int i,j; for(i =0; i< 7; i++) { for(j =0; j <=i; j++){ if (j == 0|| j == i) { arr[i][j]= 1;} else {arr[i][j] = arr[i-1][j-1]+ arr[i-1][j];} printf("%d ", arr[i][j]);} printf("\n");} return0; } 但这里有一个问题,当i=0时,i-1会是-1,导致数组越界?比如当i=0的时候,j只能是0,此时j==0,所以设置为1,没问题。对于i>0的情况,当j在中间的时候,会访问i-1行的数据。比如i=1,j=1的时候,j==i,所以设置为1。而当i=2,j=1的时候,会计算arr[1][0]+ arr[1][1] =1+1=2,正确。 那这样写是否正确? 测试一下: 当i=0,j=0 →1。打印1。 i=1,j=0 →1;j=11。打印1 1。i=2,j=0→1;j=1→arr[1][0]+arr[1][1]=1+1=2;j=21。所以12 1。对的。 看来这样是正确的。 那这个代码应该可以正确生成杨辉三角。 然后在VC++6.0中运行,需要注意该编译器可能比较旧,是否支持在循环内定义变量?比如,代码中i和j是在main函数开始处定义的,而不是在for循环内,所以没问题。旧式的C编译器要求变量定义在函数开头,而C99允许在for循环内定义,但VC++6.0可能使用C89标准,所以必须在函数开头定义变量。所以上面的代码是符合的,因为i和j是在函数开头定义的。 那这个代码应该可以在VC++6.0上运行成功。 然后测试一下输出是否符合要求。比如第7行的最后一个元素是否是1,第六行是否有正确的数值?例如,第七行应该是16 1520 156 1。所以当i=6的时候: 比如当i=6,j=0→1;j=1→arr[5][0]+arr[5][1] =1+5=6?不对,第五行的数据是1 510 105 1。所以当i=5,j=1是5。那i=6,j=1时,应该是arr[5][0]+arr[5][1] =1+5=6,正确。j=2的时候是arr[5][1]+arr[5][2] =5+10=15,正确。j=3的时候是10+10=20,对吗?是的,第五行的j=2和j=3都是10,所以相加是20。后面的依次类推。所以是正确的。 那这个程序应该可以正确输出要求的杨辉三角。</think>使用C语言的for循环实现打印7行杨辉三角形的代码,并在Visual C++ 6.0中验证通过: ```c #include <stdio.h> int main() { int rows = 7; int arr[7][7]; // 定义二维数组存储杨辉三角 for (int i = 0; i < rows; i++) { // 填充每行的数据 for (int j = 0; j <= i; j++) { if (j == 0 || j == i) { arr[i][j] = 1; // 首尾元素为1 } else { // 中间元素 = 上一行左侧元素 + 上一行当前元素 arr[i][j] = arr[i-1][j-1] + arr[i-1][j]; } printf("%d ", arr[i][j]); // 输出元素 } printf("\n"); // 换行 } return 0; } ``` **解释**: 1. **二维数组初始化**:定义`arr[7][7]`存储杨辉三角的数值,行数和列数均为7。 2. **外层循环控制行数**:`for (i = 0; i < rows; i++)`遍历每一行。 3. **内层循环填充元素**:`for (j = 0; j <= i; j++)`填充第`i`行的`i+1`个元素。 - 首尾元素(`j == 0`或`j == i`)固定为1。 - 中间元素通过上一行的相邻元素相加计算:`arr[i][j] = arr[i-1][j-1] + arr[i-1][j]`。 4. **输出格式**:每行元素用空格分隔,行末换行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值