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)charr1,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表示使用小写字母