int atoi(const char * str);      문자열의 내용을 int형으로 변환

long atop(const, char * str);      문자열의 내용을 long형으로 변환

double atof(const char * str);      문자열의 내용을 double형으로 변환

Posted by 知彼知己百戰不殆
,

초보자들이 하는 실수:

char str1[]="123";

char str2[]="123";

if(str1==str2)

  printf("equal");

else

  printf("not equal");


이런 식의 문자열 비교는 배열 str1과 str2의 주소 값을 비교하는 것이다. 배열의 이름은 배열의 주소 값을 의미한다!


1
2
3
4
#include <string.h>
 
int strcmp(const char * s1, const char * s2);
int strncmp(const char * s1, const char * s2, size_t n);
cs

Tip~! 문자열 비교를 해보면 ABC와 ABD를 비교하고, printf를 찍어보면 C와 D의 아스키코드 차이값인 양수 1반환

ABC와 ABE를 비교해보면, 양수 2반환


strcmp("ABCD", "ABCDE"); 를 하면 널 문자도 비교 대상에 속하므로, E의 아스키코드 값이 널의 아스키 코드 0보다 크므로 음수가 반환된다.


Posted by 知彼知己百戰不殆
,
1
2
3
4
#include <string.h>
 
char * strcat(char * dest, const char * src);
char * strncat(char * dest, const char * src, size_t n);
cs

문자열을 뒤에 이어 붙일 때는 널문자가 입력된 그 부분부터 바로 문자열을 덧붙임

널 문자가 저장된 위치에서부터 복사가 진행되어야 덧붙임 이후에도 문자열의 끝에 하나의 널 문자만 존재하는 정상적인 문자열이 된다.

Posted by 知彼知己百戰不殆
,
1
2
3
4
#include <string.h>
 
char * strcpy(char * dest, const char * src);
char * strncpy(char * dest, const char * src, size_t n);
cs

strcpy는 널 값은 복사를 안하니까 sizeof같은 거로 최소값 잡아주고 마지막 값에는 0을 따로 넣어주어야 printf나 puts시 오류 안 생김

Posted by 知彼知己百戰不殆
,
1
2
3
#include <string.h>
 
size_t strlen(const char * s);
cs

전달된 문자열의 길이를 반환하되, 널 문자는 길이에 포함하지 않는다.

Posted by 知彼知己百戰不殆
,

Romberg법

언어/Coding 2015. 12. 22. 02:52

#include <stdio.h>

#include <stdlib.h>

#define _USE_MATH_DEFINES

#include <math.h>

#define f(x) log10(1+x)*sin(10*x) //함수 나중에 바꿔줘야 함

double T[20],R[20][20],h[20],a,b;

int n;


int main() {

        double sum;

        int i,k,j;

        printf("구간 값 a(적분 밑에 있는 값):");        scanf("%lf",&a);

        //printf("구간 값 b:"); //scanf("%lf",&b);

        b=2*M_PI;

        //printf("b:%lf\n",b);

        printf("구하고자 하는 R(n,n)에서의 n : ");      scanf("%d",&n);


        h[1]=b-a;

        printf("h[1]:%lf\n",h[1]);

        printf("f(b):%lf\n",f(b));

        printf("log(1+2PI):%lf\n",log(1+b));

        T[1]=h[1]/2*(f(a)+f(b));

        printf("T[1]:%lf\n",T[1]);

        R[1][1]=T[1];

        printf("R[1][1]:%lf\n",R[1][1]);

        for(i=2;i<=n;i++)

        {

                h[i]=h[i-1]*0.5;

                printf("h[%d]:%lf\n",i,h[i]);

                sum=0;

                for(k=1;k<=pow(2,i-2);k++)

                {

                        sum=sum+f(a+(2*k-1)*h[i]);

                }

                T[i]=0.5*T[i-1]+h[i]*sum;

                printf("T[%d]:%lf\n",i,T[i]);

R[i][1]=T[i];

                //printf("R[%d][1]:%lf\n",i,R[i][1]);

                for(j=2;j<=i;j++)

                {

                        R[i][j]=((pow(4,j-1)*R[i][j-1])-R[i-1][j-1])/(pow(4,j-1)-1);

                        //printf("first:%lf\n",pow(4,j-1)*R[i][j-1]);

                        //printf("second:%lf\n",R[i-1][j-1]);

                        //printf("pow(4,j-1):%lf\n",pow(4,j-1)-1);

                        //printf("R[%d][%d]:%lf\n",i,j,R[i][j]);

                }

                //printf("h[3]:%lf\t R[3][1]:%lf\n",h[3],R[3][1]);

        }

        printf("R11:%lf\n",R[1][1]);

        printf("R31:%lf\t R21:%lf\n",R[3][1],R[2][1]);

        printf("R32:%lf \t R22:%lf\n",R[3][2],R[2][2]);

        printf("n값에서의 R[n][n]:%lf\n",R[n][n]);

}



'언어 > Coding' 카테고리의 다른 글

할선법  (0) 2015.12.22
가상 위치법  (0) 2015.12.22
simpson 1/3 공식  (0) 2015.12.22
거듭제곱  (0) 2015.12.22
역 거듭제곱  (0) 2015.12.22
Posted by 知彼知己百戰不殆
,

할선법

언어/Coding 2015. 12. 22. 02:52

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define e 2.71

double f(double num1) {

 double num2;

 num2=pow(num1,3)-2*sin(num1);

 return num2;

} //definition of f(x)


int main() {

 double x0, x1,xc,n1,n2,n3;

 printf("x0값 입력:");

 scanf("%lf", &x0);

 printf("\n\n x1값 입력:");

 scanf("%lf", &x1);


 for (int i = 0; i < 6; i++) {

  n1 = f(x1)*(x0 - x1);

  printf("n1값:%lf\n", n1);

  n2 = f(x0) - f(x1);

  printf("n2값:%lf\n", n2);

  n3 = n1 / n2;

  xc = x1 - n3;

  printf("\nXc의 값은: %lf\n", xc);

  printf("f(Xc)의 값은: %lf\n",f(xc));

  x0 = x1;

  //printf("Xc의 값:%lf", xc);

  x1 = xc;

 }

}



'언어 > Coding' 카테고리의 다른 글

Romberg법  (0) 2015.12.22
가상 위치법  (0) 2015.12.22
simpson 1/3 공식  (0) 2015.12.22
거듭제곱  (0) 2015.12.22
역 거듭제곱  (0) 2015.12.22
Posted by 知彼知己百戰不殆
,

가상 위치법

언어/Coding 2015. 12. 22. 02:51

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define e 2.71

double f(double num1) {

 double num2;

 num2=pow(e, -num1) - num1;

 return num2;

} //definition of f(x)

int main() {

 double a, b, c,n1,n2,n3;

 for (;;) {

  printf("\n\n a값 입력:");

  scanf("%lf", &a);

  printf("\n b값 입력:");

  scanf("%lf", &b);

  n1 = f(b)*(a - b);

  printf("n1값:%lf\n",n1);

  n2 = f(a) - f(b);

  printf("n2값:%lf\n", n2);

  n3 = n1 / n2;

  printf("n3값:%lf\n", n3);

  c = b - n3;

  printf("\n c값은:%lf", c);

 }

}

'언어 > Coding' 카테고리의 다른 글

Romberg법  (0) 2015.12.22
할선법  (0) 2015.12.22
simpson 1/3 공식  (0) 2015.12.22
거듭제곱  (0) 2015.12.22
역 거듭제곱  (0) 2015.12.22
Posted by 知彼知己百戰不殆
,

simpson 1/3 공식

언어/Coding 2015. 12. 22. 02:50

#include <stdio.h>

#include <math.h>

#include <string.h>

float f(float x)

{

    return 4*pow(x,3)-6*pow(x,2)+4;   // 이 함수 부분을 바꿔줘야 함

}

int main()

{

    int i,n;

    float x0,xn,h,y[20],so,se,ans,x[20];

    printf("\n Enter values of x0,xn,h: ");

    scanf("%f%f%f",&x0,&xn,&h);

    n=(xn-x0)/h;

    if(n%2==1)

    {

        n=n+1;

    }

    h=(xn-x0)/n;

    printf("\n Refined value of n and h are:%d %f\n",n,h);

    printf("\n Y values: \n");

    for(i=0; i<=n; i++)

    {

        x[i]=x0+i*h;

        y[i]=f(x[i]);

        printf("\n %f\n",y[i]);

    }

    so=0;

    se=0;

    for(i=1; i<n; i++)

    {

        if(i%2==1)

        {

            so=so+y[i];

        }

        else

        {

            se=se+y[i];

        }


    }

    ans=h/3*(y[0]+y[n]+4*so+2*se);

    printf("\n Final integration is %f\n",ans);


}



'언어 > Coding' 카테고리의 다른 글

할선법  (0) 2015.12.22
가상 위치법  (0) 2015.12.22
거듭제곱  (0) 2015.12.22
역 거듭제곱  (0) 2015.12.22
Lagrange  (0) 2015.12.22
Posted by 知彼知己百戰不殆
,

거듭제곱

언어/Coding 2015. 12. 22. 02:48

/* 거듭제곱법 알고리즘

   행렬의 최대 고유값과 그 때의 고유벡터를 거듭제곱으로 구할 때 사용 */


#include <stdio.h>

#include <stdlib.h>

#include <math.h>

double A[10][10],x0[10],sum[10],xR[10];

/* void trace(){

        int i;

        for(i=1;i<=3;i++)

                xR[i]=x0[i];

} */


int main()

{

        int i,j,n,k,repeat,v;

        float ramda,temp,temp2,x1;

        printf("몇 행렬: ");

        scanf("%d",&n);

        printf("반복 횟수 입력:");

        scanf("%d",&repeat);

        printf("기본 행렬을 입력해 주세요:\n");

        for(i=1;i<=n;i++) //행 입력

        {

                for(j=1;j<=n;j++) //열 입력

                {

                        printf("A[%d][%d]:",i,j);

                        scanf("%lf",&A[i][j]);

                }

        }

//      printf("A[2][1]: %f\n",A[2][1]);  //단순 값 확인용도

        for(i=1;i<=n;i++)

        {

                printf("초기 x(0)을 입력해 주세요: ");

                scanf("%lf",&x0[i]);

        }

v=1;

        for(i=1;i<=repeat;i++) //수렴기준 대신에 반복 횟수로 카운트

        {

                //A*x(0)을 계산

                for(j=1;j<=n;j++)

                {

                        sum[j]=0;

                        for(k=1;k<=n;k++)

                        {

                                sum[j]=sum[j]+A[j][k]*x0[k]; // Y = sum

                        }

                        //printf("Y값 계산:%f\n",sum[j]);

                }

                temp = 0;

                temp2 = 0;

                for(j=1;j<=n;j++)

                {

                        temp=x0[j]*sum[j]+temp; // temp는 lamda구하기 위한 임시 변수

                        //printf("x0[%d]=%f, temp:%f\t",j,x0[j], temp);

                        temp2=x0[j]*x0[j]+temp2;

                        //printf("temp2:%f\n",temp2);

                        ramda=temp/temp2;

                }

                //printf("Lamda:%f\n",ramda);

                x1=0;

                for(j=1;j<=n;j++)

                        x1=pow(sum[j],2)+x1;

                x1=sqrt(x1);

                //printf("x(1):%f\n",x1);

                for(j=1;j<=n;j++)

                        x0[j]=sum[j]/x1;

                printf("반복횟수:%d\t Lamda:%f\t x(1):%f\t x(2):%f\t x(3):%f\n",v,ramda,x0[1],x0[2],x0[3]);

v++;

}//end of repeat

}//end of main



'언어 > Coding' 카테고리의 다른 글

가상 위치법  (0) 2015.12.22
simpson 1/3 공식  (0) 2015.12.22
역 거듭제곱  (0) 2015.12.22
Lagrange  (0) 2015.12.22
Gauss Seidel  (0) 2015.12.21
Posted by 知彼知己百戰不殆
,