博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C和指针学习ing 课后习题练习ing
阅读量:7061 次
发布时间:2019-06-28

本文共 4944 字,大约阅读时间需要 16 分钟。

hot3.png

第四章

//--4.1--

#include "stdafx.h"

#include <stdio.h>
#include <assert.h>
#include <math.h>

#include "NSquareRoot.h"

void test(float iIput);

int main(int argc, char* argv[])

{
    double lfNum     = 0;
    double lfResult1 = 0;
    double lfResult2 = 0;
    printf("请输入需要计算平方根的数:\n");
    scanf("%lf",&lfNum);
    lfResult1 = (1.0+lfNum)/2.0;
    while(1)
    {
        lfResult2 = (lfNum/lfResult1 + lfResult1)/2.0;

        if(fabs( lfResult2-lfResult1)  < 1e-9)

            break;
        else
            lfResult1 = lfResult2;
    }

    printf("结果是:%f\n", lfResult2);

    printf("Hello World!\n");

    return 0;
}

 

//--4.2-- 打印1~100内的质数   质数是只能被1和它本身整除的数

#include "stdafx.h"

#include <stdio.h>

#define TRUE  1

#define FALSE 0

int main(int argc, char* argv[])

{
    unsigned int iloop = 2;

    for(; iloop < 100; iloop+=2)  //只计算奇数

    {
        if(2 == iloop)
        {
            printf("质数是%d\n",iloop);
            iloop--;  //为了只计算奇数
            continue; //2是合数
        }

        for(unsigned int i=2, is_prime = TRUE; i < iloop/2; i++)

        {
            if(0 == iloop % i )   
            {
                is_prime = FALSE;
                break;
            }
        }
        if(TRUE == is_prime)
          printf("质数是%d\n",iloop);
    }

    printf("Hello World!\n");

    return 0;
}

 

//--4.3-- 判断用户输入的三个数,是什么三角形

#include "stdafx.h"

#include <math.h>
#define RESULT_BE(X1,X2,X3) ( (X1+X2) <= X3 )
#define RESULT_GE(X1,X2,X3) ( abs(X1-X2) >= X3 )

int main(int argc, char* argv[])

{
    int wSide1 = 0;
    int wSide2 = 0;
    int wSide3 = 0;

    printf("请输入三角形的三个边,以空格隔开\n");

    scanf("%d,%d,%d",&wSide1,&wSide2,&wSide3);

    if( (wSide1 <= 0) ||  (wSide2 <= 0) || (wSide3 <= 0))
    {
        printf("输入有误,至少有一个边小于或等于0!\n");
        return 0;
    }
    if( RESULT_BE(wSide1,wSide2,wSide3) || RESULT_BE(wSide2,wSide3,wSide1) ||RESULT_BE(wSide1,wSide3,wSide2) ||
        (RESULT_GE(wSide1,wSide2,wSide3)) || (RESULT_GE(wSide1,wSide2,wSide3)) || (RESULT_GE(wSide1,wSide2,wSide3))  )
    {   
        printf("输入有误,这三边不能构成三角形!\n");
        return 0;
    }
    if( (wSide1 == wSide2 ) && (wSide2 == wSide3 ) && (wSide1 == wSide3 )  )
    {
        printf("该三角形是等边三角形\n");
        return 0;
    }
    else
    {
        if((wSide1 == wSide2 ) || (wSide2 == wSide3 ) || (wSide1 == wSide3 ))
        {
            printf("该三角形是等腰三角形\n");
            return 0;
        }
        else
        {
            printf("该三角形是不等边三角形\n");
            return 0;
        }
    }

    printf("Hello World!\n");

    return 0;
}

 

//--4.4-- 实现 void copy_n函数

 

//copy_.h

//拷贝字符串数组

#include <string.h>

void copy_n(char dst[], char src[], int n)

{
    char *cpdst = dst;
    char *cpsrc = src;
    int nDstSize = strlen(dst);
    int nSrcSize = strlen(src);
    int nTemp = 0;
    if(nSrcSize <= n)
    {
        while('\0' != (*cpdst++ = *cpsrc++) )
        {
            nTemp++;
        }
        for(; nTemp < n; nTemp++)
        {
            *cpdst++ = '\0';
        }
    }
    else
    {
        for(nTemp=0; nTemp < n; nTemp++)
        {
            *cpdst++ = *cpsrc++;
        }
         for(; nTemp < nDstSize; nTemp++)
        {
            *cpdst++ = '\0';
        }
    }
}

 

//copy_n.c

#include "stdafx.h"

#include <stdio.h>
#include "copy_n.h"

#define DST_SIZE 100

#define SRC_SIZE 30

int main(int argc, char* argv[])

{
    char dst[DST_SIZE] = {'0'};
    char src[SRC_SIZE] = "abcdefghigklmnopqrstuvwxyz";
    copy_n(dst, src, 6);
    printf("%s\n",dst);
    copy_n(dst, src, 4);
    printf("%s\n",dst);

    printf("Hello World!\n");

    return 0;
}

//---4.5---  要求如下

#include "stdafx.h"

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

#if 1

#define  SOME_LINE_NUM  100    //存放最终相同的字符串
#define  ARR_SIZE  128

#define  EQUAL     1

#define  UNEQUAL   0

int main(int argc, char* argv[])

{
    char cInput[ARR_SIZE] = {'\0'};  //临时存放每个line字符串
    char cSomeLine[ARR_SIZE] = {'\0'}; //存放相邻相同line字符串
    char cEndSomeLine[SOME_LINE_NUM][ARR_SIZE] = {'\0'};
    unsigned int nSomeFlag = UNEQUAL;
    int SomeLineNum = 0;

    while(NULL != gets(cInput))

    {
        if( 0 == strcmp(cSomeLine, cInput))
        {
            nSomeFlag = EQUAL;   
        }
        else
        {
            if( EQUAL == nSomeFlag )
            {
                strcpy(cEndSomeLine[SomeLineNum++],cSomeLine);
                nSomeFlag = UNEQUAL;
                if(SomeLineNum > SOME_LINE_NUM)
                {
                    break;
                }
            }
            strcpy(cSomeLine,cInput);

        }

    }

    printf("相同的字符串是:\n");

    for(int i = 0; i < SomeLineNum;)
    {
        printf("%s\n",cEndSomeLine[i++]);
    }
    return 0;
}
#endif

//该书籍给的参考答案

#if 0   
#define TRUE  1
#define FALSE 0

#define LINE_SIZE  129

void  main()

{
    char input[LINE_SIZE], previous_line[LINE_SIZE];
    int  printed_from_group = FALSE;

    if( gets(previous_line) != NULL)

    {
        while(gets(input) != NULL)
        {
            if(strcmp(input, previous_line) != 0)
            {
                printed_from_group = FALSE;
                strcpy(previous_line, input);
            }
            else
                if(!printed_from_group)
                {
                    printed_from_group = TRUE;
                    printf("%s\n", input);
                }
        }
    }
}
#endif

 

//---4.6 -----

//substr.h

#include <string.h>

int substr(char dst[], char src[], int start, int len)

{
    int wDstSize = strlen(dst);
    int wSrcSize = strlen(src);
    int lenOfCopying = 0;
    int i = 0;
    if( (start < 0) || (len < 0) || (start >= wSrcSize) )
    {
        for(; i < wDstSize; i++)
        {
            dst[i] = '\0';
        }
    }
    else
    {
        for(i = 0;i<len;i++)
        {
            if('\0' == (dst[i] = src[start+i]) )
            {
                break;
            }
            lenOfCopying++;
        }
    }
    return lenOfCopying;
}

//substr.c

#include "stdafx.h"

#include <stdio.h>
#include "substr.h"

#define  ARR_SIZE  100

int main(int argc, char* argv[])

{
    char cDst[ARR_SIZE] = {0};
    char cSrc[ARR_SIZE] = "abcdefghigklmnopqrstuvwxyz";
    int  copy_start = 0;
    int  copy_len   = 0;
    printf("请输入拷贝字符串的开始位置和长度\n");
    scanf("%d,%d",&copy_start,&copy_len);
    copy_len = substr(cDst,cSrc,copy_start,copy_len);

    printf("\n%s\n",cDst);

    printf("提取的字符串长度是%d \n",copy_len);
    printf("Hello World!\n");
    return 0;
}

转载于:https://my.oschina.net/technologylearner/blog/137654

你可能感兴趣的文章
FreeCodeCamp 中级算法记录
查看>>
k8s入门系列之扩展组件(一)DNS安装篇
查看>>
【设计模式】牛市股票还会亏钱 --- 外观模式
查看>>
基于Elastic Stack最新版本搭建ELK
查看>>
j抽奖
查看>>
[算法] dijkstra单源无负权最小路径算法
查看>>
字符串的全排列
查看>>
Java并发编程的艺术(十)——Java中的锁(5)
查看>>
mysql实战39 | 自增主键为什么不是连续的?
查看>>
软件架构师的修炼之道
查看>>
[HDU 1372] Knight Moves
查看>>
java代码实现 金字塔(倒置)
查看>>
NOIP2015DAY2T2子串
查看>>
5种PHP创建数组的方式
查看>>
24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
查看>>
【C语言】07-基本语句和运算
查看>>
ajax异步获取提示框数据(鼠标悬浮事件)
查看>>
Android 内存使用hprof文件打开方法
查看>>
android入门一
查看>>
C#实现简单爬虫
查看>>