C语言博客作业--字符数组

一、PTA实验作业

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

1. 本题PTA提交列表

2. 设计思路

     定义字符数组ch[1000],定义i用于循环,count用来数有几个单词,count1记录字符串有多长
     输入字符串,并将字符串存储在字符数组中
     如果ch[0]是空格,count=0
     否则count=1
     for i=0 to count1
        如果ch[i]是空格或逗号,并且它们的下一个字符是字母或数字
        count++
     end for
     输出count的值

3.代码截图

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


最开始是这几个测试点过不了,第一个测试点是正确的,后面两个测试点改了数组长度后就通过了,但是第一个测试点却变成了答案错误,而且不太理解到底错在哪,也不知道该往哪个方向去调试

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

1. 本题PTA提交列表

2. 设计思路

3.代码截图

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

最初的时候判断条件是ch[i]!='A'&&ch[i]!='E'&&ch[i]!='I'&&ch[i]!='O'&&ch[i]!='U'时,count就加一,在这样的判断条件下,如果出现空格,那么count也会加一,而空格不是辅音字母,应该忽略不计

题目3:7-10 正整数A+B

1. 本题PTA提交列表

2. 设计思路

    定义两个字符数组c1[80],c2[80],定义i,j用于循环,flag1和flag2做是否为正整数的标记,num1为第一个正整数,num2为第二个正整数
    当getchar()!='\n'时,
    c1[i]=getchar;i++
    end getchar
    c1[i]='\0'
    gets(c2)
   for i=0 to c1[i]!='\0'
     如果不是数字
          flag1=1
     否则
          将该数字字符转成数字
     end for
     如果num1的值不在1-1000内,
     flag1=0
     对字符数组c2[80]做同样的操作
     根据不同的flag1和flag2的值,输出相应的结果

3.代码截图


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

忽略了当数值不在题目要求范围内的情况,比如num1=0,num2=1001时,输出的应该都是问号,而我的代码输出的是1001,加上判断数字是否在题目要求范围的条件后就通过了

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

三、同学代码结对互评

1.互评同学名称

沈梦婷

2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)

同学的代码

   #include<stdio.h>
int main()
{
	char a[1000];
	int i,count=0,flag=0;
	gets(a);
	for(i=0;(a[i])!='\0';i++)
	if(a[i]==' ') flag=0;
	else if(flag==0){
	flag=1;
	count++;
	}
	printf("%d",count);
	return 0;
} 

我的代码

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

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

同学的代码巧妙的运用flag实现了对单词个数的统计,当读入单词的第一个字母时,flag=1,count=count+1,当读入第二个字母时,因为flag不等于0,所以count不会再增加,直到遇到空格,flag才又等于0,然后继续进行下去
而我的代码判断条件很麻烦,又没有全对,说明还有情况未考虑到。而且感觉用我这种方法很容易乱掉,一不小心就会错了
我更喜欢同学的代码

四、本周学习总结

1.你学会了什么?

1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?

   int a,*p;
   p=&a;

或者

    int a;
    int *p=&a;

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

偏移的时候
不能,2个指针变量相加是非法的

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

程序不能正常运行

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


指针变量做函数形参:void splitfloat(float x,int *intpart,float *fracpart)
函数实参:splitfloat(y,&intpart,&fracpart);

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

   #include<stdio.h>
void bubble(int *a,int n);
int main(void)
{
    int n,a[8];
    int i;
    printf("Enter n(n<=8):");
    scanf("%d",&n);
    printf("Enter a[%d)]:",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;
    for(i=1;i<n;i++)
       for(j=0;j<n-i;j++)
         if(a[j]>a[j+1]){
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
            }  
}

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

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

*p

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

   char *s="point";

初始位置在该字符串的首字符

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

#include<stdio.h>
char Fun(char *c1,char *c2);
int main(){
    char c1[]="abc",c2[]="123";
    Fun(c1,c2);
    puts(c1);
    return 0;
}
char Fun(char *c1,char *c2){
    int i=0,j,k=0;
    while(c1[i]!='\0')
    i++;
    for(j=i;c2[k]!='\0';j++){
        c1[j]=c2[k];
        k++;
    }
    c1[j]='\0';
}

好处:直接对地址内的元素进行操作

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

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


第二空应该是p+n,当时在参考书上相似的内容,就直接把书本上的9写上去了

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

pta上字符数组的题目,有一些自己看的时候有点思路,但不知道该怎么写,有的是完全没有思路该怎么写,需要请教同学才能写出来。
身份证那题,刚开始不懂加权求和是什么意思,请教了同学后才知道。
对于还不会的题目,我想先自己再尝试着写一写,如果还是不会就上网查一下或者是请教同学。

3.数组上机考试小结

3.1 那题错了,请罗列?

jmu-c-二维数组转置并按列排序
IP地址转换
jmu-c-十进制转16进制

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

1.jmu-c-二维数组转置并按列排序
在对列进行排序的时候,我只用到了两层循环,会出现排序并没有排完的情况,应该要改成三层循环的,这样才能保证全部排序完全正确

2.jmu-c-十进制转16进制
用到的方法很麻烦又不对,只有输出的D是正常的,其他的都是乱码,想改又不知道咋改,借鉴了同学的方法做对的

3.IP地址转换

二进制转换成十进制的方法错误

posted @ 2017-12-10 22:42  hoppp  阅读(347)  评论(5编辑  收藏  举报