C语言博客作业--数据类型
一、PTA实验作业。
题目1:7-8 判断合法标识符
1.本题PTA实验结果
2.设计思路
-
(1) 定义一个自定义函数int judge(int i);
-
(2)在主函数定义i,repeat;
-
(3)输入repeat
-
(4)‘for(i=1;i<=repeat;i++)’
-
(5)如果自定义函数judge(i)==1,输出Yes,并换行;否则输出No,并换行。
-
(6)在judge(int i)中定义整型变量flag=0,time=1,和字符型变量op
-
(7)while(输入的字符型变量op!='\n'),执行循环
-
(8)如果op=='\n',跳出循环;
-
(9)如果time1,time++;在这之中如果‘op'_'||(op>='A'&&op<='Z')||(op>='a'&&op<='z')’,直接进入下一次循环;否则flag=1;进入下一次循环。
-
(10)否则,如果op=='_'||(op>='A'&&op<='Z')||(op>='a'&&op<='z')||(op>='0'&&op<='9'),直接进入下一次循环;否则flag=1;进入下一次循环。
-(11)如果flag==1,i=0;否则i=1。
-(12)返回i的值到主函数。
3.代码截图
4.本题调试过程碰到问题及解决办法
-
碰到的问题:
- ![](https://images2018.cnblogs.com/blog/1232112/201711/1232112-20171125223300718-1935756879.png)本应该输出Yes而输出了No。![](https://images2018.cnblogs.com/blog/1232112/201711/1232112-20171125223554531-1744517228.png)应该进入i=0,而没进入i=1![](https://images2018.cnblogs.com/blog/1232112/201711/1232112-20171125223656453-305585576.png)其应该直接出去,但其是先看\n是否成立再输出。
-
解决办法:加入一个\n判断if(op=='\n'){break;};
题目2:7-9 切分表达式——写个tokenizer吧
1.本题PTA实验结果
2.设计思路
-
(1)定义整型变量i=0和字符型数组 ch[48]。
-
(2)while(输入的字符型数组ch[i]!='\n'),执行循环,i++。直至循环结束。并重新将i=0;
-
(3)while(ch[i]!='\n'),执行循环。如果i0&&ch[i]'(',在这之中如果ch[i+1]'-'||ch[i+1]'+',输出ch[i]。
-
(4)else if(ch[i]>='0'&&ch[i]<='9'),在这之中如果((ch[i+1]>='0'&&ch[i+1]<='9')||ch[i+1]=='.')&&ch[i+1]!='\n',输出ch[i],否则输出ch[i]并换行
-
(5)else if(ch[i]'-'),在这之中如果ch[i-1]>='0'&&ch[i-1]<='9'||ch[i+1]')',输出"-"并换行;否则输出"-"。
-
(6)else if(ch[i]'+'),在这之中如果i0,输出"+";否则输出"+"并换行;
-
(7)else if(ch[i]=='.'),输出ch[i]。
-
(8)否则输出ch[i],并换行。i++,直至循环结束。
3.代码截图
4.本题调试过程碰到问题及解决办法
-
碰到的问题:
- ![](https://images2018.cnblogs.com/blog/1232112/201711/1232112-20171125233316093-1348605687.png)![](https://images2018.cnblogs.com/blog/1232112/201711/1232112-20171125233328937-1168681724.png)应该是只输出一个-,所以应该不执行这次,但它执行了,所以输出了两次-。 - ![](https://images2018.cnblogs.com/blog/1232112/201711/1232112-20171125234300234-1371188924.png)![](https://images2018.cnblogs.com/blog/1232112/201711/1232112-20171125234309687-1220114061.png)本应该输出1.1,所以不应该有\n但输出显示有\n - ![](https://images2018.cnblogs.com/blog/1232112/201711/1232112-20171125234630046-1811716926.png)应该输出(1.1)而输出这个。
-
解决办法:将if改为else;将函数添加一个判断'.'和当其第一次输出‘(’的if。
题目3:7-10 简单计算器
1.本题PTA实验结果
2.设计思路
-
(1)定义整型变量n,x=0和字符型变量op,输入n,并在定义sum=n,再输入字符型变量op。
-
(2)while(输入的op!='='),执行循环,输入整型变量n。如果op=='+',sum=sum+n,
-
(3)如果(op=='-'),sum=sum-n;
-
(4)如果op=='',sum=sumn;
-
(5)如果op'/',在这之中如果n0,x=1,跳出循环,否则sum=sum/n;
-
(6)除此之外否则x=1;跳出循环;
-
(7)再输入 一个整型变量op,并进入下一次循环,直至循环结束。
-
(8)如果x==1,输出ERROR;否则输出sum
3.代码截图
4.本题调试过程碰到问题及解决办法
-
碰到的问题:
当输入为1/0是显示的是这个;上面显示的是浮点错误
-
解决办法:在/上加一个判断0的if语句。
二、截图本周题目集的PTA提交列表及最后排名。
1.PTA提交列表
2.PTA排名
三、本周学习总结
1.你学会了什么?
1.1一维数组如何定义、初始化?
-
定义:首先要明确数组变量名,数组元素的类型和数组的大小,其一般形式为类型名 数组名 [数组长度]。数组长度是一个常量。
-
初始化:其一般形式为类型名 数组名 [数组长度]={初值表};虽然c语言规定只有静态储存的数组才能初始化,但一般的c编程系统都允许对动态储存的数组赋值。如果静态储存的数组如果没有初始化,那系统自动赋值为0.数组初始化也可是部分元素
1.2一维数组在内存中结构?可画图说明。数组名表示什么?
-
a[10]的内存结构。
-
数组名表示内存地址。
1.3 为什么用数组?
数组是一组相同数据类型数据的集合。数组赋过值,可以随意取当中的任意值,例如可以判断赋的第一个值和赋的最后一个值的大小。比单独用数组简单,还可以让其赋的值进行任意排序。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
-
(1)选择法排序:
- 1.定义整型变量i=0,min,k,n,temp;定义数组a[10]; - 2.输入整数n; - 3.for(i=0;i<n;i++),输入a[i]的值,直到循环结束; - 4.for(i=0;i<n;i++),a[min]=a[i],for(k=i+1;k<n;k++)如果a[k]<a[min],temp=a[min],a[min]=a[k],a[k]=temp。,内循环结束后,a[i]=a[min].输出a[i]值,在执行下一次循环,最终实现排序。
-
(2)冒泡法排序
- 1.定义整型变量i=0,j,temp,n定义数组a[10]、 - 2.输入整数n; - 3.for(i=0;i<n;i++),输入a[i]的值,直到循环结束 - 4.for(j=0;j<n;j++)判断相邻两个数据,如果a[j]>a[j+1],temp=a[j],a[j]=a[j+1],a[j+1]=temp - 5以此类推,就可以完成排序。
-
(3)直接插入法排序
- 1.定义整型变量i=0,min,k,n;定义数组a[10]; - 2.输入n。 - 3.for(i=0;i<n;i++),输入a[i]的值,直到循环结束 - 4.for(i=0;i<n;i++),a[min]=a[i],for(k=i+1;k<n;k++)如果a[k]>a[min],a[k]=a[min],然后将a[k+1]=a[k]。然后便可排序完成。
1.5 介绍什么是二分查找法?它和顺序查找法区别?
-
首先其元素是按一定顺序排列,将表中间位置的元素与所要得出的元素比较,如果两者相等,则查找成功;否则如果中间位置的元素大于所求元素,则进一步查找前面的子数组,否则进一步查找后面子数组。以此类推,直到找到满足条件的元素为止,否则无此元素。
-
它比顺序查找法简便,不用一个一个的代入,验证是否相同。二分法是用中位数来判断。
1.6 二维数组如何定义、初始化?
-
定义首先要明确数组变量名,数组元素的类型和数组的大小,一般形式为:类型名 数组名 [行长度][列长度]
-
初始化:有两种赋值方法。分行赋初值和顺序赋初值。
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
-
对角线上元素不变,其余元素两个下标互换。
-
上三角:i<=j时;下三角:i>=j时;对称矩阵:a[i][j]==a[j][i]
1.8 二维数组一般应用在哪里?
- 输出矩形,上下三角形等图案,还用于实现某些定理的图形化,如杨辉三角。
2.本周的内容,你还不会什么?
二维数组的灵活使用;还有就是char x[]="abcdefg",char y[]={'a','b','c','d','e','f','g'} 两个数组不一样。‘\0’占不占一个字节,a[2]={'a','2','\0'}这样对不对?