C语言第五次作业--数据类型
7-2 区位码输入法:
1. 本题PTA提交列表:
2.设计思路:
- 1.simple定义输入数,character1和character2分别定义低字节和高字节区位码,digit存储取余后的数,sum存储取出的需要的数;
- 2.输入simple;
- 3.i=1;i<=2;i++;
- 4.取出simple个位上的数,存储在digit中;
- 5.去掉simple各位的数;
-
- sum=sum+digit*pow(10,count);
- 7.count用来判断digit所乘的10的个数;
-
- character1=sum+160;character2=simple+160;
- 9.输出高字节区位码和低字节区位码,输出汉字;
3.本题调试过程碰到问题及PTA提交列表情况说明:
-
1.一开始思路错误,以为将输入的四位数拆分成两个数,就行了,即输入%c%c,&simple1,&simple2;但后来发现这样漏洞百出,首先输入的应是数字而不是字符,因为经调试发现计算机根本没法处理字符,其次,输入的两个数如韩国中间不用空格隔开,便看成只输入一个数,而题目中 的输入又不带空格,所以显然拆分的做法不可行;
-
2.不知如何把取余后的数按原来的样子取出来,如从1614中取出14,无论是令sum=sum10+digit,还是令sum=sum+digit10,都不能原样取出14,后来想到引用一个变量count来控制何时digit该乘10;
-
3.忘给count赋初值;
-
4.刚开始想到用simple/100,simple%100,的方式取出前两个数,经调试发现那样不可行;
7-4 打印菱形图案:
1.本题PTA提交列表:
2.设计思路:
- 1.i,k,j,y,h定义循环控制变量,n定义输入的正的奇数;
- 2.k控制行数,k=1;k<=n;k++;
- 3.如果行数不过半,i=1;i<=n-1-2(k-1);i++控制输入之前的空格数;
- 4.j=1;j<=2k-1;j++,控制输出和空格的个数,因为最后一个*号后没有字符,空格输出可以忽略;
- 5.如果行数超过一半,y=1;y<=n-1-2*(n-k);y++,控制菱形一半行数后的行数空格的输出;
- 6.h=1;h<=2n-2k+1;h++,控制输出*和空格的个数;
3.本题调试过程碰到问题及PTA提交列表情况说明:
- 1.这道题和嵌套循环7-3编程打印空心字符菱形有类似之处,它们都需要找出行数和输出个数之间的规律,也都需要分上下部分来算,不同的是本题省去了计算中间空格,多了每个符号后面还要输出空格的条件,会相对简单,但是正因为每个符号后还要输出空格,所以前面空格的输出就有变化,以前的题前面空格输出是每行差一个空格,而本题的每行差2个空格,给找规律增加了难度。一开始因为没发现这个变化,以为空格个数还是每行差1个,导致错误;
7-8 判断合法标识符:
1.本题PTA提交列表:
2.设计思路:
- 1.定义整型变量i,j,repeat,flag,其中flag用来判断字符是否合法,repeat控制输入次数,定义字符变量symbol;
- 2.输入symbol;
- 3.i=1;i<=repeat;i++,控制输入次数;
- 4.flag=0;每一次重新判断新变量时先将flag归0,以防影响下一次判断;
- 5.嵌套一个循环j=1;j<=80;j++,控制字符个数不超过80个;
- 6.输入symbol,循环读取单个字符;
- 7.如果第一个字符就是数字,则判断不合法,令flag=1
- 8.如果都不满足symbol是字母,数字,下划线,回车,则判断为不合法,即令flag=1,回车虽然不在合法字符,范围内,但当读取它时,为了不让其进入此条件,便将其作为合法字符
- 9.如果读取了回车,说明此字符型变量已经读完,可以跳出循环;
- 10.如果flag=1,则不是合法字符,否则是合法字符;
3.本题调试过程碰到问题及PTA提交列表情况说明:
- 1.发现了ch=getchar()和scanf("%c",&ch)的功能是一样的,都只能读取单个字符,且经调试发现,当你输入字符串时,如果没有将其中的每个字符读完,循环是不会罢休的,所以你一定要注意两点:一是题目给出的允许输入字符个数的上限;二是题目所说的字符串(不是单个字符)之间的间隔是空格还是回车或者是#还是别的什么,当循环读取到这个字符时,果断break;
- 2.一开始把!(symbol>='a'&&symbol<='z')&&!(symbol>='A'&&symbol<='Z')&&!(symbol>='0'&&symbol<='9')&&!(symbol'_')写成!(symbol>='a'&&symbol<='z')||!(symbol>='A'&&symbol<='Z')||!(symbol>='0'&&symbol<='9')||!(symbol'_'),经调试后发现逻辑不对,改了过来;
- 3.认为当判断有一个不合法字符便可输出,于是在进入不合法条件时便令其break,后来调试发现即使你让它break,它也还是会把当前字符串读取到最后一个字符为止,所以我在读取到\n符的时候break,刚好也读取完了这个字符,然后读入下一个字符;
- 4.另外遇到的一个问题是当读到\n时,它会进入if!(symbol>='a'&&symbol<='z')&&!(symbol>='A'&&symbol<='Z')&&!(symbol>='0'&&symbol<='9')&&!(symbol=='_')条件,所以为了防止它进入条件使得flag=0;
- 5.一开始不懂得用一个变量来判断合法与否,只是令其在满足条件时输出,发现会输出多次,最后考虑新设置一个变量来帮助判断;
二、截图本周题目集的PTA最后排名:
三、本周学习总结:
1.你学会了什么?
-
- 一维数组如何定义、初始化?类型名 数组名 [数组长度] C语言规定静态数组才能初始化,静态数组如果没有初始化,系统自动给所有数组元素赋0;
-
- 一维数组在内存中结构?可画图说明。数组名表示什么?数组名是一个地址常量,存放数组内存空间首地址;
- 一维数组在内存中结构?可画图说明。数组名表示什么?数组名是一个地址常量,存放数组内存空间首地址;
-
- 为什么用数组?表达简洁,可读性好,便于使用循环结构;
-
- 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示
-
A.选择法:.
-
1.定义数组a,index存放最小值所在的下标;
-
2.将输入值依次赋给数组a的n个元素;
-
3.k=0;k<n-1;k++,令index=k,当找不到a[i]<a[index]时,a[index]依旧保持它的值;
-
4.k+1;i<n;i++;寻找最小值所在下标;
-
3.如果a[i]<a[index],令index=i;
-
4.以temp为媒介交换a[index]和a[k]的值;
-
5.依次输出a[i的值;
-
- 介绍什么是二分查找法?它和顺序查找法区别?
-
1.该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分。接下来根据所要査找序列的升降序规律及中间元素与所查找元素的大小关系,来选择所要査找元素可能存在的那部分序列,对其采用同样的方法进行査找,直至能够确定所要查找的元素是否存在;
-
2.对于一个大小为n的数组,顺序查找需要完成n次比较才能确定x不在该数组中,而二分查找法所需的次数大大减少;
-
- 二维数组如何定义、初始化?二维数组初始化的形式为:数据类型 数组名[整常量表达式][ 整常量表达式]={ 初始化数据 };在{ }中给出各数组元素的初值,各初值之间用逗号分开。把{ }中的初值依次赋给各数组元素;
2.本周的内容,你还不会什么?
- 1.感觉数组这一块难度开始加大,有点跟不上,要尽快补回来才行;