컴퓨터과학과
컴퓨터과학과 입학생, 재학생, 교수, 조교, 예비입학생분들을 위한 게시판입니다.
조회 수 1642 추천 수 0 댓글 1

단축키

Prev이전 문서

Next다음 문서


<제 3 장>
3-6.printf문 수정하기
#include <stdio.h>
#include <conio.h>
void main()
{
int i,j;
long ix;
short a;
unsigned u;
float x;
double dx;
char c;
clrscr();
i=22; j=22222; //결과 확인을 위해 임의로 넣음
x=0.0023; dx=14.23235; //결과 확인을 위해 임의로 넣음
printf("%4d \n%4d \n%14.8e \n%14.8e \n",i,j,x,dx);
}
=>위의 printf()에서 보듯이 출력변환문자사이에 \n을 넣어주면 됩니다.
교재에는 '%14.8e'가 하나 더 있는데, 오류인 듯 합니다. '%출력변환문자'와 변수의 수는 일치해야 합니다.
* '%4d'는 십진수를 int형으로 출력하는데 자리수를 4자리 확보하여 오른쪽으로 정렬하여 출력하며, 왼쪽 정렬하고 싶으면 '%-4d'라고 표시하면 됩니다. 또한 출력할 수가 정해놓은 자리수 '4'보다 많으면 4자리 확보한 것을 무시하고 그냥 원래 데이터를 그대로 출력합니다.
 
* '%14.8e'는 부동소수점 수를 지수형식으로 출력하는데, 전체자리수는 14자리를 확보하고, 그 중에서 소수점 이하를 8자리로 출력합니다. 이럴 때 혹시 소수점 9째 자리가 있었다면, 9째 자리에서 반올림하여 소수점 이하 8자리까지 출력합니다. 또한 전체자리수 14자리란 소수점과 지수표현 모두를 포함합니다. 프로그램을 실행하여 확인해 보시기 바랍니다.
 

3-7.물음에 답하기
#include <stdio.h>
#include <conio.h>
void main()
{
int i,j,k;
 
(1) i,j,k가 decimal integer인 경우 scanf()문 작성하기
scanf("%d%d%d",&i,&j,&k);
printf("%d\t%d\t%d\n",i,j,k);
 
(2) i,j는 16진수, k는 8진수인 경우 scanf()문 작성하기
scanf("%x%x%o",&i,&j,&k);
printf("%d\t%d\t%d\n",i,j,k);
 
}
 
* 10진수인 경우에는 %d로 표현하고, 숫자의 입력은 -32768~32767까지 입력하면 됩니다.
* 8진수의 경우에는 %o로 표현하고, 숫자의 입력은 0~7까지의 숫자로만 표현하되,
(100000~177777)-(0~77777)까지 입력이 가능합니다.
* 16진수의 경우에는 %x로 표현하고, 숫자의 입력은 0~9,A,B,C,D,E,F로 표현하되, (8000~ffff)-(0~7fff)까지 입력이 가능합니다.
 

3-8. 공란을 질문과 같이 채우기
#include <stdio.h>
#include <conio.h>
void main()
{
int a=8086;
printf("% \n",a); //(가)
printf("% \n",a); //(나)
printf("% \n",a); //(다)
}
=>(1)은 4d, (2)은 50 , (3)은 4x
*정수자료형에서 10진수는 %d, 8진수는 %0, 16진수는 %x로 각각 사용되는 것을 기억하세요.
 
3-9. 입력데이터에 따라 변수에 저장되는 값을 알아보기.
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b,c;
//(1)input data 123 456 789
scanf("%3d%3d%3d",&a,&b,&c);
printf("input data %d %d %d\n",a,b,c); //=>123 456 789
 
//(2)input data 123456789
scanf("%3d%3d%3d",&a,&b,&c);
printf("input data %d %d %d\n",a,b,c); //=>123 456 789
 
//(3)input data 1234 5678 9
scanf("%3d%3d%3d",&a,&b,&c);
printf("input data %d %d %d\n",a,b,c); //=>123 4 567
}
=>(1)과 (2)는 그대로 3개씩 3개의 데이타가 입력됨.
(3)은 123을 &a에 저장하고, 4를 &b에 저장하고, 567을 &c에 저장합니다.
*여기서 중요한 것은 printf() 출력문은 출력자료가 자리수보다 많으면 자리수를 무시하고 자료를 모두 출력하지만, scanf() 입력문은 자리수를 지정하면 지정한 자리수 만큼만 자료를 저장한다는 것입니다. 또한 입력할 때 하나의 자료라고 판단하는 것이 공백이나 엔터키 앞부분까지입니다. 즉, 공백도 엔터키로 인정하는 것이지요.
 
*위에서 (1)과 (2)는 별로 문제 될 것이 없습니다. (1)은 자리수와 입력수가 맞으므로 그냥 출력이 되고, (2)는 3개씩 차례로 변수에 저장시킵니다. (3)은 123을 &a에 저장하고 나면 4다음에 공백이 있죠. 그러므로 &b에는 4가 저장이 되죠. &c에는 567이 저장되고 8과 9라는 두개의 자료는 변수에 저장되지 않은채 그대로 남아 있습니다.
 
3-10.연산자 우선순위를 괄호로 묶어 나타내고 연산결과 쓰기
#include <stdio.h>
#include <conio.h>
void main()
{
int i,j,k,m,n;
i=j=k=m=n=3;
i+=++j+3; //(1) i+=((++j)+3) => i=4+3+3=10
k%=m=1+n/2; //(2) k%=(m=(1+(n/2))) => k%=(m=1+1) => k=k%2 => k=3%2 => k=1
printf("i+=++j+3=>%d\n",i);
printf("k%%=m=1+n/2=>%d\nm=%d\n",k,m);
}
=>(2)의 경우 n/2=3/2이죠. 근데 자료형이 정수형이므로 소수점 이하는 무조건 잘립니다. 그래서 1.5=1이 되는 겁니다.
m=1+1 => m=2가 되지요. k=k%2에서 k=3이므로 3/2면 몫=1, 나머지=1 이 되는 겁니다.
 
3-11.프로그램의 출력결과 확인하기.
#include <stdio.h>
#include <conio.h>
void main()
{
char a='A',b='B';
printf("\n%c \n%c",a,b);
printf("\n%c \t%c",a,b);
printf("\n%c \b%c",a,b);
printf("\n%c %c\r",a,b);
}
=>A
B ->A 공백 한 칸 줄바꿈(\n) 후 B 출력
A B ->A 공백 한 칸 탭키(\t)만큼 이동 후 B 출력
AB  ->A 공백 한 칸 한 칸 앞으로 커서이동(\b) 후 B 출력
A B  ->A 공백 한 칸 B 출력 후 행의 맨 첫 열로 커서이동(\r)
 
3-12.프로그램의 결과 쓰기
#include <stdio.h>
#include <conio.h>
void main()
{
int a=5,b=9;
printf("%d %d\n",++a,a); //++a=6,a=5
printf("%d %d\n",a++,a); //a++=6,a=6
printf("%d %d\n",--b,b); //--b=8,b=9
printf("%d %d\n",b--,b); //b--=8,b=8
}
=>6 5 ->a=5 다음 좌측으로 이동 ++a=6
6 6 ->a=6 다음 좌측으로 이동 a++=6 (최종 a의 값은 7<출력되지 않았음>)
8 9 ->b=9 다음 좌측으로 이동 --b=8
8 8 ->b=8 다음 좌측으로 이동 b--=8 (최종 b의 값은 7<출력되지 않았음>)
 
*이 문제는 증감연산자의 연산순서를 잘 이해하셔야 하며, 결합방향도 제대로 숙지하셔야 합니다. 단항연산자, 조건연산자, 대입연산자는 우측에서 좌측으로 결합하여 연산을 하며, 그 외의 다른 연산자들은 모두 좌측에서 우측으로 결합하여 연산을 합니다.
 
3-13. 논리연산식의 결과쓰기
(1) 1 (2) 0 (3) 1(w=119 아스키값) (4) 1 (5) 0 (6) 0 (7) 0 (8) 1
 
3-14.키보드에서 정수 2개의 정수 데이터를 입력받아 사칙연산을 수행하고 결과를 출력하기.
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b; //입력변수를 정수자료형으로 선언
int sum,sub; //덧셈, 뺄셈 변수선언
long mul; //곱셈변수를 long형으로 선언
float div; //나눗셈변수를 실수형으로 선언
scanf("%d%d",&a,&b); //2개의 정수를 입력받음(-32768~32767)
sum=a+b;
sub=a-b;
mul=(long)a*b; //곱셈변수가 long형이므로 a*b를 long형으로 강제변환
div=a/b;
printf("sum=%d\nsub=%d\nmul=%ld\ndiv=%f\n",sum,sub,mul,div);
}
 
3-15.다음 문장은 잘못되어 있다. 올바르게 고치시오.
(1) scanf("%d",value); => scanf("%d",&value);
 
(2) printf("The product of %d and %d is %d"\n,x,y);
=>printf("The product of %d and %d is %d\n",x,y,z);
 
(3) firstnumber + secondnumber = sumofnumbers
=>sumofnumbers = firstnumber + secondnumber
 
(4) if(number=>largest)
latgest==number;
=>if(number>=latgest) => '=>'을 '>='로
latgest=number;
 
(5) Scant("%d",anInteger); =>scanf("%d",&anInteger);
=>Scant이 아니라 scanf이며 변수앞에는 &를 사용해야 함
 
(6) printf("Remainder of %d divided by %d is\n",x,y,x%y);
=>printf("Remainder of %d divided by %d is\n",x,y,x%y); =>x%y는 %f(실수)형태로 사용해서는 안됨.
출력양식 변환기호의 갯수가 틀리다.
 
(7) if(x=y); =>'='은 할당문에 사용
printf(%d is equal to %d\n",x,y); =>%d앞에 "가 빠져있음
=>if(x==y);
printf("%d is equal to %d\n",x,y);
 
(8) printf("The sum is %d\n,"x+y);
=> printf("The sum is %d\n",x+y); =>','의 위치가 잘못됨
 
(9) printf("The value you entered is : %d\n, &value);
=>printf("The value you entered is : %d\n", value); => "가 빠져 있으며, 출력문에는 &사용안함

List of Articles
번호 분류 제목 글쓴이 조회 수
공지 (필독) 공지 모음 / 코인(포인트) 얻는 방법 및 입문서 259 게시판관리 3317
공지 커뮤니티를 홍보하고 포인트를 적립해보세요 13 게시판관리 568
공지 ChatGPT 인공지능 기능을 포함하여 다양한 도구들을 사용해보세요 ⬆️ 6 file 게시판관리 740
567 1학년 파이썬프로그래밍기초 1~15강 연습문제 주요용어 정리하기 63 file 아불 37015
566 1학년 C프로그래밍 기출문제 (C언어핵심정리 포함) 2015-2019 압축해서 올립니다. 138 file 온달 26960
565 일반 가입인사드립니다~ 4 sunnydsj 25357
564 4학년 가입인사 6 푹익은학생 25298
563 일반 안녕하세요. 가입인사 드립니다. 17 cwhh 23981
562 1학년 가입인사드립니다~ 10 젊어서노세 23373
561 4학년 모바일앱프로그래밍 기출문제 (2014~2019) 및 정답 15 온달 21466
560 정보 SQLD 추천교재 7 초보 20881
559 3학년 데이터베이스시스템 기출문제 2017-2019 압축해서 올립니다. 137 file 온달 18558
558 정보 이산수학 수강시 참고사항 3 초보 18463
557 1학년 파이썬 기말 점수 확인하신 분 계신가요? 2 리니 18401
556 질문 기말고사 준비할려면 질문있습니다. 22 EURO 18304
555 일반 가입인사드려요 9 친구 17897
554 일반 가입인사 드립니다 4 바다닥 17491
553 일반 가입인사. 5 zzam 17025
552 2학년 Java프로그래밍 기출문제 2015-2019 압축해서 올립니다. 105 file 온달 17011
551 1학년 가입인사 7 캔커피 16728
550 3학년 운영체제, 알고리즘 교재판매합니다 1 file 매일공부 16653
549 일반 가입인사 드립니다. 2 바라기 16559
548 일반 가입인사 6 아리올리오 16033
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 29 Next
/ 29