zoukankan      html  css  js  c++  java
  • C博客作业02--循环结构

    这个作业属于哪个班级 C语言--网络2011/2012
    这个作业的地址 C博客作业02--循环结构
    这个作业的目标 学习循环结构内容,包括for循环、while循环、循环嵌套
    姓名 余智康

    0. 展示PTA总分


    1. 本章学习总结

    1.1 for循环

    • 语法:
          for( /*表达式1*/int i = 0; /*表达式2*/ i <= 9; /*表达式3*/ i++;)
          {
                /*循环体*/sum += i;
          }
    
    • 备注:
      • 一轮循环中表达式1只执行一次
      • 执行顺序: 表达式1 ——> 表达式2. ——> 循环体 ——> 表达式3 ——> 表达式2. ——> 循环体 ——> 表达式3 ——> 表达式2. ...//直到表达式2返回值为0时,结束循环。
      • 适用于循环的次数确定的类型

    1.2 while、do while循环

    1.2.1 while循环

    • 语法:
          while(/*表达式1,循环执行的条件*/ i <= 9)
          {
                /*循环体*/ sum += i;
          }
    

    1.2.2 do - while循环

    • 语法:
          do
          {
                sum += i; /*循环体*/
          }while(/*循环执行的条件*/);
    
    • 备注: do - while循环无论条件是否满足都会执行一次,while和for循环当条件满足时才执行循环体。

    1.3 跳出循环相关语句breakcontinue

    1.3.1 break

          for(int i = 1; i <= 9; i++)
          {
                if( i % 2 == 0)
                {
                      break;
                 }
          }
          printf("i = %d",i);
    
    • break: 结束本轮循环,不再执行该循环。如例题中输出 i = 2

    1.3.2 continue

          for(int i = 1; i <= 9; i++)
          {
                if( i % 2 == 0)
                {
                      continue;
                      i = 666;
                }
          }
          printf("i = %d",i);
    
    • continue: 跳过循环中continue接下来的语句,开始下一次循环,并没有结束本轮的循环。如例题中输出 i = 10 而不是 i = 666

    1.4 循环嵌套

    • 例子
          for(int i = 1 ; i <= 9 ; i++)
          {
                for(int j = 1 ; j <= 9; j++)
                {
                      sum += j;
                }
          }
    
    • 注意事项:
      • 循环执行一次循环执行一轮
      • 循环要注意变量是否有重置
      • 外循环和内循环的循环变量要注意,避免循环变量相同导致循环混乱


    2. 编程技巧总结

    图形打印

    ----------菱形打印(实心与空心)

    • (以7行*的菱形为例)
      • 外循环控制行数 :i
      • 内循环控制空格数 :k
      • 内循环控制“*”个数:j
      • 找出k跟i的关系,j跟i的关系
      • k = | 4 - i |
      • j = 7-2*|4-i|
    • (以7行上下字母对称的,首个字母为'A'菱形为例)
      • 大致与7行*的菱形类似,但用字母代替了
      • 判断字母的变化与i的关系
      • ch = 64 + 4 -|4-i|
    • (以7行*的空心菱形为例)
      • 打*的时候做一个判断
      • 即在第一个和最后一个的时候打出“*”,其它时候打出“ ”
           if(j == 1 || j == 7 - 2 *fabs(4-i))
          {
                printf("*");
          }
          else
          {
                printf(" ");
          }
    

    ----------沙漏的打印

    • 以星号沙漏为例
      • 确定行数和星号的关系,以及剩余的星号数量
      • 判断内循环空格数(k)与行数(i)的关系
      • 判断内循环星号个数(j)与行数(i)的关系
    //行数与星号的判断
          scanf("%d", &num);//输入了星号数目
          num = num - 1; 减去最中间一行的一个星号
          while(num >= 2 * ( line + 2) )
          {
                line += 2;
                num = num - 2 * line ;
          }
    

    四则运算

    • 生成随机数
          number1 = rand();
          number2 = rand();
    
    • 生成随机运算符
          type = rand() % 4 + 1;
          switch(type)
          {
          case 1:
                op = '+';
                break;
          case 2:
                op = '-';
                break;
          case 3:
                op = '*';
                break;
          case 4:
                op = '/';
                break;
          }
    
    • 生成算式
          printf("%d %c %d = ?",number1,op,number2)
    

    • 数字逆序
      • 将数字的各个位数取出
      • 将数字逆序到另一个变量中
          int place[99];
          int upsideDown = 0;
          int number;
          
          scanf("%d",&number);
    
          for( int i = 0; number > 0; i++)
          {
                place[i] = number % 10;
                number = number / 10;
                upsideDown = upsideDown * 10 + place[i];
          }  
    

    • 自增运算符:运算结果使变量的值增1,但表达式的返回值不同
      * 前缀++i “++i”的表达式返回为 i+1 的值
      * 后缀i++ “i++”的表达式返回的值为 i 的值
    • 控制列数
      printf("%md,%-md,%m.nf",a,b,c)
      其中m为常量
      • %md 输出宽度为m列,数据实际位数小于m,则左端补空格
      • %-md 输出宽度m列,数据实际位数小于m,则右端补空格
      • %m.nf 输出宽度m列,包括小数点和符号位。小数保留n位
    • 循环输入时,不知道输入数据的个数,可以在最后引入特殊数值结束循环,如引入负数等
    • 数列求和
          sum = 0;
          for( int i = 0; i<=9; i++)
          {
                sum = sum + i;
          }
    


    3. PTA实验作业

    3.1 数列求和问题

    3.1.1 流程图或伪代码介绍思路

    伪代码:
    定义双精度浮点型变量x为输入的值,即为e的x次幂;
    定义双精度浮点型变量sum为数列的和;
    定义双精度浮点型变量number为数列的每一项的数值,用于累加,也用于判断是否不大于0.00001,循环是否进行;
    定义整型的k为x的次幂,也为分式的分母;
    定义函数为fact,用于求阶乘
    ··
    while (number >= 0.00001)
    计算单独一项number的值,需调用阶乘函数fact
    累加number并将值赋给sum,k自增
    end while
    输出sum
    ··
    定义函数fact
    定义变量fact用来暂时存储阶乘的值
    定义变量x,为被求阶乘的数
    for(fact = 1; x > 0; x--)
    累乘x,并将值赋给fact
    end for
    返回fact的值
    ··

    3.1.2 代码截图


    3.1.3 PTA提交列表及说明


    3.2 图形打印问题

    3.2.1 数据处理

    • 循环外:
      • 定义char 类型变量 ch,用于储存字符
      • 定义char 类型变量 useless,用于储存输入时候间隔字符和高度的空格
      • 定义int 类型变量 height,用于储存图形的高度
    • 外循环:
      • 定义int 类型变量 i,用于外循环计数
      • 定义int 类型变量 blank,用于限制字符外面空格输出的数量
      • 定义int 类型变量 limit,用于限制内循环两个字符之间的空格输出的数量
    • 内循环:
      • 定义int 类型变量 j,用于内循环图形字符的外部的空格计数
      • 定义int 类型变量 intoBlank,用于内循环计数输出的两个字符之间的空格数

    3.2.2 代码截图





    3.2.3 PTA提交列表及说明



    3.3 求n以内最大的k个素数以及它们的和

    3.3.1 单步调试截图

    3.3.1 printf调试截图

    3.3.2 代码截图



    3.3.3 PTA提交列表及说明



  • 相关阅读:
    Nhibernate初学
    TSQL笔记
    Java是剑客飘逸;.NET是刀客霸道 (一) 【转载】
    在datagrid中求和(vb.net,c#)
    Java牢骚之我见(转载)
    Java是剑客飘逸;.NET是刀客霸道 (二) 【转载】
    可可西里观后感(转)保护藏羚羊
    .net快速入门方法,转csdn
    手工添加“显示桌面”快捷方式
    过年128>24
  • 原文地址:https://www.cnblogs.com/welcome-to-tomorrow/p/14022158.html
Copyright © 2011-2022 走看看