C语言博客作业--数据类型

一、PTA实验作业

题目1:

1. 本题PTA提交列表

2. 设计思路

  • 定义n,i;
  • 输入n
  • 如果n=1输出1
  • 如果n大于1
    //输出前一半
    for i=1 to i=n
    输出i
    输出一个空格
    end i
    //输出后一半
    for i=n-1 to i=1
    输出i
    如果 i 大于1,输出空格
    end i

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。


  • 上图代码里 空格没有分得很清楚,最后一个数字后还会有一个空格,提交显示格式错误,后来修正,加上如果n>1才输出空格

  • 修改空格后显示部分正确,提示最小n,想了一下n=1的情况就只用输出1而不是1 1,就加上了一个if 用于判断n=1

    就正确了

题目2:掉入陷阱的数字

1. 本题PTA提交列表

2. 设计思路

  • 定义 h,n,i,sum=0;其中h用于存放上一次计算得到的sum的值
  • 输入n
  • for= i =1 to i=n
    令h=sum; 用h保留上一次得到的数sum //方便与下面新得到的数进行比较
    sum=0;
    当n不等于0时,累加n的最后一个数字,再将n/10去掉个位 //计算各项之和
  • 计算新的sum,sum=sum*3+1;
  • 输出 i:sum的结果
  • 再将新算出的数赋值给n,为下一轮运算做准备
  • 判断新的值n与上一次的值h是否相等,如果相等end i

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。



  • sum=0放错地方导致上图结果,后来将sum=0放在第一个循环里,第二个循环外,使每一次循环开始sum都清零


  • 找到了两个相同的结果但是没有停止,继续输出到 i =13
    调试了一下,如下图
    如图t和n的值不可能相等,再加入一个变量h保存上一个sum的值就对了。

题目3:简单计算器

1. 本题PTA提交列表

2. 设计思路

  • 定义字符型变量ch;
  • 定义整型变量sum=0,flag=0,number; //sum存放答案 ,flag用于判断输入的算式是否合法
  • 输入第一个操作数number
  • 令sum=number;
  • 循环for(;😉{
    输入字符ch和操作数字number
    如果符号ch为=就不再循环
    如果不为等号
    如果是加号sum=sum+number;
    如果是减号sum=sum-number;
    如果是乘号sum=sumnumber;
    如果是除号
    如果numbe为0,令flag=1;
    如果不为0则sum=sum/number;
    如果不为+,-,
    ,/ 则令flag=1
    end 循环
    如果flag为1输出ERROR
    如果flag为0则输出sum的值

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。


  • 如果答案错误就会输出error和sum的值,没有办法只输出一个,所以就加上了flag判断对错就变成了下图,多对了一个点
  • 将ch和number分开输入加判断就

    然后我把开始我循环改掉了,变成一个空循环for(;;)因为不限定输入个数直到“=”出现,然后在空循环中加入对“=”的判断就对了。

二、截图本周题目集的PTA最后排名。

PTA排名

三、本周学习总结

1.你学会了什么?

1.1 一维数组如何定义、初始化?

  • 定义:类型名 数组名 [数组长度];
  • 初始化:类型名 数组名 [数组长度] = {初值表};

1.2 一维数组在内存中结构?可画图说明。数组名表示什么?

  • 数组名表示数组中首元素在内存中的地址

1.3 为什么用数组?

  • 可以记住前面输入的数据,方便后面再次使用。
  • 使用数组会让程序变的简单,而且避免了定义多个变量的麻烦

1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.

  • 选择法:
    定义循环变量i,j,n,最小值min
    输入n
    for i=0 to n-2
    . 最小值min初始化为第一个元素
    . for j=1 to n-1 //找每趟最小数
    . 若a[j]<miin,则min=a[j]
    . 记住最小值所在下标k=j
    . end j
    . a[k]与a[i]交换,实现最小值放在第i个位置
    end i
  • 冒泡法:
    定义循环变量i,j,最小值min
    for i=0 to n-2
    . 最小值min初始化为第一个元素
    . for j=1 to n-1
    . 若a[j]<miin,则交换两个数
    . end j
    . a[k]与a[i]交换,实现最小值放在第i个位置
    end i
  • 直接插入法:
    定义循环变量i,j;
    for i=2 to n //依次插入R[2],…,R[n]
    if(R[i].key<R[i-1].key){//若R[i].key大于等于有序区中所有的keys,则R[i]
    //应在原有位置上
    R[0]=R[i];j=i-1;
    do{ //从右向左在有序区R[1..i-1]中查找R[i]的插入位置
    R[j+1]=R[j]; //将关键字大于R[i].key的记录后移
    j 减一 ;
    }while(R[0].key<R[j].key); //当R[i].key≥R[j].key时终止
    R[j+1]=R[0]; //R[i]插入到正确的位置上
    end if

1.5 介绍什么是二分查找法?它和顺序查找法区别?

  • 二分查找法:二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.
  • 与顺序查找法的区别:(1)二分法比较的次数少,查找速度快,平均性能好,占用系统内存较少,顺序查找法比较次数较多,占用内存较大。(2)二分查找法需要待查表为有序表,而顺序查找法与顺序无关。

1.6 二维数组如何定义、初始化?

  • 定义:类型名 数组名 [行长度][列长度]
  • 初始化:类型名 数组名 [行长度][列长度] = { {初值表,行},{初值表,列}}

1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。

  • 把a[i][j]变成a[j][i]
  • 下三家行标大于等于列标,上三角行标小于等于列标,对称矩阵行标与列标对调,相应位置上的数字也对称

1.8 二维数组一般应用在哪里?

  • 一般运用于矩阵,n*s表格等地方

2.本周的内容,你还不会什么?

  • 数组还不会,不太敢用。
  • 还不会没有说明程序用途,进行程序填空。感觉自己都推不出来。
  • 循环初始化经常放错地方,导致答案出错。

posted on 2017-11-26 22:17  黑白熊熊  阅读(226)  评论(1编辑  收藏  举报

导航