zoukankan      html  css  js  c++  java
  • C语言字符数组

    一、PTA实验作业

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

    1. 本题PTA提交列表

    2. 设计思路

    定义循环变量i,j定义不为空格的字符数count,定义单词数number,i,j,count,number赋初值0;
       定义字符数组a
    	输入字符数组a
    	 遍历数组
    		每次进入循环,对count赋初值0
    	fori=jtoa[i]=='\0'
    		如果a[i]为空格   
    		j=i+1
    			跳出循环
    		否则  
    		    count++记录非空格字符数
            end for
    	如果count>=1
    	number++记录单词个数
    	如果a[i]=='\0',数组遍历结束
    	输出单词个数
    

    3.代码截图

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

    没有考虑好空格的问题,一开始使用的判断方法是如果连续俩个数据,前一个是非空格,后一个是空格,就表示一个单词。但是这种判断就不适合末位是空格,单词数会多一。还有就是出现连续空格如何跳过这些空格继续数下去。最后发现利用一个循环可以解决多空格问题。通过判断出的非空格字符来记录单词个数。

    题目2:7-6 Jack cheng的烦恼2

    1. 本题PTA提交列表

    2. 设计思路

    【考虑不完整】
    定义字符数组a
      定义循环变量,括号数n
      定义变量flag,并赋初值0
      输入n
      如果n不是偶数,一定不配对
    		输出False
      如果n是偶数
    	for i=0 to i<n
    		输入字符元素
            end for
               for  i=0 to i<n
                    flag=0;
                如果a[i]为(或{  a[n-i]对应
                    flag=1
                end for   
              如果i为奇数
                for i=0 to i<=n/2
             	flag=0
        	       如果a[i]为(或{ a[i+1]为对应的)或}
        	       flag=1
               end for
        如果 flag==1
        	 输出True
        如果flag==0
            输出False
    

    3.代码截图

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

    只考虑到像(){}或者(({}))这种配对排列情况,还有类似({}())这种样子的就没考虑到,找规律发现可以找(和{的配对,剩下没有能配对左括号的就是配对错误了,但是还没想好怎么写代码。
    所以正确思路应该是:遍历数组,找左括号的配对,配对成功就接着配下一对,如果最后有没能配对的,这个字符串就括号配对错误

    题目3:7-11 藏头诗

    1. 本题PTA提交列表

    2. 设计思路

    3.代码截图

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

    一开始直接输出输不出来,注意到题目中一个汉字俩个字节,将俩个元素赋给新数组中一个元素,实现输出(借鉴了相关的代码,如何实现一个汉字俩个字节)

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

    三、同学代码结对互评

    1.互评同学名称 周炳辉

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

    我的代码

    周炳辉的代码

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

    我将z值放在一个数组里,然后遍历数组,找到与mo对应的z值,而炳辉直接把mo当做下标值,这样少了一次循环,而且也好读些。

    PTA提交结果:

    发现X没大写,改了还是不对。在炳辉大佬指点下,发现代码有漏洞,因为每次输入后,我都给flag赋0值。这样的话,如果最后一组的身份证是正确的,我的flag没改变,是0.就会执行flag==0这一语句,输出全对。
    解决办法:增加了一个变量flag1,赋初值为1,只要身份证有误,就执行flag1=0.判断最后flag1,如果为1,输出全对。

    正确代码:

    四、本周学习总结

    1.你学会了什么?

    1.1指针变量如何定义

    定义指针变量的一般形式: 类型名 *指针变量名
    (1)必须是有效的数据类型:如int,float,char等
    (2)指针变量名是指针变量的名称,必须是一个合法标识符

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

    指针加法用在指针变量加一个常量,+n表示下移n个存储单元,-n表示上移n个存储单元。俩个指针变量相加就是地址相加,没有什么意义

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

    会指向一个不确定的单元

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

    void splitfloat(float x,int *intpart,float *fracpart);
    int main(){
    float x;
    int intpart;
    float fracpart;
    scanf("%f",&x);//输入实数
    splitfloat( x,&intpart,&fracpart);//调用函数
    printf("%d\n",intpart);
    printf("%f",fracpart);
    return 0;
    }
    void splitfloat(float x,int *intpart,float *fracpart){
    *intpart=(int)x;//强制转换,取整
    *fracpart=x-*intpart;//小数部分
    }
    

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

    #include<stdio.h>
     void bubble (int a[],int n);
     int main(){
     	int n,a[8];
     	int *p;
     	p=a;
     	int i;
     	scanf("%d\n",&n);
     	for(i=0;i<n;i++){
     		scanf("%d",&a[i]);
     	}
     	bubble(a,n);
     	for(i=0;i<n;i++){
     		printf("%d",a[i]);
     	}
     	return 0;
     }
     void bubble(int a[],int n){
     	int i,j,t;
     	int *p=a;
     	int *pi,*pj,item;
     	for(i=1;i<n;i++){
     		for(j=0;j<n-i;j++){
     			pi=p+j;
                            p=p+j+1;j
     			if(*pi>*pj){
     			   item=*pi;
     			   *pi=*pj;
     			   *pj=item;
     			}
     		}
     	}
     }
    

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

    int *p;
    int a[80];
    int i,n;
    scanf("%d",&n);
    for(i=0;i<n;i++){
    scanf("%d",a[i]);

    指针变量指向数组
    (1)p=&a[0]
    (2)p=a

    用指针变量表示数组元素
    (1)p=a+i
    (2)p=&a[i]

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

    char *p;
    char a[80];
    int i,n;
    scanf("%d",&n);
    for(i=0;i<n;i++){
    scanf("%c",a[i]);

    字符指针指向字符串
    (1)p=&a[0]
    (2)p=a

    初始位置在字符串首地址

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

    如果将某个变量的地址作为函数的实参,相应的形参是指针。通过改变指针常量的值,就改变了存储单元中的内容,返回主调函数时,变量值也就改变了

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

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

    循环结束后,指针p已经不再指向数组,而是未知的位置,指针指向内容不明确,输出的会是随机值
    改正:在printf("\n")后加一句 p=a

    a表示地址常量,常量不能使用自增符

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

    删除字符串中的子串,目前只会删除一个字符还有计算字符串中子串个数。还不大有思路,项借大佬的代码看看,再自个敲敲。几种排序方法还是排的乱七八糟的,理论有了,实践不够吧。先理一遍伪代码吧,再改成代码。觉得这部分是考试重点,不能丢。

    3.数组上机考试小结

    3.1 那题错了,请罗列?

    6-1 数组循环右移
    7-3 jmu-c-输出字符间的字符子串
    数组开始写题就很慢了,尤其字符串学的太垃圾了,考试就试着写了几题,排序错了还改好久改不出来

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

    6-1错的很不应该,之前循环左移会,改成右移和调用函数就乱七八糟,输出实现不了,改都不知道改哪。以为会这种方法的思路就会了,一操作全是问题,糟心
    7-3遍历数组,首先寻找起始字符,继续向后找,如果找到终止字符,表示存在子串。如果存在子串,遍历数组,把起始字符和终止字符以及之间的字符放在一个新的数组里,遍历结束后,输出这个子串。

  • 相关阅读:
    第十三周总结
    第十二周总结
    团队冲刺第十五天-KeepRunningAPP
    团队第一阶段冲刺评价
    团队项目KeepRunning第一阶段成果展示
    团队冲刺第十四天-KeepRunningAPP
    第十一周总结
    团队冲刺第十三天-KeepRunningAPP
    CVPR2018关键字生成词云图
    Delphi APP 開發入門(八)SQLite資料庫
  • 原文地址:https://www.cnblogs.com/tajiyu/p/8010688.html
Copyright © 2011-2022 走看看