码迷,mamicode.com
首页 > 其他好文 > 详细

第1次作业

时间:2018-03-25 17:03:11      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:break   alt   答案   原因   amp   解决   数组   markdown   efi   

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

技术分享图片

第1次作业

标签:break   alt   答案   原因   amp   解决   数组   markdown   efi   

原文地址:https://www.cnblogs.com/2017023960ZYS/p/8604534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!