Programming Language/C2010. 10. 14. 19:31

ToFloat.c (문자열to실수형)

CircularShift.c  (왼쪽 circular Shift)

Right_Circular_Shift.c (오른쪽 circular S)


문자열을 실수형으로 바꿔주는 프로그램을 만들어봅니다.

또, shift에 대한 여러가지 소스를 짜며, C의 배열과 구조에 대하여 익숙해 집시다. 

ToFloat.c

/*
실습) 주어진 문자열을 실수형 data로 만들어주는 프로그램을 짜시오.

-입력은 char str [MAX];
  scanf("%s",str);
-출력은 printf("%f\n",num);
  printf("%lf\n",num);

-1)str[0]가 음수인지 check
  -2)소수점 이상 이하 분리해서 해결
  -3) 1,2)결과 종합해서 출력.
*/


#include<stdio.h>
#define MAX  255

int main(void){
 
 char str[MAX];
 int i=0,j=1;   //i는 배열 인덱스, j는 결과값의 부호값.
 int dnum=0;    //입력받은 값의 소수점 위 부분.
 float fnum=0;   //입력받은 값의 소수점 아래 부분.
 float num=0;   //float 형의 결과 값.
 
 printf("실수형 data로 바꿀 문자열을 입력하시오.\n");
 scanf("%s",&str);
 
 if(str[0]=='-'){  //문자열의 첫번째 요소가 음수일때 부호값을 -1
  i=1;
  j=-1;
 }
 
 
 
 while(str[i] != '.'){ //소수점이 나오기 전까지..
  dnum *= 10;
  dnum += str[i]-'0';
  i++;
 }
 
 i=strlen(str)-1;  //문자열 배열의 길이에서 1을 빼서(0부터 시작하니까) 널문자 앞의 마지막 값을 지정.
 
 while(str[i] != '.'){ //소수점 아래부분 가장 밑의 수부터 소수점 까지 입력.
  
  fnum += str[i]-'0'; 
  fnum/=10;
  i--;
 }
 /*
 printf("%d\n",dnum);
 printf("%f\n",fnum);
 */
 
 num = dnum + fnum;  //소수점 위,아래 부분 결합.
 num *= j;    //부호값을 곱하면 끝.
 
 

 puts("\n 실수형 data로 바꾸면 : ");
   printf("%f",num);
   break;
 
 
 return 0;
}

 

Circular Shift

/*
실습) 주어진 정수형 data를 왼쪽으로 circular shift 시켜주는 프로그램을 짜시오.
-입력은 int num,n;
scanf("%d %d" ,&num,&n);
-출력은 2진수로
*/


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

int LastBit(int x);

int main(void){
 int num,n;
 int k=1;
 int cnt = 1;
 int lastbit;
 unsigned int comp = 0x80000000;
 puts("이진수로 출력하여 n만큼 shift시킬 정수와 n을 입력하시오.:");
 scanf("%d %d" ,&num,&n);
 
 puts("결과 :");
 
 for(;k<=n;k++)
 {
  while(cnt <= 8*sizeof(int))
  {
   if((num&comp) == 0)
    printf("%d",0);
   if((num&comp) != 0)
    printf("%d",1);
   comp>>=1;
   cnt++;
  }
  printf("\n");
  comp = 0x80000000;
  if((num&comp)==0)
   lastbit=0;
  if((num&comp)!=0)
   lastbit=1;
  cnt=1;
  num<<=1;
  num|=lastbit;
  
 }
 cnt=1;
 while(cnt <= 8*sizeof(int))
 {
  if((num&comp) == 0)
   printf("%d",0);
  if((num&comp) != 0)
   printf("%d",1);
  comp>>=1;
  cnt++;
 }
 putchar('\n');
 return 0;
}

 

 Right Circular Shift

/*
실습) 주어진 정수중 data를 오른쪽으로 right circular shift 시켜주는 프로그램 짜시오.
*/


#include<stdio.h>
int main(void)
{
 int num,n;
 int cnt=1;
 
 int k=1;
 unsigned int headbit;
 unsigned int comp=0x80000000;
 puts("이진수로 출력하여 n만큼 오른쪽 shift시킬 정수와 n을 입력하시오.:");
 scanf("%d %d" ,&num,&n);
 puts("결과 :");
 
 
 while(k<=n)
 {
  if((num&comp)==0)   //양수일때
  {
   if((num&1) == 0)
    headbit=0;
   else if((num&1) != 0)
    headbit=0x80000000;
   
   while(cnt <= 8*sizeof(int))
   {
    if((num&comp) == 0)
     printf("%d",0);
    if((num&comp) != 0)
     printf("%d",1);
    cnt++;
    comp>>=1;
   
   }
   cnt=1;
   num>>=1;
   num|=headbit;
  
  }
  else if((num&comp)!=0)  // 음수일때
  {   
   if((num&1) == 0)
    headbit=0x7fffffff;
   if((num&1) != 0)
    headbit=0xffffffff;
   
   while(cnt <= 8*sizeof(int))
   {
    if((num&comp) == 0)
     printf("%d",0);
    if((num&comp) != 0)
     printf("%d",1);
    cnt++;
    comp>>=1;
   }
   
   cnt=1;
   num>>=1;
   num&=headbit;
  
  }
  puts("");

 comp=0x80000000;


  k++;
 }
 cnt=1;
 comp=0x80000000;
 while(cnt <= 8*sizeof(int)){
  if((num&comp) == 0)
   printf("%d",0);
  if((num&comp) != 0)
   printf("%d",1);
  cnt++;
  comp>>=1;
 }
 return 0;
}

 

 

 

 

 

 

이 글은 스프링노트에서 작성되었습니다.

'Programming Language > C' 카테고리의 다른 글

C Tutorial (역순화 문자열)  (0) 2010.10.14
C Tutorial (문자열크기비교)  (0) 2010.10.14
C Tutorial (실수형to문자열)  (0) 2010.10.14
C Tutorial (비트단위 내부표현)  (0) 2010.10.14
C Tutorial (16진법to10진법)  (0) 2010.10.14
Posted by BLUE-NOTE