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'}这样对不对?

posted @ 2017-11-26 18:10  烦呢,还要起名字  阅读(277)  评论(3编辑  收藏  举报