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

一、PTA实验作业

题目1: 区位码输入法

1. 本题PTA提交列表

2. 设计思路

  定义变量row,bit,number;
  定义字符型变量r,p;
  输入number
  取出后两位数bit=number%100;
  取出前两位数row=number/100
  r=row+160;b=bit+160;
  putchar(r);putchar(b);输出

3.代码截图

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

本题思路清晰,PTA提交一遍就过,并没有调试问题。

题目2:打印菱形图案

1. 本题PTA提交列表

2. 设计思路

    定义变量n,i,j;
    输入n;
    for i=0  to    n/2
       for j=1    to    n-1-2*i  输出空格  end
       for j=1    to    1+2*i     输出*加空格  end
       换行   end
    for i=1   to    n/2
       for j=1    to   2*i     输出空格   end
       for j=1    to   n-2*i    输出*加空格   end
       换行   end

3.代码截图

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

提交到PTA时提示格式错误,运行结果如下图,并没有发现什么问题;

根据经验,格式错误可能是空格的输出有些问题,于是把空格换成#号输出,结果如下图

发现第一列有空格,而题目是没有的,发现问题后改变相应的j起始值,消掉第一列的空格。

题目3:简单计算器

1. 本题PTA提交列表

2. 设计思路

main函数:
定义变量number1,number2,sum,字符型变量op
输入number1,并赋值给sum
while op不等于=
输入number2
if number2 == 0 && op == '/'
输出ERROR,结束程序
if op为四则运算符
如果是,调用函数operation,并赋值给number1
否则,输出ERROR,结束程序
end
输出sum
operation函数:
定义变量sum
switch(op)
op是+,sum = number1 + number2; break;
op是-,sum = number1 - number2; break;
op是*,sum = number1 * number2; break;
op是/,sum = number1 / number2; break;
返回sum的值

3.代码截图

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

提交前两次提示编译错误,随即就想到我scanf写成了scanf_s,因为那时我是用VS写这题的,不知道为什么VS提示我要用scanf_s输入;再次提交,结果如下图

于是我就一个一个调,当只输一个操作数时输出为0,于是我就把第一个操作数赋给sum,这样就解决了这个问题;分母为0时,输出ERROR后,只是通过break跳出了循环,还是会继续输出sum的值,于是把break换成return 0,直接结束循环,非法字符也是同样的问题。

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

三、本周学习总结

1.你学会了什么?

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

一位数组定义的一般形式为:类型名 数组名 [数组长度];
初始化:类型名 数组名 [数组长度]={初值表};初值表依次放数组的初值;初始化也可针对部分元素;静态数组如果没有初始化,系统会自动赋0。

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


数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。

1.3 为什么用数组?

在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分,表达简洁,可读性好,便于使用循环结构。

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

1.选择法:
定义变量i,index,k,n,temp;
输入n,定义数组a[n],利用循环输入n个值,依次赋给数组a的每个元素
for k=0 to k<n-1
index=k;/存放最小值下标/
for i=k+1 to n
if a[i]小于a[index]
如果是,则index=i end
temp=a[index];a[index]=a[k],a[k]=temp最小元素与下标为k的元素互换 end
输出n个数组元素的值
2.冒泡法:
定义变量i,j,k,n
输入n,定义数组a[n],利用循环输入n个值,依次赋给数组a的每个元素
for i=0 to n-1
for j=0 to n-i-1
if a[j]大于a[j+1]
互换a[j]和a[j+1]
end
输出n个数组元素的值
3.直接插入排序
定义变量i,j,k,n,temp
输入n,定义数组a[n],利用循环输入n个值,依次赋给数组a的每个元素
for i=1 to n-1
for j=0 to i-1
if a[j]大于a[i] 跳出循环 end
if j不等于i-1
temp=a[i]//将比a[i]大的数据向后移
for k=j to i-1
a[k+1]=a[k] end
a[k+1]=temp//将a[i]放到正确位置上
end
输出n个数组元素的值

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.6 二维数组如何定义、初始化?

定义:类型名 数组名 [行长度] [列长度]
初始化:类型名 数组名 [行长度] [列长度]={ {初值表0},···,{初值表k},···},也可顺序赋值;二维数组初始化也可针对部分元素

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

通过循环让矩阵的行列互换,交换a[i][j]和a[j][i];
下三角:i<=j 上三角:i>=j 对称矩阵:a[i][j]=a[j][i]

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

主要运用于表示二维表和矩阵等具有行和列的表示形式

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


这题我做的时候都看不懂到底是用来实现什么的,所以做错了,后来才发现原来是进制转换;

这题是因为太粗心大意了,都没看到C选项就选了D

posted @ 2017-11-25 23:29  久念  阅读(378)  评论(5编辑  收藏  举报