int maxnum(int a[], int n){
int i;
int max = a[0];
for(i=1; i<n; i++){
if(a[i] > max) max = a[i];
}
return max;
}
(난수 생성 예제)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int i;
srand(time(NULL)); //시간으로 난수의 seed값 초기화
i = 100+rand()%90; //100~189의 난수생성
printf("%d",i);
}
컴퓨터에서 생성되는 난수는 진짜 난수가 아니기 때문에(seed값과 컴퓨터 환경이 같다면 결과가 같음)
시간값을 seed값으로 srand함수에 전달하게되면 일반적인 난수가 생성됨
int i;
for(i=0; i<n/2; i++){
int t = a[i];
a[i] = a[n-i-1];
a[n-i-1] = t;
}
(매크로를 사용한 방법)
#define swap(type, x, y) do{ type t = x; x=y; y=t;} while(0)
매크로의 정의에서 do while을 사용한이유는 do while문을 사용하지않았을경우
if(a>b) swap(int,a,b);
else swap(int,a,c);
위와같은 부분이
if(a>b) { type t=a; a=b; b=t; } ;
else {type t=a; a=c; c=t; } ;
위와 같은 형식으로 바뀌어 첫번째 if(a>b) 구문에서 ;(세미콜론)으로 인하여 if문이 종료가된다.
따라서 컴파일 에러가 발생하기 때문에 do while(0)을 사용하여 해결한다.
기수의 정의: 수를 나타내는데 기초가 되는 수. 10진법에서는 0~9.
서수의 정의: 사물의 순서. ex) 첫째, 둘째 ...
10진수
1의 자리 - 0부터 9까지 10종류의수
2의 자리 - 0부터 99까지 100종류의 수
3의 자리 - 0부터 999까지 1000종류의 수
(아랫자리부터 10^0, 10^1, 10^2, ... 으로 10의 거듭제곱 값을 갖는다)
따라서 10진수 3333은 다음과 같이 풀어쓸 수 있다
3333 = 3 x 10^3 + 3 x 10^2 + 3 x 10^1 + 3 x 10^0
8진수
1의자리 - 0부터 7까지 8종류의 수
2의자리 - 0부터 77까지 64종류의 수
3의자리 - 0부터 777까지 512종류의 수
(아랫자리부터 8^0, 8^1, 8^2, ... 으로 8의 거듭제곱 값을 갖는다)
따라서 8진수 3333은 다음과 같이 풀어쓸 수 있다.
3333 = 3 x 8^3 + 3 x 8^2 + 3 x 8^1 + 3 x 8^0
위와같은 방식으로 16진수 3333의 표현은 다음과 같다.
16진수
3333 = 3 x 16^3 + 3 x 16^2 + 3 x 16^1 + 3 x 16^0
※ 0x로 시작할 경우 16진수(0x1C), 0으로 시작할경우 8진수(034) 이외에는 10진수로 간주할 수 있다.
기수 변환 알고리즘은 다음과 같다.
//x를 n진수로 변환하여 배열 arr에 아랫자리부터 저장
int change(unsigned x, int n, char arr[]){
char cl[] = "0123456789ABCDEFGHIJKLMNOPQRSTUWXYZ";
int count = 0; //변환 후 자릿수
if(x == 0) arr[count++] cl[0];
else
while(x){
arr[count++] = cl[x % n]; //나머지를 저장한다.
x /= n; //몫을 나눈다
}
return count;
}