zoukankan      html  css  js  c++  java
  • C语言博客作业--数据类型

    一、PTA实验作业

    题目1:7-4 打印菱形图案

    1. 本题PTA提交列表

    2. 设计思路

    
    定义变量n表示菱形高度,i,j,k分别控制循环
    for i=1 to n/2+1
    打出上三角的*号 
        for j=1 to (n-1)-2*(i-1) 
          输出空格
        for k=1 to 1+2*(i-1)
    	  输出*号
    	每递增一次i换一次行 
    	  
    for i=1 to n/2  
    打出下三角的*号
        for j=1 to 2*i
    	   输出空格
        for k=1 to (n-2)-2*(i-1)
    	    输出*号
    	 每递增一次i换一次行 
    
    

    3.代码截图

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

    • 在找每行号前的空格数时遇到问题 解决办法:把每行的行数,输出号数,空格数写出来,慢慢找规律,发现上三角的规律是空格数=高度-2行数+1 ;下三角的规律是空格数=2行数(从下三角第一行开始的行数)
    • 输出最后一行后多一行 解决办法:在下三角的换行条件前加一行判断语句,若下三角的行数已经等于高度的一半直接打破循环语句

    题目2:7-6 掉入陷阱的数字

    1. 本题PTA提交列表

    2. 设计思路

    
    int trap(int n); //函数声明
    主函数:
    定义number表示输入的数,i来控制循环
    输入数字number
    for i=1 to  到一个数字和它的产生的新数相等时停止
        调用函数输出要求的格式内容(i:trap(number)) 
        将number赋值为它的陷阱新数trap(number)
    	
    int trap(int n) //该函数返回陷阱新数N
    定义a统计数位,i控制循环 ,N为新数 ,b于n等值用来统计位数 
    for a=1 to  b!=0
         b/=10
    	  
    for i=1 to a //算新数 
        将其各位数字相加求和,再将其和乘以3后加上1 ,求出新数N
    返回N 
    
    

    3.代码截图

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

    • 没有任何输出(没有进循环)解决办法:发现是循环条件弄成新老数相等时结束
    • 输出到第二个数就错了 解决办法:在trap函数的统计数位那一个循环后面加了输出位数,发现位数都是统计错的,然后看了一下循环结束条件,原来是条件写成b==0了应该是b!=0
    • 发现程序不能输出两个相等的数,也就是第三个数和第四个数相等,但是只输出了第三个数,而题目的例子应该是输出第三个和第四个数字 解决办法:我将主函数中的循环输出的结束条件放在了输出之后就实现了

    题目1:7-10 简单计算器

    1. 本题PTA提交列表

    2. 设计思路

    
    定义number1 表示第一个数 number2表示后面的数 op表示符号位
    输入number1
    for to op=getchar()!= ‘=’ 
         输入number2
    	 如果分母为0时输出错误提示 
    	 如果输入符号为+ 计算 total=number1+number2
    	 如果输入符号为- 计算 total=number1-number2
    	 如果输入符号为* 计算 total=number1*number2
    	 如果输入符号为/ 计算 total=number1/number2
    	 如果输入其他符号输出错误提示
    	 最后number1=total 再进行下一轮计算
    输出number1 
    
    

    3.代码截图

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

    • 刚刚开始不知道该把输入字符数据的那个放在个位置才好 解决办法:询问同学,同学告诉我把它放在循环条件里,同时判断它是否等于‘=’就可以实现循环
    • 在部分错误中,只有出现错误提示的条件正确,其他的答案错误 解决办法:在最后把total的值赋给number1继续进行下一轮

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

    三、本周学习总结

    1.你学会了什么?

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

    
    int a[5],i;//定义数组类型 数组名
    for(i=0;i<5;i++){
       a[i]=0
    }//初始化
    
    

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

    存储的地址

    1.3 为什么用数组?

    更方便数据的存储调用,比如一组数据比大小,如果按照学数组前的打法,可能要输入一个比较一个,而用数组就可以输入完一组数据去比较,并且比较的每个数据都还被存储在内存中,方便之后需要用作其他计算时使用。

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

    选择法:

    
    for i=0 to i<4
    第i轮 k=i 认为第i个数最小
    从下一个数到最后一个数与a[k]比较
    if(a[k]>a[j])k=j k就赋值小数的下标
    if(k!=i) a[k]与dii个位置上的数交换位置
    
    

    冒泡法:

    
    for i=1:n-1 //总共需要冒n-1次泡
      for j=1:i-1 //泡泡的位置
        compare a[j],a[j+1], 大的放右边,小的放左边 //比较泡里面两个数大小
     
    

    直接插入法:

    
    ⒈从有序数列和无序数列{a2,a3,…,an}开始进行排序;
    
    ⒉处理第i个元素时(i=2,3,…,n),数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;
    
    ⒊重复第二步,共进行n-i次插入处理,数列全部有序。
    
    

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

    • 二分查找法:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
    • 区别:二分查找法优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。

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

    
    int a[3][3],j,k;//定义二维(三行三列)数组
    for(j=0;j<3;j++)
        for(k=0;k<3;k++)
            a[j][k]=0;//初始化
    
    
    

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

    • 如一个方阵a[i][k],若i>=k,则属于下三角,i<=k属于上三角,对称矩阵a[i][k]=a[k][i]。
    • 互换i和k实现装置

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

    计算方阵问题,结合线性代数解决问题。

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

    • 字符型数组的使用,在pta第八题中我尝试使用字符型数组来储存变量做题,但是没有能成功完成。
    • 直接打出插入法和二分法的代码还是有点困难吧。
  • 相关阅读:
    Go:获取命令行参数
    Go:文件操作
    Go:类型断言
    GO:interface
    Go:面向"对象"
    Go:工厂模式
    layui中流加载layui.flow
    js显示当前时间
    layui中的分页laypage
    layui中的多图上传
  • 原文地址:https://www.cnblogs.com/Littleweii/p/7900338.html
Copyright © 2011-2022 走看看