교재 : C언어로 쉽게 풀어쓴 자료구조 (천인국, 공용해, 하상호 지음)
자료구조를 배위기 위한 C언어 기본문법 정리
- 예제_1 : 가격계산
#include <stdio.h>
#include <stdlib.h>
int main(void){
int K , N ,M ;
// K(가격), N(햄버거 개수), M(지갑에 있는 돈)
scanf("%d %d %d", &K, &N, &M);
// 각각의 값을 scanf함수로 받음
int total = K*N;
//총 햄버거의 가격
if (total > M){
printf("%d\n" ,total -M);
// 가격이 부족한 경우
}
else {
printf("0\n");
}
return 0;
}
- 예제_2 : 성적 출력
#include <stdio.h>
int main(void){
int score ;
scanf("%d", &score); // 성적 입력
if(score<0 || score>100) // 0~100 이외 값 처리
printf("Wrong Input\n");
else{ //각각 점수에 맞게 성적 출력
if(score >=90 && score <=100)
printf("A\n");
else if(score >=80 && score <90)
printf("B\n");
else if (score >= 70 && score <80)
printf("C\n");
else
printf("D\n");
} // else
return 0;
}
- 예제_3 : 입력받은 정수를 각각의 자릿수에 맞게 출력
#include <stdio.h>
int main(void){
int N ;
scanf("%d", &N); // 정수 입력
while(N!=0){ // 정수값이 0보다 큰 경우
printf("%d\n", N%10);
N = N/10;
} // while
return 0;
}
- 예제_4 : 정수를 입력받아 1~N까지 홀수와 짝수의 합 구하기
#include <stdio.h>
int main(void){
int N;
scanf("%d", &N); //정수 입력
int evenSum = 0; // 짝수 합
int oddSum = 0; // 홀수 합
// 합은 0으로 초기화 시켜주는게 좋음
for (int i=1; i<=N; i++){
if (i%2 == 0) //짝수 조건
evenSum = evenSum + i;
else
oddSum = oddSum + i;
}
printf("%d\n%d\n",evenSum, oddSum);
return 0;
}
- 예제_5 : 추를 이용한 경우의 수
#include <stdio.h>
//함수 구현
void sumOfWeghit(int G){
// 3중 반복문을 이용하여 모든 경우의 수 확인
int cnt = 0;
for (int i=1; i<11; i++)
for(int j=1; j<11; j++)
for(int k=1; k<11; k++)
if((2*i + 3*j + 5*k) == G ){
printf("%d %d %d\n", i, j, k);
cnt ++;
}
// 경우의 수 출력
if (cnt == 0){
printf("%d\n" , cnt);
}
else{
printf("%d\n", cnt);
}
};
int main(void){
int G ;
scanf("%d" , &G);
sumOfWeghit(G);
return 0;
}
- 예제_6 : 1차원 배열에 1~100 난수를 저장 후 최댓값 구하기
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 최댓값 함수 구현 값을 반환해야 하므로 int자료형으로 선언
int findMax(int A[], int N){ //배열과 정수 인자
int Max = A[0]; //초기 최댓값은 모르기 때문에 배열의 첫번째 Index값을 삽입
for(int i=1; i<N; i++){
if (Max <= A[i]){ //Max값보다 더 큰 값이 존재하면
Max = A[i]; // 교체
}
else{
continue;
}
}
return Max;
};
int main(void){
int A [50], N;
scanf("%d", &N);
srand(time(NULL)); //실행마다 항상 바뀌기 때문에 rand에서는 seed값이 항상 변함
for (int i=0; i<N; i++){
// C에서 rand에서는 seed값이 고정되어있어서 seed값을 time값으로 난수 발생
A[i] = rand()%100 +1; // 1~100 사이 난수
}
for (int i=0; i<N; i++){
printf("%d ", A[i]);
}
printf("\n");
printf("%d\n", findMax(A, N)); // 함수 실행
return 0;
}
- 예제7 : 주사위를 10000번 던져 각 면이 나오는 횟수를 시물레이션 하는 프로그램 작성
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(){
int arr[6] ={0};
// 여러개를 한번에 0으로 초기화
srand(time(NULL));
for(int i=0; i<10000; i++){
arr[rand()%6]++;
}
for(int i=0; i <6; i++){
printf("%d %d\n", i+1, arr[i]);
}
return 0;
}
- 예제 8: 2차원 배열 생성
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(){
int Arr[3][4] ={
{0,1,2,3},
{10,11,12,13},
{20,21,22,23},
};
for(int y=0; y<3; y++)
{
for(int x=0; x<4; x++){
printf("%2d ", Arr[y][x]);
}
printf("\n");
}
return 0;
}
- 예제9 : 2차원 배열의 임의의 수를 입력받아 각 행과 열의 합을 출력
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(){
int arr[3][4]; //2차원 배열 생성
srand(time(NULL)); //랜덤 시드
int y_sum = 0;
int x_sum = 0;
for (int y=0; y<3; y++){
for(int x=0; x<4; x++){
arr[y][x] = rand() % 40+60;
}
}
for(int i=0; i<3; i++){
x_sum = 0;
for(int j=0; j<4; j++){
x_sum = x_sum + arr[i][j];
}
printf("%d %d", i, x_sum);
}
printf("\n");
return 0;
}
- 예제10 구조체를 사용하여 접근해보기
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int account;
int balance;
char name[20];
// 정보 입력
} Bank; //구조체 별명
int main(){
Bank a;
scnaf("%d %s %d", &a.account, &a.name, %a.balance);
printf("%d %s %d\n", a.account, a.name, a.balance);
return 0;
}
- 구조체 응용
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int account;
int balance;
int name[20];
}Bank; //구조체
void deposit(Bank *a, int amount)
{
//(*a).balance += amount ;
a->balance += amout ;
printf("%d %s : %d\n", a->account, a->name, a->balance);
}
int main(){
Bank a;
scanf("%d %s %d", &a.account, a.name, &a.balance);
printf("%d %s: %d\n", a.account, a.name, a.balance);
deposit(&a, 10000);
printf("%d %s: %d\n", a.account, a.name, a.balance);
//구조체 변수는 레퍼런스를 가지고 있지않다. 클래스 객체와 구조체와의 차이이다. 즉 , 인자로 a를 주면 call by value , 인자로 &a를 주면 call by reference이다
return 0;
}
//Main함수에는 구조체를 접근할 때 .으로 접근하지만 사용자 정의 함수에서는 구조체 주소와 ->를 쓴다.