C语言博客作业--字符数组
一、PTA实验作业
题目1:7-1 字符串转换成十进制整数
1. 本题PTA提交列表
2. 设计思路(伪代码或流程图)
定义 i=0,f=0,flag=0;//f,flag用于判断负数
char hexad[i];
long number=0;//存放十进制,先令初值为0
输入数组hexad[i],i++;
//滤去非十六进制字符,将十六进制字符转换为十进制输出
变量整个数组,找出十六进制字符
if hexad[i]=='-'&&flag==0
则 f=1;
if hexad是0~9;
则number=number*16+hexad[i]-'0';flag=1;
if hexad是a~f;
则number=number*16+hexad[i]-'a'+10;flag=1;
if hexad是A~F;
则number=number*16+hexad[i]-'A'+10;flag=1;
if(f=1&&number!=0)
输出-number
else
输出number
return 0;
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
初始代码,参照书上十六进制转十进制的做法
提交后显示部分正确,不能确定是第一个十六进制字符前的负号,所以改过代码,先不滤去非十六进制字符,先判断正负号,如果hexad[i]=‘-’,且flag=0;则为负数,f=1;做负数标志,就可以
题目2:7-2 统计一行文本的单词个数
1. 本题PTA提交列表
2. 设计思路(伪代码或流程图)
定义i=0,count=0;//count用于存放单词个数
char str[1000] //定义数组存放字符串
输入 字符串
判断开头是否有空格
遍历整个数组,
if str[i]!=' ',则count++;
while(str[i]!=' '){//跳过其他字符
if str[i]='\0',结束循环
else
while(str[i]!=' '){
i++;
输出count;
return0
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
初始代码,想得太过简单,没有考虑到开头有空格个其他字符的情况;
解决方法:在开始遍历数组前,先判断是否存在空格,若存在,先跳过;遍历数组时,若找到第一个单词,count+1;在此条件下,如果没有找到空格,则i++,跳过其他字符
题目3:7-3 找最长的字符串
2. 设计思路(伪代码或流程图)
对画流程图的软件还不是很熟悉,故先用手画的流程图
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
这题一开始时没有什么思路,后来向梦冰要了这题的代码,刚开始没有考虑到可以用二维数组,一直在想说怎么实现将字符串输入后又可以相互比较长度,还以为是要定义很多数组,但是又不可能实现,因为N是一个不确定的数,然后看了梦冰的代码,可以有二维数组去实现
二、截图本周题目集的PTA最后排名。
三、同学代码结对互评
1.互评同学:周炳辉
2.我的代码、互评同学代码截图
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
四、本周学习总结(3分)
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
定义指针变量的一般形式为:
类型名 指针变量名;
注:(1)定义指针变量要使用指针声明符;
(2)指针声明符在定义指针变量时被使用,说明被定义的那个变量是指针;
(3)定义多个指针变量时,每一个指针变量前面都必须加上
(4)指针变量名是一个标识符,要按照C标识符的命名规则对指针变量进行命名
(5)指针变量的数据类型是它所指向的变量的类型,一般情况下一旦指针变量的类型被确定后,它只能指向同种类型的变量
(6)在定义指针变量时需要使用指针标识符*,但指针声明符并不是指针的部分
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
指针变量可以加减,但是只能与整型数据加减
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
使用没有初始化的指针将发生无法预料的结果,通常,一个没有赋值的指针可能指向任意地址,如果此时对指针执行操作,则可能改写内存中的信息,这可能导致正在引用该内存区的程序崩溃,严重时,程序将退出,但不会破坏程序本身
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
- (1)splitfloat( x, &intpart, &frapart)这一句是指针变量做函数形参,函数形参有&p表示;
- (2)用指针变量作为函数参数, 在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,这样就实现了”通过调用函数使变量 的 值发生了变化,在主调函数(如main函数)中使用这些改变了值”的目的.
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染
#include <stdio.h>
void bubble(int *p, int N); //函数声明,冒泡排序
int compare(int *m, int *n); //函数声明,比较两个数的大小
int main(void)
{
int i,N;
int arr[10000];//定义数组存放未排序的数字序列
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%d",&arr[i]);
}
bubble( arr,N);//调用 函数
for (i = 0; i < N; i++) //将重新排好的数组输出
{
printf("%d ", arr[i]);
}
return 0;
}
void bubble(int *p, int N)
{
int i, j, t;
for (i = 1; i < N; i++) //外部循环
{
for (j = 0; j <N-i; j++) //内部循环
{
if (compare(&p[j], &p[j+1])) //调用函数比较两个数的大小,如果前一个元素大,则交换
{
t = p[j];
p[j] = p[j+1];
p[j+1] = t;
}
}
}
}
int compare(int *m, int *n)
{
return (*m > *n); //用于比较两个元素,返回满足前一个元素大
}
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
定义一个数组a[100]={1,2,3,4};定义 p=a;而(p+1)就指向a[1]了
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p,str[20]; p=str; 指针指向字符串后,初始位置就是字符串的首字符
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
#include<stdio.h>
void string_cat (char *source, char *target)//函数声明
{
char *point=source; //定义字符指针并赋值
while(*point!='\0')
point++;
while(*target!='\0')
{
*point=*target;
point++;
target++;
}
*point='\0';
}
int main()
{
char s1[10000],s2[10000];
for(;s1!='\0';)
{
gets(s1);//输入旧字符串
gets(s2);
string_cat(s1,s2);//调用函数
puts(s1);//输出新的字符串
}
printf("\n");
return 0;
}
字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束,所以用指针表示字符,可以准确的找到
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
(1)指针与数组第二题
1.调用函数,指针指向数组,求出其最大值即最小值,故填&num
2.n 3.max<*q
(2)指针最后一题
改正后的代码及运行结果
2.2 其他不会的?打算怎么解决
pta上未做的题目及7-11的不是很理解题目的意思
解决方法:多和同学交流,总结学得好的同学的做题方法及做题思路吧
3.数组上机考试小结
3.1 那题错了,请罗列?
6.1 ,6.2,7.1,7.2,7.3,7.4
3.2 错题如何订正,为什么错了?
平时代码量跟不上,导致在前面的题目都花大量的时间,但是还是没有做出来,导致后面的题目也没有时间看,目前只订正了三道题,其他的还没来得及订正
6.2代码
7.1代码
7.2代码