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

一、PTA实验作业

题目1: 掉入陷阱的数字

1. 本题PTA提交列表

2. 设计思路

1.定义变量bit,sum,num,numcopy,count=0,bit各位的数值,sum为运算后结果,num为输入数据,numcopy备份num数据,count统计次数
2.输入num
3.numcopy=num //备份num
4.sum=0
5.bit=num%10;//取出个位
6.sum+=bit;//各位相加
7.num/=10;//划掉个位
8.if num!=0 返回5
9.num=sum*3+1;//进行操作
10.count++;//统计次数
11.输出count和num
12.if numcopy!=num,返回3

3.代码截图

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

1.运行超时
没有写入如果与上一轮的操作数相同就退出循环,所以就算已经相同也不会跳出循环
解决方法:用一个numcopy,暂时保留了上一轮的操作数来与这一轮新的操作数比较,相同时即可跳出循环

题目2:发红包

1. 本题PTA提交列表

2. 设计思路

1.定义每种面额纸币数量存放变量和总金额sum
2.输入sum
3.if(hundred=sum/100)sum%=100;//如果sum除100得需要的张数,sum去掉该部分。
4.if(fifty=sum/50)sum%=50;//如果sum除50得需要的张数,sum去掉该部分。
5.if(twenty=sum/20)sum%=20;//如果sum除20得需要的张数,sum去掉该部分。
6.if(ten=sum/10)sum%=10;//如果sum除10得需要的张数,sum去掉该部分。
7.one=sum
8.输出各面额张数

3.代码截图

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

1.答案错误

如图没有在该出打出空格,明明答案计算正确但是没分
解决方法:补上空格,对齐
2.刚开始以为该题与之前的题目相同,直接写了好几个for循环,然后因为数据太大,根本走不出循环,后来反应过来,这题应该不是用这种做法,重新考虑才想出来这种解决方法。

题目3:简单计算器

1. 本题PTA提交列表

2. 设计思路

  • 主函数
    1.定义第一个操作数num1
    2.输入num1
    3.调用函数
  • operation函数
    1.传入数据num1
    2.定义num2为第二个操作数,flag判断除法分母为0或有非法运算符,字符op为运算符
    3.进入无限循环4-11
    4.输入op
    5.如果op不是‘=’,‘+’,‘-’,‘’,‘/’,flag=0
    6.如果op为‘=’结束循环
    7.否则输入num2
    8.如果op为‘+’num1+=num2;结束循环
    9.如果op为‘-’num1-=num2;结束循环
    10.如果op为‘
    ’num1*=num2;结束循环
    11.如果op为‘/’,如果num20,flag=0,结束循环,否则num1/=num2;结束循环
    12.如果flag
    0,输出ERROR,否则输出num1

3.代码截图

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

1.部分正确
没有考虑到error的情况
解决方法:引进了flag变量,当出现不合法运算符或者除数为0时,flag变为0,到最后判断flag的值,为0输出error否则输出最后结果。

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

三、本周学习总结

1.你学会了什么?

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

  • 定义:数组类型 数组名[数组长度]
  • 初始化:
    1.类型名 数组名 [数组长度]={初值表}(特值)
    2.利用循环遍历(同一个值)
for(i=0;i<n;i++){
    a[i]=0;
}

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

  • 结构:

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

1.3 为什么用数组?

在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来互相区分,可以存储输入的数据,便于数据重现使用。

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

1.选择法:

定义变量i,index,k,n,temp;
输入n
定义数组a[n]
for i=0 to n-1
    输入a[i]
end
for k=0 to k<n-1
    ndex=k;存放最小值下标
    for i=k+1 to n
        if a[i]小于a[index]
             index=i 
    end
    最小元素与下标为k的元素互换
end
for i=0 to n-1
    输出a[i]
end

2.冒泡法:

定义变量i,j,k,n
输入n
定义数组a[n]
for i=0 to n-1
    输入a[i]
end
for j=0 to n-i-1
    if a[j]大于a[j+1]
        互换a[j]和a[j+1]
end
for i=0 to n-1
    输出a[i]
end

3.直接插入排序

定义变量i,j,k,n,temp
输入n
定义数组a[n]
for i=0 to n-1
    输入a[i]
end
for i=1 to n-1
    for j=0 to i-1
        if a[j]<a[i] 
            a[i]插入到a[j]的位置
            原来a[j]到a[i-1]内的元素右移一位
    end
end
for i=0 to n-1
    输出a[i]
end

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

  • 二分法:
    (1)首先确定该区间的中点位置
    (2)然后将待查的K值与R[mid]比较
    (3)若相等,则查找成功并返回此位置
    (4)若R[mid]>K,则新的查找区间是R[1..mid-1]
    (5)若R[mid]<K,则新的查找区间是R[mid+1..n]
  • 区别:
    二分法只用于数据按顺序排列,但是比顺序法效率高
    顺序法可以用于无规律数据查找,但是效率比较低

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

  • 定义:数组类型 数组名[数组行长度][数组列长度]
  • 初始化:
    1.利用循环遍历(同值)
for(i=0;i<n;i++){
for(j=0;j<n;j++){
    a[i][j]=0;
}
}

2.类型名 数组名 [数组行长度][数组列长度]={初值表}(特值)

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

转置:

//求a的转置矩阵,结果存于b中。
    int i,j;
    int a[M][N], int b[N][M];//M,N为任意值
    for(i = 0; i <M; i ++)
        for(j = 0; j < N; j ++)
            b[j][i] = a[i][j];//转置运算。

关系:

  • 上三角:i<=j
  • 下三角:i>=j
  • 对称矩阵:a[i][j]==a[j][i]

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

一般用于数据间有位置规律的情况,如矩阵

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

字符数组的定义方法还是有不清楚,考试的结果虽然及格了,但也是刚好在线上,看来之前的学习也不是掌握的很充分,对数组的使用也不是很熟练,做pta时明明很简单的题目,不熟悉使用所以做的很慢,所以慢慢掌握数组的使用,提高效率。

posted on 2017-11-25 15:22  斯慕  阅读(310)  评论(7编辑  收藏  举报