第四章
//--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 0int 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 30int 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 0int 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; }