初学C语言,有许多搞不明白的地方。编程,最重要的就是实践。今天,我偶然间看到书上的练习,做了一个能整齐地输出n,n的平方,n的立方的小程序。首先,我先用伪代码设计程序:

提示用户输入表格上限,下限或退出

循环:检测输入是否正确{

  测试字宽 //为了输出更好看

  按照字宽打印表头

  循环:按照字宽输出数据

  提示用户输入表格上限,下限或退出

}

然后,我设计了一个函数来测试数字的字宽(这里指数字所占的显示宽度,如123占3个单位,123456占6个单位)。通过笔算得出如下结论:数字[abcd](a,b,c,d均为大于0小于10的整数)可以表示为1000a+100b+10c+d,它占了四个单位;数字[abc]可以表示为100a+10b+c,它占了3个单位。观察得出,所占字宽就是以10为底最高位数字系数的对数+1。由此我们可以设立一个循环,来求出字宽,代码如下:

int i,i_wide;
,i_wide = ;;i *= ,i_wide++)
    )
                break;

这样就巧妙地计算出了字宽。

  解决了字宽的问题,似乎其他问题就好办多了。但是要注意,如果用户输入的上限是1,下限是10,那么输出字宽就是下限的字宽;但是,如果输入的上限是10,下限是1,这时输出字宽就是上限的字宽,如果这时还用下限的字宽,就会把数字输出得乱七八糟,这里就要用if语句。按照字宽来输出,我们需要用printf() 加 *修饰符(自定义输出的字宽,如printf("%*d",wide,num);)。

下面就是完整的程序代码了,如果有缺陷,请批评指出。

 #include <stdio.h>
 #include <stdlib.h>

 int numlen(int i_num) //测试数字所占字宽
 {
     int i,i_wide;
     ,i_wide = ;;i *= ,i_wide++)
         ) break;
     return i_wide;
 }

 int main(int argc,char *argv[])
 {
     ]; //分别存储n,n^2,n^3三个数据的宽度
     int i_top,i_bottom,i_flag; //表格的上下限和增长标记 

     printf("Please input top and bottom(\'q\' to quit):");
     ){
         if(i_top == i_bottom)
             continue;
         else if(i_top > i_bottom){ //测试上限字宽
             i_flag = -;
             i_wide[] = numlen(i_top);
             i_wide[] = numlen(i_top * i_top);
             i_wide[] = numlen(i_top * i_top * i_top);
         }
         else{ //测试下限字宽
             i_flag = ;
             i_wide[] = numlen(i_bottom);
             i_wide[] = numlen(i_bottom * i_bottom);
             i_wide[] = numlen(i_bottom * i_bottom * i_bottom);
         }
         printf(],],],"n^3"); //整齐地输出表头
         for(;;i_top += i_flag){
             printf("%*d %*d %*d\n",
             i_wide[],i_top,i_wide[],i_top * i_top,i_wide[],i_top * i_top * i_top);
             //整齐地输出表格
             if(i_top == i_bottom)
                 break;
         }
         printf("Please input top and bottom(\'q\' to quit):");
     }
     getch();
     ;
 }

整齐地输出n的平方,立方的更多相关文章

  1. 从键盘输入数,输出它们的平方值&判断是不是2的阶次方数

    1.从键盘输入两个整数,然后输出它们的平方值和立方值 在Java中,没有像C语言那样有一个专供接受键盘输入值的scanf函数,所以一般的做法是从键盘输入一行字符,保存到字符串s中,再将字符组成的字符串 ...

  2. 【C语言入门教程】3.2 数据的输入 与 输出

    在程序的运行过程中,通常需要用户输入一些数据,而程序运算所得到的计算结果等又需要输出给用户,由此实现人与计算机之间的交互.所以在程序设计中,输入输出语句是一类必不可少的重要语句.在 C 语言中,没有专 ...

  3. Repeater控件的详细用法

    中隔行(交替项)呈现一次.通过设置 AlternatingItemTemplate 元素的样式属性,可以为其指定不同的外观. FooterTemplate在所有数据绑定行呈现之后呈现一次的元素.典型的 ...

  4. 【算法】C语言趣味程序设计编程百例精解

    C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1)  https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c. ...

  5. c primer plus(五版)编程练习-第六章编程练习

    1.编写一个程序,创建一个具有26 个元素的数组,并在其中存储26 个小写字母.并让该程序显示该数组的内容. #include<stdio.h> #define SIZE 26 int m ...

  6. 0UE3 材质概要

    材质概要 概述 参数 当创建材质时如何考虑颜色 材质表达式 Abs(求绝对值) 添加 AntialiasedTextureMask AppendVector(向量合并) BumpOffset(凸凹偏移 ...

  7. 探索性数据分析EDA综述

    目录 1. 数据探索的步骤和准备 2. 缺失值处理 为什么需要处理缺失值 Why data has missing values? 缺失值处理的技术 3. 异常值检测和处理 What is an ou ...

  8. Python模块之"prettytable"

    Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...

  9. 【C语言训练】尼科彻斯定理

    题目描述验证尼科彻斯定理,即:任何一个正整数的立方都可以写成一串连续奇数的和. 输入任一正整数 输出该数的立方分解为一串连续奇数的和 样例输入13样例输出13*13*13=2197=157+159+1 ...

随机推荐

  1. 基于jQuery的web在线流程图设计器GooFlow

    简易的流程图设计控件,效果图: JavaScript源文件在GooFlow.js中,样式文件是GooFlow2.css.可以自定义样式. GooFlow_item类是每个项的样式属性. 但估计实现任务 ...

  2. nginx 编译模块说明

    --prefix= <path> - Nginx安装路径.如果没有指定,默认为 /usr/local/nginx. --sbin-path= <path> - Nginx可执行 ...

  3. Card objects

    There are fifty-two cards in a deck, each of which belongs to one of four suits and one of thirteen ...

  4. mongodb分组,的两种方式,先记一下

    using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using NationalUnion.AdGalle ...

  5. 在Tomcat下部属项目三种方式:

    在Tomcat下部属项目三种方式:       1直接复制:       2. 通过配置虚拟路径的方式    直接修改配置文件 写到tomcat/conf/server.xml     找到<H ...

  6. CSS现代字体栈

    CSS字体栈是一系列的字体,它包含了能在不同操作系统和平台上战士的字体,以尽可能的使排版保持一致性.浏览器会在font-family规定的所有字体中从前往后一次查找,如果找不到当前字体就查找下一个字体 ...

  7. word-wrap:break-word和word-break:break-all的小小比较

    个人感觉word-break:break-all;的用法比word-wrap:break-word;要好点, 当然这是出于某些需求而言,下面简单说下word-break:break-all的优点 wo ...

  8. docker容器服务器 - centos atomic host

    https://blog.inovex.de/docker-a-comparison-of-minimalistic-operating-systems https://github.com/rvyk ...

  9. 如何避免遭受HTTS中间人攻击

    先前为大家说明了如何对App的HTTPS通讯进行中间人攻击,听起来很吓人吧-表示若是使用手机的网银或购物等App,便有可能暴露在风险之中. 会发生HTTPS遭受拦截的主要原因是客户端的App未对服务器 ...

  10. Excel 统计IP

    参考资料: 1:http://zhidao.baidu.com/question/127624244.html 其中的公式改成<1就可以了. 2:http://support.office.mi ...