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

一、PTA实验作业

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

1. 本题PTA提交列表

2. 设计思路

Begin
int 整型变量N,number提取每个位的数字,sum计算和,i,n,j
输入N
for(i 1 to 10000;i加一){
sum=0; n=N;//引入n,来保留N的值
计算number=N/10;
if(number等于0)//位数为1
则 sum=N*3+1
否则{//位数不是1
for(j 1 to 5;j加一){
number=N%10;
sum=sum+number; 
N=N/10;
}
sum=N*3+1
}
if(sum等于n)
输出i:sum
且跳出循环,结束程序
否则
输出i:sum
并使N=sum
}
End

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

  • 错误代码
  • 正确代码

    看到PTA上的错误提示“正常范围多位数,带有0”,就知道不能用while(number!=0)来计算sum
    所以就改为了for循环,因为题目是一个小于30000的数,所以最多循环5次

题目2:7-7 发红包

1. 本题PTA提交列表

2. 设计思路

Begin
int 整型变量money,thousand,fifty,twenty,ten,five,two,one
输入money
计算thousand=money/100;
       money=money-thousand*100;
计算fifty=money/50;
       money=money-fifty*50;
计算 twenty=money/20;
        money=money-twenty*20;
计算ten=money/10;
       money=money-ten*10;
计算five=money/5;
       money=money-five*5;
计算two=money/2;
       money=money-two*2;
计算one=money;
输出 100元:thousand张\n 
         50元:fifty张\n
         20元:twenty张\n
         10元:ten张\n 
          5元:five张\n  
          2元:two张\n  
          1元:one张
End

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

  • 错误代码
  • 正确代码

    一开始题意没太懂,使用了多重循环的结构,导致了运行出来出来了好多好多结果;题目要求钱的张数最少,所以用表达式就可以解决题目了。

题目3:7-8 判断合法标识符

1. 本题PTA提交列表

2. 设计思路

Begin
int 整型变量num为运算次数,flag=1,count=0为判断条件,i,j,k
char 数组a[79],ch吸收输入num后的回车
输入num
ch吸收输入num后的回车
for(i  0 to num-1;i加一)
{
 for(j 0 to 78;j加一)
{
输入数组a[j]
if(j等于回车)break跳出循环;}
if(a[0]是数字)则flag为0
for(k 1 to 78;k加一){
if(a[k]是字母、数字、下划线)则count加一
if(k等于j)则跳出循环}
if(flag不为0且count等于k-1)输出Yes //等于k-1是因为最后的空格也使count加一
if(flag等于0或者count不等于k-1)输出No
使count,flag变为初值,进行下一次循环//count=0;flag=1
}
End

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

  • 错误代码

    刚开始用的是getchar,但思路写着写着就没了,然后就换用刚学的一维数组来写,是想着数组可以存放多个数据。


刚学数组对它的应用还不熟悉,就一点点的改


改到这的时候就觉得差不多了,看调试窗发现一次循环后没有对判断条件回复初值

  • 正确代码

    最后说下在打这个题中影响我的地方
    1.在输入运算次数num后要回车,但数组是字符型的,就会被数组吸收,用了许多方法才想到用一次getchar把回车吸收
    2.在输出Yes,No时的条件也换了好多次,一个条件不够,就再定义一个新的条件来满足

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

三、本周学习总结

1.你学会了什么?

  • 1.1 一维数组如何定义、初始化?
    定义的一般形式:类型名 数组名 [数组长度];
    初始化一般形式:类型名 数组名 [数组长度]={初值表};如果是静态存储的数组static没有初始化,系统会自动给所有的数组元素赋0;如果是动态数组static没有初始化,所有的数组元素的值不确定。
  • 1.2 一维数组在内存中结构?可画图说明。数组名表示什么?

    数组名是一个地址常量,存放数组内存空间的首地址。
  • 1.3 为什么用数组?
    数组是最基本的构造类型,它是一组相同类型数据的有序集合。在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分。它的优点是表达简洁,可读性好,便于使用循环结构。
  • 1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
  • 选择法
Begin
int 整型变量i,k为循环次数,index存放最小值所在的下标,change作为交换变量
输入数组长度n
int 数组a[n]
for(i 0 to n-1;i加一 )
输入数依次赋给 数组a
for(k 0 to n-2;k加一 ){
index放最小值下标k
 for(i k+1 to n-1;i加一)//在未排序的数中找到最小值与a[k]交换
 if(a[i]<a[index])index等于1
 a[k]与a[index]交换
}
依次输出数组a
End
  • 冒泡法
Begin
int 整型变量i,k为循环次数,change作为交换变量
输入数组长度n
int 数组a[n]
for(i 0 to n-1;i加一 )
输入数依次赋给 数组a
 for (i = 0; i < n-1; i++) {// n个数,n- 1轮冒泡,每一轮都将当前最大的数推到最后   
   for (j = 0; j < n-1 - i; j++) // n-1- i,意思是每当经过一轮冒泡后,就减少一次比较   
    if (a[j] > a[j+1])
    交换a[j],a[j+1] 
} 
依次输出数组a
End
  • 直接插入法
Begin
int 整型变量i,k,j为循环次数,change作为交换变量
输入数组长度n
int 数组a[n]
for(i 0 to n-1;i加一 )
输入数依次赋给 数组a
for(i 1 to n-1;i加一){
change=a[i]
for(j 0 to i-1;j加一){
 if(change小于a[i]){
 for(k i-1 to j;k减一){
 a[k+1],a[k]交换}
a[j]=change;跳出循环
}
}
}
for(i 0 to n-1;i加一)
输出a[i]
End
  • 1.5 介绍什么是二分查找法?它和顺序查找法区别?
    二分查找法就是先寻找数组中间位置的数,判断其是否为要寻找的数,不是的话,大于要找的数,则往左继续二分,小于要找的数,则往右二分。
    二分查找法适用于排序过的数组,速度快,顺序查找法要遍历数组,在数组很大时效率低,但对数组本身没有要求,适用于短数组
  • 1.6 二维数组如何定义、初始化?
    定义形式:类型名 数组名 [行长度] [列长度];
    初始化有两种形式:
    1.分行赋初值
    类型名 数组名 [行长度] [列长度]={{初值表0},...,{初值表k},...};
    若只对针对部分元素初始化,如果是静态数组,其余元素的初值为0;如果是动态数组,其余元素的初值不确定
    2.顺序赋初值
    类型名 数组名 [数组长度]={初值表};根据数组元素在内存中的存放顺序,把初值表的数据依次赋给元素
    若只对针对部分元素初始化,要注意初值表中的数据的书写顺序
  • 1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
for(i 0 to 行长度-1)
 for(j 0 to 列长度-1)
  if(i小于等于j)
  a [i] [j] 和a [j] [i] 交换
主对角线 i==j
上三角     i<=j
下三角     i>=j
副对角线 i+j==N-1(N为行列长度)
  • 1.8 二维数组一般应用在哪里?
    主要用于表示二维表和矩阵有关的问题。

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

  • 1.在使用函数引用数组的时候,不清楚怎么调用
  • 2.对于排序的几种方法,思路还不太清晰
  • 3.数组的下标从0开始,还是有时候没有意识到
  • 4.PTA的第八题打了很久,一开始就遇见了很多问题
  • 5.查找数字的代码具体还不是很清楚
posted @ 2017-11-26 18:00  yawlc  阅读(313)  评论(1编辑  收藏  举报