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 |