第四章
//--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",©_start,©_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;
}