Longjingrap

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、PTA实验作业

题目1:7-3 倒顺数字串

1. 本题PTA提交列表

2. 设计思路

  • 1.定义n表示输入字符串的长度,count表示要输出的数,i来控制循环
  • 2.循环2n-1次 for(i=1;i<=2n-1;i++)
  • 3.先进行前面递增的部分(i<=n)
  • 4.若n==1,printf("%d",count);
  • 5.否则输出 printf("%d ",count)
  • 6.得到(i>n&&i!=2*n-1) 进行递减输出 count--
  • 7.if(i==2*n-1&&i!=1),既输出最后一个数时,printf("%d",count),不用输出空格

3.代码截图

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

  • 第一个数后面输出有空格,一开始没注意,后来提示答案错误之后又加了一个条件就解决了

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

1.本题PTA提交列表

2. 设计思路

  • 1.N表示输入的自然数,sum表示下一位新的自然数,n用于置换,i用于循环
  • 2.输入N scanf("%d",&N);
  • 3.赋N值给n
  • 4.进行无条件循环for(;😉
  • 5.然后进行while(n!=0){
    sum=sum+n%10;//将各位上的数字相加
    n=n/10;}
    sum=sum*3+1; 计算新的自然数
  • 6.输出printf("%d:%d\n",i++,sum);
    if(sum==N)便结束循环
  • 7.否则n=sum,sum=0.重新开始循环(5)

3.代码截图

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

  • 这道题在DEV-C那边改好做对了,在PTA就直接对了。运行超时是因为循环括号扩错了,后来修改过了就行了

题目3:7-10 简单计算器

1. 本题PTA提交列表

2. 设计思路

  • 1.定义velue1,velue2分别代表运算前后的数,sum表示一次运算后的值
  • 2.char ch
  • 3.输入 scanf("%d",&velue1);
  • 4.(ch=getchar())!='=')进行循环
  • 5.输入scanf("%d",&velue2);
  • 6.若velue2==0,则表示分母为0,输出ERROR
  • 7.否则switch(ch){//判断输入字符进行相应运算
    case '+':sum=velue1+velue2;break;//因为本题运算是按从左到右的顺序来的,所以运行一次就结束
    case '-':sum=velue1-velue2;break;
    case '':sum=velue1velue2;break;
    case '/':sum=velue1/velue2;break;
    default:printf("ERROR\n");return 0;//若为其他字符,输出ERROR
    }
  • 8.velue1=sum;将sum赋值给velue1,进行下一次运算
  • 9.输入字符为=时,结束循环

3.代码截图

{{uploading-image-65509.png(uploading...)}}

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

  • 没判断非法字符,一时不会如何判断,然后记起switch语句中还有一个default语句,加上去就可以了。

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


三、本周学习总结

1.你学会了什么?

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

  • 类型名 数组名[数组长度]=

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

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

1.3 为什么用数组?

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

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

选择法:

  • 1.定义变量i,index,n,k,temp
  • 2.int a[10]
  • 3.给数组赋值
  • 4.for(k=0;k<=n-1;i++){
    index=k;//index存放最小值所在下标
    for(i=k+1;i<n;i++)//寻找最小值所在下标
    if(a[i]<a[index]);//最小元素与下标为k的元素互换;
    index=i;
    temp=a[index];
    a[index]=a[k];
    a[k]=temp;
    }
  • 5.输出数据

冒泡法(直接写主要部分了)

  • 1.int I,j,t;
  • 2.for(i=1;i<n;i++)//外部循环
    for(j=0;j<n-1;j++)//内部循环
    if(a[j]>a[j+1]){//比较两个数大小
    t=a[j];a[j]=a[k+1];a[j+1]=t;}//如果前一个元素大,则互换

直接插入排序

直接插入法:

  • 1.从第二个数开始比较
  • 2.如果比较的数比前一个数小,则插入到前一个位置
  • 3.重复第二步循环,直到该数前面没数字或者前面的数比它的数值大

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

  • 二分查找又称折半查找,它是一种效率较高的查找方法。
  • 二分查找的基本思想是:(设R[low..high]是当前的查找区间)
  • 区别:二分法效率高,但只能用于有序的数列。顺序查找效率相对慢了点,但可以用于无序的数列

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

  • 类型名 数组名[行长度][列长度]
  • 初始化可以按行赋值,也可以按顺序赋值。这两个结果是一样的
  • 比如按行a[3][3]={{1,2,3},{4,5,6},{7,8,9}
    按顺序a[3][3]=

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

  • 行列下标互换可以实现矩阵转置
  • 下三角i<=j 上三角i>=j 对称矩阵i=j

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

  • 一般用于列表,矩阵

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

  • 经过了一次考试,发现不会的太多了,一些基础的都感觉没弄懂,考试也考得很差。说实话,感觉自己什么都不懂呢,得买个本子把老师讲的知识点都记下来,然后把基础先搞懂。看编程的能力也不强,还有很多很多问题要解决。本周讲了数组,也不敢说自己懂了多少,但是大概已经理解了,剩下的通过PTA巩固吧。好好学习,要把下次考试考好。
posted on 2017-11-26 19:38  Longjingrap  阅读(361)  评论(1编辑  收藏  举报