zoukankan      html  css  js  c++  java
  • C Primer Plus_第6章_循环_编程练习

    1.题略
    #include
    int main(void)
    {
    int i;
    char ch[26];

    for (i = 97; i <= (97+25); i++)
    {
    ch[i-97] = i;
    printf("ch[%d] = %c ", i-97, ch[i-97]);
    }
    printf("That is all! thanks~ ");
    return 0;
    }
    这是之前写的,有点乱,改了些如下:
    #include
    int main(void)
    {
    int i;
    char ch[26];

    for (i=0 ; i<=25; i++)
    {
    printf("ch[%d] = %c ", i, i+97);
    }
    printf("That is all! thanks~ ");
    return 0;
    }
    结果都一样如下:
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    2.使用嵌套循环产生“正直角三角形$”,改了下题目要求,产生倒立的直角三角形。
    #include
    #define ROWS  5 //行
    #define CHARS  5 //列

    int main(void)
    {
    int row, ch;
    for(row=0; row
    {
    for(ch=0; ch<5-row; ch++)
    printf("$");
    printf(" ");
    }
    return 0;
    }
    结果:C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    3.题略
    #include
    int main(void)
    {
    // char lets[7] = "ABCDEF"; //注意,"ABCDEF"是占用7个字符的
    int col, row;
    for(row=0; row<6; row++)
    {
    for(col=0; col<=row; col++)
    printf("%c ", 70-col);
    printf(" ");
    }
    return 0;
    }
    结果:C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    4.题略
    #include

    int main(void)
    {
    char letter = 0;
    int row = int(letter) - 64, ch = 2 * row;
    int s, d, i, r;

    printf("Please enter a capital letter: ");
    scanf("%c", &letter);
    row = int(letter) - 64;
    ch = 2 * row - 1;
    printf("The letter is %c, ascii num is %d ", letter, letter);
    printf("The tower should have %d rows and %d cols ", row, ch);
    printf("Here we go: ");

    for(r = 0; r < row; r++)
    {
    for(s=0; s < (row-r); s++)
    printf(" "); //打印空格
    for(d=0; d <= r; d++)
    printf("%c", 65+d); //升序打印字母
    for(i=0; i < r; i++)
    printf("%c", 64+r-i); //降序打印字母
    printf(" ");
    }

    return 0; 
    }
    这题点难度,考验逻辑。自己脑子绕晕了,就根据显示的错误结果,反复改循环判断里的公式,才弄出结果:
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    5.题略
    #include
    int main(void)
    {
    long min;
    int max, i;

    printf("Please enter a min integer and a max integer: ");
    scanf("%d %d", &min, &max);
    printf("Here we go: ");
    for (i=0; i <= max-min; i++)
    printf("] ] ] ", min+i, (min+i)*(min+i), (min+i)*(min+i)*(min+i));
    printf(" ");
    printf("That is all! ");

    return 0;
    }
    结果C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    6.题略
    #include
    #include

    int main(void)
    {
    char word[40];
    int i, j;

    printf("Please enter a word: ");
    scanf("%s", &word);
    j = strlen(word);
    for(i=0; i <= j; i++)
    printf("%c", word[j-i-1]); //注意是j-i-1,因为字符串里头有结尾字符,多占了个位置
    printf(" hope you like it~ ");
    return 0;
    }
    结果C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    7.题略
    #include
    int main(void)
    {
    float a, b;
    printf("Please enter two float number a and b: ");
    while(scanf("%f %f", &a, &b) == 2)
    //本来写的是while(scanf("%f %f", &a, &b) == 1),但总是跳出循环,现scanf()返回值并不只有0和1啊!!!
    //此处读入成功的话,经测试scanf返回值是2 //也可改成while(scanf("%f %f", &a, &b) != 0)
    {
    printf("%f ", (a-b)/(a*b));
    printf("Please enter another two float number a and b: ");
    }
    printf("Done! ");
    return 0;
    }
    结果C <wbr>Primer <wbr>Plus_第6章_循环_编程练习
    心得:
    scanf 函数是有返回值的,它的返回值可以分成三种情况
      1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b);
          如果用户输入"3 4",可以正确输入,返回2(正确输入了两个变量);
          如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。
      2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。
      3) EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束。
    printf 函数同样,它的返回值是输出的字符数,例如,printf("1234")的返回值是4,而printf("1234 ")的返回值是5

    8.题略
    #include double nimeifu(float i, float j); //注意定义返回值的函数时,要说明返回值类型例如double,这里就不是void咯 int main(void) { float a, b; int status; double c; printf("Please enter two float number: "); status = scanf("%f %f", &a, &b); while(status != 0) { c = nimeifu(a, b); printf("%.2lf ", c); printf("Fuck me with another two integers: "); status = scanf("%f %f", &a, &b); } return 0; } double nimeifu(float i, float j) { double h; h = (i-j)/(i*j); return h; }
    结果同上,不贴图了

    9.题略
    #include int nimeifu(int a, int b); int main(void) { int a, b, c; printf("Please enter minimum and maximum int limits: "); scanf("%d %d", &a, &b); while (a != b) { c = nimeifu(a, b); printf("the sums of the squares from %d to %d is %d ", a*a, b*b, c); printf("Enter next set of limits, you little bitch: "); scanf("%d %d", &a, &b); } printf("Done!"); return 0; } int nimeifu(int a, int b) { int sum=0, i; for(i=a; i<=b; i++) sum = sum + i*i; return sum; }
    结果
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    10.题略
    #include
    int main(void)
    {
    int bitch[8];
    int i, j;
    printf("please enter 8 integers ");
    for(i=0; i<8; i++)
    scanf("%d", &bitch[i]);
    for(j=0; j<8; j++)
    printf("bitch[%d] is %d ", j, bitch[8-j-1]);
    printf(" Done! ");
    return 0;
    }
    结果
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    11.题略
    #include
    float mi_hs(int a, int b);

    int main(void)
    {
    int i, limit;
    float sum1=1.0, sum2=1.0;

    printf("Please enter a limit: ");
    scanf("%d", &limit);

    for(i=1; i<=limit; i++)
    sum1 =sum1 + 1.0 / (1 + i);
    printf("%f ", sum1);

    for(i=1; i<=limit; i++)
    sum2 = sum2 + mi_hs(-1, i) / (1 + i);
    printf("%f ", sum2);

    return 0;
    }
    float mi_hs(int a, int b)
    {
    float sum=1.0;
    int i;
    for(i=1; i<=b; i++)
    sum = sum * a;
    return sum;
    }
    自己编了个幂函数,没有用math.h里的pow,显得麻烦一些,但也有好处。使用pow必须遵守float或者double类型的数据,而且好像pow(a,b)中的a不能为负数,可我实际用了下-1.0代替a,也可行,但是-1就不行。很多简单的问题东西要自己动手试一下才能确定啊

    12.题略
    #include
    int mi_hs(int a, int b);

    int main(void)
    {
    int shit[8];
    int i;

    for(i=0; i<8; i++)
    {
    shit[i] = mi_hs(2, i);
    printf("%d  ", shit[i]);
    }
    printf(" This is shit!!! ");
    i = 0;
    do
    {
    printf("%d  ", shit[7-i]);
    i++;
    }
    while(i<=7);
    printf(" Now this is bullshit!!! ");
    return 0;
    }

    int mi_hs(int a, int b)
    {
    int sum=1, i;
    for(i=1; i<=b; i++)
    sum = sum * a;
    return sum;
    }
    结果
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习

    13.题略
    #include

    int main(void)
    {
    int i,j;
    double sum = 0;
    double tab1[8];
    double tab2[8];
    printf("Please input 8 numbers: ");
    for(i=0; i<8; i++)
    {
    scanf("%lf",&tab1[i]);
    for(j=0, sum=0; j<=i; j++) //天啊,居然被我调试出来了
    sum = sum + tab1[j];
    tab2[i] = sum;
    }
    for(i=0; i<8; i++)
    {
    printf("%lf  ",tab1[i]);
    }
    for(i=0; i<8; i++)
    {
    printf("%lf  ",tab2[i]);
    }

    return 0;
    }
    心得:这题搞的我头都晕乎了,晕乎了好长时间才弄出来,也是晕乎乎弄出来的,现在也是晕乎乎的,不知道自己为什么就突然想到了for(j=0, sum=0; j<=i; j++)。其实也是一个过程,调试程序,利用监视窗口,观察程序中每个变量sum,tab1[],tab2[],每一步每一个数据的变化,发现sum有被多计算被重复计算,没有及时更新位0,但循环里的话,自己还不知道怎么给每次更新为0,只能想到赋值为0,后来想到可以再for循环每一次迭代是用逗号进行更新sum的值为0。大概是这么想到的。所以学会设置断点并利用监视器来观察每一步数据的变化,进而对程序进行调整,是一件非常有意义的事情吧。这个程序,自己需要多体会,以后还需再编写思考的。
    不多说了,贴上结果图
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习
    (PS:scanf和printf函数使用时,尽量注意格式说明符要一致,double型数据要用%lf,否则容易出错了自己还不容易发现,这也是我遇到的问题,切记切记)

    14.题略
    #include

    int main (void)
    {
    int i,j;
    char ch[255];

    printf("Please input some characters: ");
    for (i=0; scanf("%c", &ch[i]), ch[i] != ' '; i++); //自己还要多体会呀
    printf("here we go: ");
    for (j=0; printf("%c",ch[i-j]), i-j>0; j++); //自己还要多体会呀
    }
    看似简单,同样用到了for循环中加入逗号的技巧
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习
    注意,换行符这种在控制台窗口上看不见的输入,也是字符 ,所以倒着输出的时候,先输出换行符,再到looc等,这也是here we go下面空一行的原因。另外,这种for()小括号中包含循环部分,一语句就搞定的for语句,记得再后面加上分号。

    15.题略
    #include
    #include

    int main (void)
    {
    int i;

    double Dap = 100, Dei = 100;
    for(i=1; Dap=100+10*i, Dei=100*pow(1.05,i), Dap > Dei; i++);//两个逗号连用!!
    printf("After %d years, Dei(%lf) will be more than Dap(%lf) ", i, Dei, Dap);
    }
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习
    也是挺有意思的,两个逗号连着用,我也是第一次瞎猜试试看能不能这样用的,这一个for循环里头真是挺丰富的呀。不过for里头丰富了之后,整个程序似乎简约了很多。

    16.题略
    #include

    int main (void)
    {
    int i;
    double sum = 100;

    for(i=1; sum=sum*1.08-10, sum>0; i++); //又是for中用逗号
    printf("After %d years the money will be used up", i);
    }
    似乎喜欢上for中用逗号了,程序简洁。
    C <wbr>Primer <wbr>Plus_第6章_循环_编程练习


  • 相关阅读:
    归档模式与非归档模式之间的转换
    Cognos 常见错误解决办法
    Informatica 错误信息解决办法汇总
    转摘:解决动态列固定行月季年组合式报表
    数据库名、实例名、全局数据库名、服务名的区别
    转摘:维度与指标混合嵌入(合计)设计
    WinForm使用XML动态加载多语言
    windows中最重要的三个动态链接库及功能
    什么是.Net的异步机制(Invoke,BeginInvoke,EndInvoke) step 2
    深入理解.net服务器控件
  • 原文地址:https://www.cnblogs.com/TomLily/p/5814580.html
Copyright © 2011-2022 走看看