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

一、PTA实验作业

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

1. 本题PTA提交列表

2. 设计思路

定义一个字符数组来储存输入的句子
gets(c)
定义一个整型变量i为循环数,count用来统计单词数,a用来储存字符串长度
a=strlen(c);
if(c[0]' ')
count=0;
else
count=1;
for(i=0;i<a-1;i++)
如果c[i]
‘ ’&&c[i+1]!=‘ ’
count++
输出count

3.代码截图

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


本题主要问题是没有考虑到如果输入两个空格时count还要++所以答案错误了

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

1. 本题PTA提交列表

2. 设计思路

定义二维字符数组c[1000][80]
定义整型变量N储存输入的字符串数,i,j为循环数,k,m储存最后输出数组的行下标与列下标
scanf("%d",&N);
for(i=0;i<=N;i++)
for(j=0;j<80;j++)
输入字符串c[i][j]
if(c[i][j]'\n')退出循环
for(i=0;i<=N;i++)
for(j=0;j<80;j++)
if(c[i][j]
'\n')
if(j>k){
k=j;
m=i; 找出最长的字符串的下标
for(i=0;i<k;i++){
printf("%c",c[m][i]);;

3.代码截图

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

本题先做的时候没做出来 百度了一段代码 看过之后又自己写的 除了循环中循环数把握得不是太好之外 其他没什么大的问题。

题目3:7-20 指定位置输出字符串

1. 本题PTA提交列表

2. 设计思路



3.代码截图

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


本题遇到两个问题
第一个是因为开始字母跟结束字母没有分开判断 导致没有输出(如图)
第二个是因为字符串长度不对而导致的段错误

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

三、同学代码结对互评

1.互评同学名称

马艺芳

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

我的代码:

同学代码:

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?

相比于我的代码而言,我觉得艺芳的代码更好,从输入看,用gets语法更加简洁,在判断开始字母与结束字母来看,巧妙地用了k=-1,r=-1.用一个循环就解决了我用两个循环才能完成的事,很棒。

四、本周学习总结

1.你学会了什么?

1.1指针变量如何定义

用“”表示定义的是指针变量
例如:
(1)Int p1,p2,
p3;
定义指向整型数据的指针变量p1、p2、p3。
(2)float q1,q2,q3;
定义指向实型数据的指针变量q1、q2、q3。
(3)char
r1,r2,r3;
定义指向字符型数据的指针变量r1、r2、r3。

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

两个指针变量不能相加,指针加法只能运用在指向另一个单元格的情况。

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


void sjd(double n,int a,doubleb(指针变量做形参)
用指针做形参时,由于指针的值是变量的地址,所以是通过对地址解引用来操作其所指的变量

1.5 请把课本的冒泡排序的函数改成指针变量做形参格式

void bubble(int *p,int n){
	int i,j,t;
	for(i=1;i<n;i++)
	 for(j=0;j<n-1;j++)
	  if(*p>*(p+1)){
	  	t=*p;
	  	*p=*(p+1);
	  	*(p+1)=t;
	  }
} 

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

例:

char a[100];
char *b;
b = a

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

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

初始位置指向字符串的首个字符

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

#include <stdio.h>
int main()
{
 char s1[80],s2[40];
 int i=0,j=0;
 scanf("%s",s1);
 scanf("%s",s2);
 while (s1[i] !='\0')
 i++;
 while (s2[j] !='\0')
 s1[i++]=s2[j++]; // 拼接字符到s1 
 s1[i] ='\0';
 printf("%s",s1);
}

指针能够直接对地址内的元素进行操作

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

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

#include<stdio.h>
void sjd(double n,int *a,double*b){
	
    *a=(int)n;
    *b=n-*a;
}
int main(){
    int a;
    double b;
    double c;
    scanf("%lf",&c);
    sjd(c,&a,&b);
    printf("%d\n%lf",a,b);
    return 0;
}

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

其他就是平时拿到题没有思路,还有对字符串的运用也还不是太熟练,准备多看同学代码跟自己代码来比较,然后提高自己的代码能力。

3.数组上机考试小结

3.1 那题错了,请罗列?

除了第一题跟第二题外,其他题都没有思路

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


第一题

第7-3题

第7-2题 十进制整数,格式限定符%o可以以8进制进行输出,%X/%x可以以16进制进行输出,大写X表示使用大写字母,小写x表示使用小写字母

posted @ 2017-12-10 19:38  爻象  阅读(252)  评论(2编辑  收藏  举报