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第八题中我尝试使用字符型数组来储存变量做题,但是没有能成功完成。
  • 直接打出插入法和二分法的代码还是有点困难吧。
posted @ 2017-11-26 22:45  Littleweii  阅读(310)  评论(1编辑  收藏  举报