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 |