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

一、PTA实验作业

题目1:打印菱形图案

1. 本题PTA提交列表

2. 设计思路

定义整形变量n,t,循环变量i,j
输入n的值
如果n!=1
则for i=1 to i<=(n+1)/2
for j=n+1-2i to j>=1
输出空格
end j
for t=1 to t<=2
i-1
输出*
end t
输出\n换行
end i
for i=1 to i<(n+1)/2
for j=1 to j<=2i
输出空格
end j
for t=1 to t<=n-2
i
输出*
end t
输出\n换行
end i
n=1时
则for i=1 to i<=(n+1)/2-1
输出空格
end i
输出*和一个空格

3.代码截图

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

  • 没找到菱形后半部分的规律,答案和例题得的一样,但换其他数字输入后就不是菱形了。
  • 没有讨论当输入的数为1的特殊情况,提交时看到pta上的提示才发现这点。

题目2:掉入陷阱的数字

1. 本题PTA提交列表

2. 设计思路

定义整形变量n,sum,i=1,item1,item2 //sum表示各位数字相加的和,item1用来存放第N个数,item2用来存放第N+1个数
输入n的值
sum赋初值为0
do
t=n;//t用来存放第N个数
while n!=0 //求各位数的和
sum=sum+n%10
n=n/10
end while.
sum=sum*3+1
sum的值赋给item2 //item2用来存放第N+1个数
输出i和sum的值
n=sum;
sum再次赋值为0
i++
while x!=item1时
end do.

3.代码截图

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

  • 第一次写的时候误解了题意,以为是各位数字相加求和那步只需在第一次的时候执行。
  • 不知道while循环结束的条件是什么,最后定义了两个变量来记录前后两个数的值,不知道这样会不会比较麻烦。

题目3:简单计算器

1. 本题PTA提交列表

2. 设计思路

定义整形变量 number,sum,flag初始值为0
定义字符型变量 op
输入sum的值
while op不等于'='成立
则 输入一个字符
如果op等于'='
flag=0;结束循环
else if op等于'+'
sum=sum+number;
else if op等于'-'
sum=sum-number;
else if op等于''
sum=sum
number;
else if op等于'/'
如果number==0
则 flag=1;结束循环
else
sum=sum/number;
else
flag=1;

end while循环

如果flag==0
输出sum最终值
else
输出"ERROR"

3.代码截图

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

第一次写的时候我没有在循环外输出一个数,而是直接在循环内直接输出一个数字和字符,再循环。提交显示部分正确,因为我这个代码当输入的只有一个数字和一个等号时不能输出结果。如我输入’1=‘时,要输出的’1‘这个数,而我写的那个代码不能实现,所以要放一个数在循环外。

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

pta排名

三、本周学习总结

1.你学会了什么?

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

  • 定义一个数组,需要明确数组变量名,数组元素的类型和数组的大小。一般形式为 类型名 数组名【数组长度】。数组可以在定义的同时进行初始化。形式是以一对花括号给出常量值表,系统按下标顺序(存储顺序)对 数组元素进行初始化。给定常数的个数不能超过数组定义的长度。如果给定常数的个数不足,则系统对其余元素初始化为0值。

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

  • 在定义数组之后,系统根据数组中元素的类型及个数在内存中分配了一段连续的存储单元用于存放数组中的各个元素,并对这些单元进行连续编号,即下标,以区分不同的单元。每个单元所需的字节数由数组定义时给定的类型来决定。
  • c语言规定,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。

1.3 为什么用数组?

使用数组会让程序变的简单,而且避免了定义多个变量的麻烦。定义数组能 节省内存。在程序中使用数组,可以让一批相同的类型的变量使用同一个数组变量名,用下标来相互区分。他的优点是表达简洁,可读性好,便于使用循环结构。

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

           选择法

定义变量N,,temp,循环变量i,j
定义数组a[N]
fori=0 to i<N
输入a[i]的值
end i
for i=0 to i<N-1
for j=i+1 to j<N
如果 a[i]>a[j]
则交换a[i]和a[j]的值
end i
end j

       冒泡排序法

定义变量a[N],,temp,循环变量i,j;
for(i=0 to i<N.
输入a[i]的值
end i
for i=0 to i<N //冒泡排序
for j=0 to j<N-i-1
如果a[j]>a[j+1])
则a[j]与aj+1]交换
end j
end i
fori=0 to i<N
输出排序后的a[i]
end i

   直接插入排序

for i=0 to i<N.
输入a[i]的值
end i
for i=1 to i<N
如果(a[i]<a[i-1])
则temp=a[i]
for j=i-1 to j>=0&&temp<a[j]
a[j+1]=a[j]
end j
a[j+1]=temp

end i

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

二分查找法:确定该区间的中点位置:mid=(low+hight)/2

(1)将待查数与中点的数作比较,若相等,则查找成功。如果mid>要查找的数,则舍去mid右边的数,把mid左边的数定为一个新序列。令high=mid-1。

(2)如果mid小于该数,,则舍去mid左边的数,把mid右边的数定为一个新序列。这时low=mid+1。

(3)重复步骤(1)和(2).

(4)如果low>high,则该序列中找不到相同的数。
区别

  • 顺序查找法要把一个数与数列一个个比较,查找效率低。
  • 二分查找法一定是有顺序的数列,而顺序查找法不需要。

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

  • 二维数组的定义形式为:类型名 数组名【行长度】【列长度】

  • 初始化的两种方式:1分行赋初值,一般形式为:类型名 数组名【行长度】【列长度】={{初始值表},···,{初始值表k},···};

2顺序赋值法,一般形式为:类型名 数组名【行长度】【列长度】={初值表}。

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

  • 要实现矩阵转置只需把下标的i、j,变成j、i,即交换所有的a[i][j]和a[j][i]。

  • 下三角:i>=j

  • 上三角:i<=j

  • 对称矩阵:a[i][j]==a[j][i]

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

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

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

pta中的第9题切分表达式和第8题判断合法标识符还写不出来。

posted @ 2017-11-26 23:39  梁才玉  阅读(521)  评论(1编辑  收藏  举报