作业要求二
1)C高级第一次PTA作业(1)
6-1 计算两数的和与差
本题要求实现一个计算输入的两数的和与差的简单函数。
代码如下:
`void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum = op1 + op2;
*pdiff = op1 - op2;
}`
指针在题目中的作用:
op1代表a,op2代表b,*psum代表sum,*pdiff代表diff。
6-2 拆分实数的整数与小数部分
本题要求实现一个拆分实数的整数与小数部分的简单函数。
代码如下:
`void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart = x;
*fracpart=x - *intpart;
}`
指针在题目中的作用:
x为输入数,*intpart取x整数部分,*fracpart取输入数减整数的部分(也就是小数部分)。
2)C高级第一次PTA作业(2)
6-1 在数组中查找指定元素
本题要求实现一个在数组中查找指定元素的简单函数。
代码如下:
`int search(int list[], int n, int x ){
int i,index;
for(i=0;i<n;i++)
{
if(list[i]==x){
index = i;
break;
}else{
index = -1;
}
}
return index;
}`
(1)主要描述题目算法
第一步:声明函数
第二步:定义两个变量
第三步:规划循环判断数组中有无指定函数
第四步:返回原函数
(2)流程图
错误信息:
错误原因:一开始找到相等函数的时候忘记在index=i之后加入break导致循环继续答案错误。
改正方法:在index=i;之后加入break。
6-2 找最大值及其下标
在一维整型数组中找出其中最大的数及其下标。
代码如下:
`int fun(int *a,int *b,int n){
int i;
for(i=0;i<n;i++){
if(a[i]>*a){
*a = a[i];
*b = i;
}
}return *a;
}`
(1)主要描述题目算法
第一步:声明函数
第二步:定义一个变量
第三步:规划循环判断数组中前一个数是否比后一个大
第四步:是就交换然后记下下标
第五步:返回原函数
(2)流程图
错误信息:
错误原因:最初的时候不知道输出什么好,所以写了return *a和return *b,结果答案错误。
改正方法:咨询了室友之后,室友告诉我只需要输出return *a就行,我问了室友原因室友也不知道,希望老师解答一下。
3)C高级第一次PTA作业(3)
6-1 最小数放前最大数放后
为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。
代码如下:
`void input(int *arr,int n){
int i;
for(i=0;i<n;i++){
scanf("%d",&*(arr+i));
}
}
void max_min(int *arr,int n){
int t;
int i,x,y,z;
int min=*arr;
int max=0;
for(i=0;i<n;i++){
if(*(arr+i)<min){
min=*(arr+i);
x=i;
}
}
t=*(arr+x);
*(arr+x)=*arr;
*arr=t;
for(y=0;y<n;y++){
if(*(arr+y)>max){
max=*(arr+y);
z=y;
}
}
t=*(arr+z);
*(arr+z)=*(arr+n-1);
*(arr+n-1)=t;
}
void output(int *arr,int n){
int i;
for(i=0;i<n;i++){
printf("%3d",*(arr+i));
}
}`
(1)主要描述题目算法
第一步:声明第一个函数
第二步:输入数组中所有的数
第三步:返回原函数
第四步:声明第二个函数
第五步:找出最小的数并记下下标
第六步:交换最小数
第七步:找出最大的数并记下下标
第八步:交换最大数
第九步:返回原函数
第十步:声明第三个函数
第十一步:输出数组中所有的数
第十二步:返回原函数
(2)流程图
错误信息:
错误原因:一开始我写成了 min=*(arr+i); *arr=min;
只是一开始的值变成了最小值或最大值,并没有交换,结果答案错误。
改正方法:经过的DEV C++运行之后我发现了问题定义了新的变量来表示指针,然后进行了交换的三行代码,答案正确。
6-2 指针选择法排序
指针选择法对10个数进行由大到小的排序。
代码如下:
`void sort(int *x,int n){
int i,j,t;
for(j=1;j<10;j++)
for(i=0;i<10-j;i++)
{
if(*(x+i)<*(x+i+1))
{
t=*(x+i);
*(x+i)=*(x+i+1);
*(x+i+1)=t;
}
}
}`
(1)主要描述题目算法
第一步:声明第一个函数
第二步:定义三个变量
第三步:确定一共循环几次
第四步:第一个数与后面的数比较排序然后第二个数依此循环
第五步:返回原函数
(2)流程图
4)C高级第一次PTA作业(4)
6-1 判断回文字符串
本题要求编写函数,判断给定的一串字符是否为“回文”。
代码如下:
`bool palindrome( char *s ){
int i,j;
int n = strlen(s);
for(i=0,j=n-1;i<=(n-1)/2;i++,j--)
{
if(*(s+i)!=*(s+j))
{
return false;
}
}
if(i>=j) return true;
}`
(1)主要描述题目算法
第一步:声明第一个函数
第二步:定义两个变量
第三步:数清楚一共几个字符
第四步:判断第一个数与最后一个数是否一样
第五步:循环
第六步:返回原函数
(2)流程图
错误信息(1):
错误原因:忘记了strlen函数导致忘记取字符串字符的数量。
改正方法:写入strlen函数。
错误信息(2):
错误原因:开始我写的是
if(s[i]!=s[j]) break; if(i>j) return ture; return no;
造成的错误就是忽略了只有两个字符的情况。
改正方法:
if(*(s+i)!=*(s+j)) { return false; } if(i>=j) return true;
对于这种情况进行了分别的讨论。
6-2 使用函数实现字符串部分复制
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
代码如下:
`void strmcpy( char *t, int m, char *s ){
int n;
n=strlen(t);
int i;
int a=0;
if(m<=n){
for(i=m;t[i-m]!=\'\\0\';i++)
{
*(s+a)=t[i-1];
a++;
}*(s + n) = \'\\0\';
}else{
*s=\'\\0\';
}
}`
(1)主要描述题目算法
第一步:声明第一个函数
第二步:数清楚一共几个字符
第三步:判断是否有意义
第四步:如果有意义让字符串t从第m个字符开始的全部字符复制到字符串s
第五步:最后加入\'\\0\'
第七步:如果没意义直接让字符串s变为\'\\0\'
第八步:返回原函数
流程图
错误信息:
错误原因:一开始写的是 t[i]!=\'\\0\'
忘记了i的取值一开始是m结果编译错误。
改正方法:改为 t[i-m]!=\'\\0\'
。
附加题
小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字母
代码如下:
`#include<stdio.h>
void mima( char *s );
int main ()
{
char a[20];
gets(a);
mima(a);
printf("%s",a);
return 0;
}
void mima( char *s ){
int i;
for(i=0;*(s+i)!=\'\\0\';i++)
{
if(*(s+i)==\'y\'){
*(s+i)=\'a\';
}else if(*(s+i)==\'z\'){
*(s+i)=\'b\';
}else{
*(s+i)=*(s+i)+2;
}
}
} `
(1)主要描述题目算法
第一步:输入字符串
第二步:声明函数
第三步:循环判断是否为y,z
第四步:如果为y则变为a,如果为z则变为b,如果都不是则加2
第五步:返回原函数
第七步:输出字符串
结果图
流程图
作业要求三
1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?
在所在的两个周,我们主要先复习了上半学期的主要知识,然后对于指针以及针对于一般变量、数组与字符变量代替,和指针在函数中的应用。更是学习了指针的理论知识和它所注意的事情。
主要没有搞清楚还有三点,一是对于字符变量还是略有生疏经常忘记 t[i]!=\'\\0\'
需要 i=0
要让初始量为零;二是对于"strcpy"、"strcat"、"strcmp"的应用还是不太明白:三是希望老师解答一下C高级第一次PTA作业(2)6-2 找最大值及其下标中我的错误。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
git地址:https://git.coding.net/wuyaole/dayixiagxueqi01.git
截图
3、点评作业
4、用表格和折线图呈现本周(3/12 8:00~3/26 8:00)的代码行数和所用时间、博客字数和所用时间