C和指针学习ing 课后习题练习ing

C语言编程实例
本文提供了多个C语言编程实例,包括计算平方根、打印质数、判断三角形类型、字符串操作等,通过这些实例帮助读者更好地理解和掌握C语言的基础知识。

第四章

//--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---  要求如下

image_thumb[4]

#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 -----

image

//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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值