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

一、PTA实验作业

题目1:倒顺数字串

1.本题PTA提交列表

2.设计思路

  • 1.定义i,j用于循环
  • 2.输入n
  • 3.for(i=1;i<=n;i++),让数字顺序从小到大后面带空格顺序输出,如果i等于n,则不带空格输出
  • 4.for(j=n-1;j>=1;j--),从最大数(不包括最大数)开始倒序前面带空格输出

3.代码截图

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

  • 格式错误:输出最大数6时后面仍带空格,与后面最大数倒序前面带空格输出发生矛盾
  • 解决方法:特殊情况i=n时,输出的最大数不带任何空格

题目2. 发红包

1.本题PTA提交列表

2.设计思路

  • 思路:用全局变量定义函数解决此题
  • 1.声明函数void money(int m),定义整型全局变量a存放扣除相应面额后剩余的金额,m存放剩余金额,
    n存放纸币面额,f存放总金额
  • 2.定义函数,借助整型变量b存放相应纸币面额的张数,先a=m%n; 再运算b=m/n; 最后m=a;
  • 3.m最开始让它等于f总金额,再使用函数,因为m为全局变量,所以上一个函数结束,其值能继续为下一个函数所用
  • 4.money(100);
    money(50);
    money(20);
    money(10);
    money(5);
    money(2);
    money(1);
  • 5.printf("%3d元:%3d张\n",n,b);按前面宽度为3输出并换行

3.代码截图

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

  • 格式错误:最后输出没有按照个位对齐的格式输出

  • 解决方法:最后输出语句从printf("%d元:%d张\n",n,b);改为printf("%3d元:%3d张\n",n,b);

题目3.切分表达式——写个tokenizer吧

1.本题PTA提交列表

2.设计思路

  • 1.定义字符型变量a存放当前字符,b存放a前面一个字符
  • 2.输入字符a,让b=a
  • 3.while循环语句之前判断第一个字符:如果第一个字符a>='('&&a<='/'&&a!='-'&&a!='+',换行输出
    如果第一个字符a'-'||a'+',不换行输出
    如果第一个字符a>='0'&&a<='9',不换行输出
  • 4.while语句,条件为a不等于‘/n’(换行),让b=a存放上一个字符,a=getchar()获取下一个新字符
  • 5.如果当前字符a为数字字符,不换行输出,continue语句开始新的循环
    如果上一个字符b为数字字符,当前a为字符'.' ,则不换行输出,continue语句开始新的循环
    如果前一个字符b为数字字符,当前字符a为运算数,先换行再输出再换行,continue语句开始新的循环
    如果上一个字符b为'(',当前字符a为'-',肯定为负数,'-'不换行输出,continue语句开始新的循环
    如果当前字符a为除'-'外的运算符,都要输出换行,continue语句开始新的循环
    根据读取的新字符判断while循环条件

3.代码截图


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

部分正确


这两个地方答案错误,

解决方法:对第一个读取的字符特性判断:如果第一个字符为‘+’或者‘-’,不换行输出 ,后面的字符交给后面的程序判断

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

三、本周学习总结

1.你学会了什么?

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

  • 定义:数组类型+数组名+[数组长度] 初始化:数据类型+ 数组名+[整型常量表达式]=

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


  • 数组名是一个地址常量,存放数组内存空间的首地址

1.3为什么用数组?

  • 数组是一组相同类型数据的有序集合,在程序中能重复表达和使用,且表达简洁,可读性好,便于使用循环结构

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

  • 选择法:
          1.将输入数依次赋给数组a的n个元素a[0]~a[n-1]
          2.对n个数排序,for(k=0;k<n-1;k++) min=k min存放最小值所在下标
          3.for(i=k+1;i<n;i++) 让i从后一项开始,如果a[i]<a[min],令a[i]与a[min]值互相交换
          4.输出n个数组元素的值 
  • 冒泡法:
          1.将输入数依次赋给数组a的n个元素a[0]—a[n-1]
          2.对n个数排序,for(k=0;k<n-1;k++) max=k ,max存放最大值所在下标
          3.for(i=0;i<n-1-i;i++) 让i从0开始,因为每次循环最后一项为最大数,故下次循环不需要再与上一次循环的最大项比较,所以每次少一项为n-i-1,如果a[i]>a[max],令a[i]与a[max]值互相交换
          4.输出n个数组元素的值
  • 直接插入排序:
           1.将输入数依次赋给数组a的n个元素a[0]—a[n-1]
           2.对n个数排序,for(k=1;k<n-1;k++) j=k
           3.执行for(i=k;i>0;i--) 让i从k开始,再与之前的数组进行大小比较,如果比前一项小就互换两值,如果a[j]<a[i-1],令a[i]与a[i-1]值互相交换,j=i-1
           4.输出n个数组元素的值 

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

  • 二分查找法: 定义一个数组a,首先查找的数与数组a的中位数比较,若小,则取中位数左半部分,(若大,则取中位数右半部分),在去左半部分的中位数依次比较重复此步骤,直至找到,否则当左界low>右界high,则输出无
    区别:如果数组a无序,且在数据量小的情况下 ,顺序查找优于二分查找,但是当数据量特别大,且数组a有序的情况下,二分查找法方便快捷,运算量远远小于顺序查找,查找关键词所用时间少。

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

  • 定义:类型名+数组名+[行长度]+[列长度]
  • 初始化:分行赋初值:int a [3] [3] ={ { 1,2,3} , {4,5,6} ,{7,8,9} } 顺序赋初值: int a [3] [3] =

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

  • 以主对角线为界,行列互换
  • 下三角:i>=j
    上三角:i<=j
    对称矩阵:i==j

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

  • 主要用于表示二维表和矩阵

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

  • PTA中对字符切分表达式这题花了较多的时间,对特殊情况的分析反应较为迟钝,一发现错误不能及时想出对策,
    可能要冥思苦想好一会儿甚至花上一整天的时间,对这类题目接触的还是太少,解题思路不够清晰,组织思路的能力也还需要提高
  • 课堂派中在对写算法(除选择排序法外)实现数组排序中,没有清楚表达自己的意思同时也存在思路错误的,
    还有就是自己的伪代码太繁杂,让人看了很烦,自己需要多多练习简洁易懂地写伪代码的能力
posted @ 2017-11-26 11:10  朱杰伟  阅读(259)  评论(3编辑  收藏  举报