第1次作业

6-1 计算两数的和与差
1 设计思路
(1)主要描述题目算法
第一步:根据所给条件进行相应的加减运算。
第二步:运用指针传输数据。
(2)流程图

2.实验代码

#include <stdio.h>

void sum_diff( float op1, float op2, float *psum, float *pdiff );

int main()
{
    float a, b, sum, diff;

    scanf("%f %f", &a, &b);
    sum_diff(a, b, &sum, &diff);
    printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);
	
    return 0; 
}

void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
	*psum = op1 + op2;
	*pdiff = op1 - op2; 
}

3.本题调试过程碰到问题及解决办法
未遇到问题。

6-2 拆分实数的整数与小数部分
1 设计思路
(1)主要描述题目算法
第一步:获取传入数据的整数部分并通过计算获取小数部分。
第二步:运用指针传输数据。
(2)流程图

2.实验代码

#include <stdio.h>

void splitfloat( float x, int *intpart, float *fracpart );

int main()
{
    float x, fracpart;
    int intpart;

    scanf("%f", &x);
    splitfloat(x, &intpart, &fracpart);
    printf("The integer part is %d\n", intpart);
    printf("The fractional part is %g\n", fracpart);

    return 0;
}

void splitfloat( float x, int *intpart, float *fracpart )
{
	*intpart = x * 1;
	*fracpart = x - *intpart;
}

3.本题调试过程碰到问题及解决办法
未遇到问题。

6-1 在数组中查找指定元素
1 设计思路
(1)主要描述题目算法
第一步:根据传入数组设立相应指针。
第二步:在循环中寻找相等的值。
第三步:找到后返回相应值,未找到返回-1。
(2)流程图

2.实验代码

#include <stdio.h>
#define MAXN 10

int search( int list[], int n, int x );

int main()
{
    int i, index, n, x;
    int a[MAXN];

    scanf("%d", &n);
    for( i = 0; i < n; i++ )
        scanf("%d", &a[i]);
    scanf("%d", &x);
    index = search( a, n, x );
    if( index != -1 )
        printf("index = %d\n", index);
    else
        printf("Not found\n");

    return 0;
}

int search( int list[], int n, int x )
{
	int a;
	int *p = list;
	for(a = 0;a < n;a = a + 1)
	{
		if(x == *(p + a))
		{
			return a;
		}
	}
	return (-1);
}

3.本题调试过程碰到问题及解决办法
错误信息1:答案错误
错误原因:一开始在循环内同时判断是否返回a或-1结果判定错误。
改正方法:将判定返回值-1写在循环外。

6-2 找最大值及其下标
1 设计思路
(1)主要描述题目算法
第一步:设立相应数组的指针。
第二步:在循环中找出数组中最大值及其对应下标。
第三步:运用指针传输下标并返回最大值。
(2)流程图

2.实验代码

#include<stdio.h>
#define N 10
int fun(int *a,int *b,int n);
int main()
{ int a[N],i,max,p=0;
for(i=0;i<N;i++) scanf("%d",&a[i]);
 max=fun(a,&p,N);
 printf("max=%d,position=%d\n",max,p);
 return 0;
}


int fun(int *a,int *b,int n)
{
	int *p = a;
	int q,e = a[0];
	for(q = 0;q < n;q = q + 1)
	{
		if(e < *(p + q))
		{
			e = p[q];
			*b = q;
		}
	}
	return e;
}

3.本题调试过程碰到问题及解决办法
未遇到问题。

6-1 最小数放前最大数放后
1 设计思路
(1)主要描述题目算法
第一步:输入数组。
第二步:在循环中找出最大值最小值。
第三步:将最大值最小值分别和数组末值初值调换。
第四步:输出数组值。
(2)流程图

2.实验代码

#include<stdio.h>
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
int main()
{ int a[10];
input(a,10);
 max_min(a,10);
 output(a,10);
 return 0;
}

void input(int *arr,int n)
{
	int a;
	for(a = 0;a < n;a = a + 1)
	{
		scanf("%d",(arr + a));
	}
}
void max_min(int *arr,int n)
{
	int a,max,min,b,c,d;
	for(a = 0;a < n;a = a + 1)
	{
		if(a == 0)
		{
			max = arr[0];
			min = arr[0];
		}else
		{
			if(min > arr[a])
			{
				min = arr[a];
				c = a;
			}
			if(max < arr[a])
			{
				max = arr[a];
				d = a;
			}
		}
	}
	b = arr[0];
	arr[0] = min;
	arr[c] = b;
	b = arr[n - 1];
	arr[n - 1] = max;
	arr[d] = b;
}
void output(int *arr,int n)
{
	int a;
	for(a = 0;a < n;a = a + 1)
	{
		printf("%3d",*(arr + a));
	}
}

3.本题调试过程碰到问题及解决办法
未遇到错误。

6-2 指针选择法排序
1 设计思路
(1)主要描述题目算法
第一步:在循环中记录当前数组值及其下标。
第二步:找出数组最大值并记录下标。
第三步:调换当前数组值和最大值。
(2)流程图

2.实验代码

#include<stdio.h>
void sort(int *x,int n);
int main ( )
{int *p,i,a[10];
 p=a;
 for (i=0;i<10;i++)  scanf("%d",p++);
 p=a;
 sort(a,10);
 for(i=0;i<10;i++)  printf("%4d",*p++);
 printf("\n");
 return 0;
 }

void sort(int *x,int n)
{
 	int a,b,c,d,e;
 	for(a = 0;a < (n - 1);a = a + 1)
 	{
 		c = x[a];
 		e = a;
 		for(b = a;b < (n - 1);b = b + 1)
 		{
 			if(c < x[b + 1])
 			{
 				c = x[b + 1];
 				e = (b + 1);
			}
		}
		d = x[a];
		x[a] = c;
		x[e] = d;
	}
}

3.本题调试过程碰到问题及解决办法
未遇到问题。

6-1 判断回文字符串
1 设计思路
(1)主要描述题目算法
第一步:记录字符串长度。
第二步:判断长度单复数。
第三步:在循环中对比首尾并返回相应值。
(2)流程图

2.实验代码

#include <stdio.h>
#include <string.h>

#define MAXN 20
typedef enum {false, true} bool;

bool palindrome( char *s );

int main()
{
    char s[MAXN];

    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);

    return 0;
}

bool palindrome( char *s )
{
	int a,b,c;
	for(a = 0,b = 0;s[a] != '\0';a = a + 1)
	{
		b = b + 1;
	}
	if((b % 2) == 0)
	{
		for(c = 0;c < (b / 2);c = c + 1)
		{
			if(s[c] != s[b - 1 - c])
			{
				return false;
			}
		}
	}else
	{
		for(c = 0;c < ((b - 1) / 2);c = c + 1)
		{
			if(s[c] != s[b - 1 - c])
			{
				return false;
			}
		}
	}
	return true;
}

3.本题调试过程碰到问题及解决办法
未遇到错误。

6-2 使用函数实现字符串部分复制
1 设计思路
(1)主要描述题目算法
第一步:记录字符串长度。
第二步:判断是否为空串。
第三步:截取原数组储存到新数组中。
(2)流程图

2.实验代码

#include <stdio.h>
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char t[MAXN], s[MAXN];
    int m;

    scanf("%d\n", &m);
    ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);

    return 0;
}

void strmcpy( char *t, int m, char *s )
{
	int a,b;
	for(a = 0,b = 0;t[a] != '\0';a = a + 1)
	{
		b = b + 1;
	}
	if(b < m)
	{
		*s = '\0';
	}else
	{
		for(a = 0;t[a] != '\0';a = a + 1)
		{
			s[a] = t[m - 1 + a];
		}
		s[b] = '\0';
	}
}

3.本题调试过程碰到问题及解决办法
错误信息1:答案错误
错误原因:未添加空字符。
改正方法:在循环结束后添加空字符。

额外加题3
1 设计思路
(1)主要描述题目算法
第一步:在循环中判断输入字符。
第二步:更改相应字符。
第三步:储存字符串。
第四步:输出字符串。
(2)流程图

2.实验代码

#include <stdio.h>
int main()
{
	int a;
	char s[100];
	for(a = 0;;a = a + 1)
	{
		scanf("%c",&s[a]);
		if(s[a] == '\n')
		{
			break;
		}
		if(s[a] == 'y')
		{
			s[a] = 'a';
		}
		else if(s[a] == 'z')
		{
			s[a] = 'b';
		}else
		{
			s[a] = s[a] + 2;
		}
	}
	s[a] = '\0';
	for(a = 0;s[a] != '\0';a = a + 1)
	{
		printf("%c",s[a]);
	}
}

3.结果

学习总结和进度
1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?
学会了使用指针在函数内返回值。
指针的多种形式。
统计字符串长度方法。
还要了解其它的函数。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
1.git地址
https://git.coding.net/z732511533/ZYS.git
2.截图


3、点评3个同学的本周作业。
http://www.cnblogs.com/DavidPark/p/8551402.html
http://www.cnblogs.com/xmb1547828350/p/8597402.html
http://www.cnblogs.com/ryo-/p/8644256.html

4、请用表格和折线图呈现你本周(3/12 8:00~3/26 8:00)的代码行数和所用时间、博客字数和所用时间。

时间 代码行数 时间1(min) 博客字数 时间2(min)
3.12 0 0 0 0
3.13 100 40 0 0
3.14 50 20 0 0
3.15 0 0 0 0
3.16 60 25 0 0
3.17 0 0 0 0
3.18 50 20 0 0
3.19 0 0 0 0
3.20 150 50 0 0
3.21 50 20 0 0
3.22 40 15 300 100
3.23 0 0 0 0
3.24 50 20 300 50
3.25 60 20 600 180
3.26 0 0 0 0

posted @ 2018-03-25 16:16  左右羽  阅读(246)  评论(5编辑  收藏  举报