zoukankan      html  css  js  c++  java
  • C语言博客作业--字符数组

    一、PTA实验作业(4分)

    题目1:7-2 统计一行文本的单词个数

    1. 本题PTA提交列表

    2. 设计思路(伪代码或流程图)

    3.代码截图

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

    • (1)部分正确
    • 解决:在第二个if判断条件上将&&与||搞混

    • (2)部分正确

    • 解决:因为我的代码是以回车键结尾的,而且之前代码中也有出现空格,所以我不知道怎么判断哪个空格是结尾的,也有问过助教,助教说我后面的或且关系太混乱了,所以就放弃了这种做法

    错误代码:

    #include<stdio.h>
    int main(){
    	char ch[1000];
    	int count=0,i=0,g=0;
    	while((ch[g]=getchar())!='
    ')
    	g++;
    
    for(i=0;i<g;i++){
    	
    	if((ch[i]<'a'||ch[i]>'z')&&(ch[i]<'A'||ch[i]>'Z')&&(ch[i]<'0'||ch[i]>'9')){
    		if((i+1)!=g&&((ch[i-1]<='z')&&(ch[i-1]>='a')||(ch[i-1]<='Z')&&(ch[i-1]>='A'))||(i+1)!=g&&((ch[i+1]<='z')&&(ch[i+1]>='a')||(ch[i+1]<='Z')&&(ch[i+1]>='A')))//if((ch[i-1]<='z')&&(ch[i-1]>='a')&&(ch[i+1]<='z')&&(ch[i+1]>='a')||(ch[i-1]<='Z')&&(ch[i+1]>='A')&&(ch[i-1]<='Z')&&(ch[i+1]>='A'))
    	    count++;
    		}
    	}
    	
    	printf("%d",count);
    	return 0; 
    } 
    
    

    题目 2:7-5 统计大写辅音字母

    1. 本题PTA提交列表

    2. 设计思路

          定义数组op[80],循环变量i,辅音字母数量count,
    for i=0 to i=79     op[i]=输入
         if op[i]不等于‘
    ’
         if op[i]不等于元音字母且为字母
                   count++;
         else 
                   break;
     end  for;
               输出count
    
    

    3.代码截图

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

    • 错误一:最开始没有对结束语句条件进行设计,导致程序要输入80个数才会输出结果
    • 错误二:没有判断是大写字母,结果为5
    • 错误三:答案为5,进行调试 ,count没有初始化为0

    题目 3 :7-3 找最长的字符串

    1. 本题PTA提交列表

    2. 设计思路(伪代码或流程图)

    定义整型变量字符串长度1count1字符串长度2count2,循环变量i,j,字符串数量n
    定义字符型变量 a[80],longest[80]
    输入n
    读入数组longest
    count1=此时longes的长度
    for i=0 to i=n-1
          读入数组a
          count2=a的长度
          如果 count2大于count1
                  count1等于count2
    end for
    
    for j=0  to a[j]=‘’
          longest[j]等于a[j];
    
    end for
    longest[j]=‘’
    输出 The longest is: 数组longest
         
    
    

    3.代码截图

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

    • 我把输出结束标志‘'赋错了数组位置,应该是longest[j],我赋给了longest[j+1]导致longest[j]没有内容;

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

    三、同学代码结对互评(1分)

    1.互评同学名称:王宵莹

    2.我的代码、互评同学代码截图

    -(1)王宵莹的代码

    • (2)我的代码

    3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

    • 王宵莹的代码思路是定义两个字符型变量,不断的循环赋值,且赋的值为前后关系,当前面的为空格后面的为字符时判断为一个单词,
    • 我的代码思路是,直接将所有字符赋值到数组中,不过也是通过前一个数组为空格后一个不是的方法判断单词
    • 不同之处:
      感觉这道题的难点在于对第一个词的处理,在这方面,王宵莹是自己给第一个单词前增加了一个空格,我则是对它进行判断,若是有空格,则单词数量变量count初始化0,若没有则初始化为1
    • 优势:
      王宵莹的代码比较简洁,代码行数较少
      我的代码比较清晰,如果第一个单词前面已有了空格了,则王宵莹的代码就会有点多余
    • 我更喜欢王宵莹的,因为和其他的题目搞混了,导致代码中出现了一些没有必要存在的语句,而王同学的代码总是很简洁,既然可以达到相同的结果,为什么不选择更简单的方法呢!

    四、本周学习总结(3分)

    1.你学会了什么?

    1.1指针变量如何定义?

      1. 定义指针变量的一般形式如下:
        类型名指针变量名1,指针变量名2,... *指针变量名n ;
         int *p;        char *q;      char *p,*q;
    
      1. 空指针

      空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。

    1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?

    • 指针加法运用在其指向的地址元素时,例如输入数组时
    int *p,a[10];
    p=a;
    for(i=0;i<10;i++,p++)
    scanf("%d",p)
    
    
    • 指针之间可以相减,可以相乘,可以相除,但不可以相加:两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素

    1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?

    • 如图

    1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?

    1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。

    • 对指针的概念还不是很熟练。。。,所以不会。

    1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?

    int a[10];
    int *p;
    p=a;
    
    

    此时p为指向数组a的指针

    1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?

    char *p;
    char str[10] = "asdfghj";
    p = str;
    
    

    -初始位置为str[0].

    1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?

    -字符串指针只占用一个可以存放地址的内存单元,存储字符串首字符的地址,而不是将字符串放到字符指针变量中去,总之,字符串指针可以指向一个不需要分配内存的地址

    2.本周你不会内容有什么?

    2.1 课堂派错题罗列及如何订正。

    2.2 其他不会的?打算怎么解决

    (1)对于指针的概念还是懵懵懂懂

    • 解决:多刷题目,多读题目,积累阅读量,看多了,做多了,自然就会了。

    3.数组上机考试小结

    3.1 那题错了,请罗列?

    • 虽然很丢人,但确实是全都错了

    3.2 错题如何订正,为什么错了?

    • 刚开始的时候就在一题纠结了一小时,导致后来情绪紧张,会的题目也不会了,也还是平时积累不够,做题不多

    • 6-1

    • 之前一直不明白前面的1,2要怎么跑到后面去,后来跟踪变量看到1是从第一个到最后一个,然后2从第二个变成第一然后重复1的步骤到了最后一个,这时候的1变成了倒数第二个

    • 6-2

    • 我将转置和排序分开,发现转置时就出现了错误

    • (1)转置

    • 我之前的思路是在33上建立的,就是最开始是a[0][1]和a[1][0],a[0][2]和a[2][0]转换,共两次,即(行-1)次,然后是沿着a[0][0]对角线下来,内部的22数组,转换的是a[1][2]和a[2][1]转换,共一次,比上次少了1.

    • 问题:循环次数一直搞错,导致转置得不完整

    • 于是我上网查转置的方法
    • 相对于我的三重循环,网上的方法比较简单
      如下:
    void  trans_array(int a[][10],int n){
    int k,g,temp; 
    	for(g=0;g<n;g++){
    	    for(k=0;k<g;k++){
    	    	temp=a[g][k];
    	    	a[g][k]=a[k][g]; 
    			a[k][g]=temp; 
    		}
    }
       return a;	
    
    • 问题:对于换了之后本来数组位置的数是否变化,还不是很清楚,

    • 解决:所以观察变量发现转置的时候对角线上的数是不会变的,即k<g

    • (2)排序

    • 问题:反了且错误

    • 解决:if判断条件错误 ,应该是 a[j][l]>a[j][l+1]时,继续

    • 正确

    • 其他的由于还要做数据数组pta,所以还未解决,计划期限为这周五之前。

  • 相关阅读:
    排序算法系列之冒泡排序 (3)
    排序算法系列之选择排序 (2)
    排序算法系列之插入排序 (1)
    深挖 NGUI 基础 之UICamera (二)
    深挖 NGUI 基础 之UIRoot (一)
    JPS寻路和AStar寻路
    旋转矩阵
    [斜边的血条进度]
    UI框架:ui节点控件的绑定方式
    Shader播放序列帧
  • 原文地址:https://www.cnblogs.com/Zeng99/p/8006839.html
Copyright © 2011-2022 走看看