C
C 7일차 정리
Random & 배열
-----------------------------------------------------------------
★★10~13 갯수로 나누고 처음값을 더하면됨
#include <stdlib.h> // rand, srand
#include <time.h> // time 시간을 초 단위로 구함
#include <stdio.h>
srand(time(NULL)); //현재시간을 구하는 time에 기준 시간 null임
alt+f8는 소스정렬
F9번 디버깅 부분 설정
------------------------
rand()%4+10
어떤 값들이 모두 같은 확률로 나올때
#include <stdio.h>
rand(),srand(unsigned seed);
#include <stdio.h>
time(NULL);
렌덤은 존재하지 않으며 식에 의해서 값들이 달라진다.
#---> 렌덤 예제
#include "stdafx.h"
#include<stdlib.h>//
#include<time.h>//
#include<stdio.h>//
void main()
{
int i;
for(i=0;i<5;i++)
printf("rand:%d\n",rand());
}
실행결과-------------------
rand:41
rand:18467
rand:6334
rand:26500
rand:19169
계속하려면 아무 키나 누르십시오 . . .
----------
#-->예제 2
#include "stdafx.h"
#include <stdlib.h>//
#include <time.h>//
#include <stdio.h>//
void main()
{
int i;
srand(time(NULL));//추가
for(i=0;i<5;i++)
printf("rand:%d\n",rand());
}
------실행결과
값이 변함.
------------
#include "stdafx.h"
#include <stdlib.h>//
#include <time.h>//
#include <stdio.h>//
void main()
{
int i;
for(i=0;i<50000;i++){
srand(time(NULL));//시간을 이용하기에 반복문 안에 쓰면 값이 똑같다.
printf("rand:%d\n",rand()%100);
}
}
-------
Quiz
1) 1~100 사이의 임의의 수 추출
#include "stdafx.h"
#include <stdlib.h>//rnad, srand변수
#include <time.h>//time변수
#include <stdio.h>//
void main()
{//1~100 사이의 임의의 수 추출
srand(time(NULL));
printf("rand:%d\n",rand()%100 + 1);
}
2) 10~20 사이의 임의의 수 추출
#include "stdafx.h"
#include <stdlib.h>//
#include <time.h>
#include <stdio.h>//
void main()
{//10~20 사이의 임의의 수 추출
srand(time(NULL));
printf("rand:%d\n",rand()%11 + 10);
}
3) -1~1 사이의 임의의 수 추출
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
void main()
{//10~20 사이의 임의의 수 추출
srand(time(NULL)); //현재시간을 구하는 time에 기준 시간 null임
printf("rand:%d\n",rand()%3 -1);
}
============================
주민번호 체크기
2 3 4 6 7 8 9 2 3 4 5(곱하기 입력)
년2 월2 일2 성별1 도1 구2 동2 합11-(합%11);
#############################
#1차원배열
정의 : 같은 자료형으로 연속된 메모리 공간에 할당하여 사용하는 것
형식 : 자료형 배열명[첨자]
첨자는 0부터임
int arr[10] 0~9까지의 공간생성
★배열의 이름은 주소
★null값이 나올때까지 출력된다.
#-->
#include "stdafx.h"
#include <stdio.h>//
void main()
{//10개의 배열을 생성후 5개의 숫자값을 입력
int arr[10];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;
printf("%d%d%d%d%d",arr[0],arr[1],arr[2],arr[3],arr[4]);
}
-----실행결과
12345계속하려면 아무 키나 누르십시오 . . .
------------
#-->배열로 출력 예제
#include "stdafx.h"
#include <stdio.h>//
void main()
{//10개의 배열을 생성후 10개의 숫자값을 입력
int arr[10], i;
for(i=0;i<10;i++){
arr[i]=i+1;
}
for(i=0;i<10;i++){
printf("%d",arr[i]);
}
printf("\n");
}
----------실행결과
12345678910
계속하려면 아무 키나 누르십시오 . . .
------------------
#---> 에제
void main()
{//10개의 배열을 입력받은 후 숫자값을 입력
int arr[10], i;
for(i=0;i<10;i++){
scanf("%d",&arr[i]);
}
for(i=0;i<10;i++){
printf("%d",arr[i]);
}
}
----------------실행결과
1 2 3 4 5 6 7 8 9 10
12345678910계속하려면 아무 키나 누르십시오 . . .
------------------
★★&(엔퍼센트)는 주소, &arr[첨자] arr도 주소임
#--> 문자열 입력 배열
void main()
{//문자열 입력 배열
int i;
char arr[10];
scanf("%s", arr);
for(int i=0;i<10;i++){
printf("%c",arr[i]);
}
printf("\n\n%s\n",arr);
}
-----------실행결과
korea
korea
------------------
// kdh.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
#include <stdio.h>//
void main()
{//문자열 입력 배열
int i;
char arr[10];
scanf("%s", arr);
for(int i=0;i<10;i++){
printf("%c",arr[i]);
}
printf("\n\n%s\n",arr);//%s로 출력시 arr에 들어있는 문자가 null까지 차례대로 나타남.
}
/*
[0] 107 'k' char
[1] 111 'o' char
[2] 114 'r' char
[3] 101 'e' char
[4] 97 'a' char
[5] 0 char
[6] -52 char//이상한 문자가 나타남
[7] -52 char
[8] -52 char
[9] -52 char
*/
#선택정렬
정의
첫째 자리에 원하는 값을 위치하는 것으로 오름차순과 내림차순에 따라 값이 변할 수 있다. 오름 차순을 기준으로 하였을 겨우 앞에 있는 값과 그 이후의 값들을 비교하여 가장 작은 값을 그 위치에 놓는다.
#오름차순
1,2,3,4,5
가나다라마
#내림차순
5,4,3,2,1
마라다나가
#-->문자열 정렬
void main()
{//문자열 입력 배열
int num[5]={4,8,2,7,6};
int tmp, i, j;
char arr[10];
for(i=0;i<4;i++){
for(j=i+1;j<5;j++){
if(num[i]>num[j]){
tmp=num[i];
num[i]=num[j];
num[j]=tmp;
}
}
}
for(int i=0;i<5;i++)
printf("[%3d]",num[i]);
}
------실행결과
[ 2][ 4][ 6][ 7][ 8]계속하려면 아무 키나 누르십시오 . . .
-------------
#---> 랭킹 출력 예제
void main()
{//랭킹 출력
int jumsu[5]={82,85,76,79,96};
int rank[5];
printf("┏━━━━┳━━┓\n");
for(int i=0;i<5;i++){
rank[i]=1;
for(int j=0;j<5;j++){
if(jumsu[i]<jumsu[j])
rank[i]++;
}
printf("┃점수: %d┃%d 등┃\n",jumsu[i],rank[i]);
}
printf("┗━━━━┻━━┛\n");
}
----------실행결과
┏━━━━┳━━┓
┃점수: 82┃3 등┃
┃점수: 85┃2 등┃
┃점수: 76┃5 등┃
┃점수: 79┃4 등┃
┃점수: 96┃1 등┃
┗━━━━┻━━┛
계속하려면 아무 키나 누르십시오 . . .
-------------------
#-->순서대로 출력
void main()
{//랭킹 출력
int jumsu[5]={82,85,76,79,96};
int rank[5];
printf("┏━━━━┳━━┓\n");
for(int i=0;i<5;i++){
rank[i]=1;
for(int j=0;j<5;j++){
if(jumsu[i]<jumsu[j])
rank[i]++;
}
}
for(int k=0; k<5; k++){
for(int l=0; l<5; l++){
if(rank[l] == (k+1)){
printf("┃점수: %d┃%d 등┃\n",jumsu[l],rank[l]);}
}
}
printf("┗━━━━┻━━┛\n");
}
-----실행결과
┏━━━━┳━━┓
┃점수: 96┃1 등┃
┃점수: 85┃2 등┃
┃점수: 82┃3 등┃
┃점수: 79┃4 등┃
┃점수: 76┃5 등┃
┗━━━━┻━━┛
계속하려면 아무 키나 누르십시오 . . .
------------
#--> 문제
std[5]를 만들어
std[0]에는 국어점수를
std[1]에는 영어점수를
std[2]에는 수학점수를
std[3]에는 합계
std[4]에는 평균을 구하시오
#---->
void main()
{//점수 입력 배열
int std[5],i;
for(i=0;i<3;i++){
scanf("%d",&std[i]);
}
std[3] = std[0] +std[1]+ std[2];
printf("합계 : %d", std[3]);
std[4]=std[3]/3;
printf("평균 : %d\n", std[4]);
}
-----실행결과
90 50 50
합계 : 190평균 : 63
계속하려면 아무 키나 누르십시오 . . .
------------
#------>문제
10,17,3,9,27,10,8,9,13,21
1)위의 숫자를 invert_arr라는 배열에 거꾸로 입력하시오
void main()
{
int arr[10]={10,17,3,9,27,10,8,9,13,21};
int invert_arr[10];
int i,j;
for (i=0, j=9; i <10; i++,j--){
invert_arr[i] = arr[j];
}
for(i=0;i<10;i++)
printf("[%3d]",arr[i]);
printf("\n");
for(i=0;i<10;i++)
printf("[%3d]",invert_arr[i]);
}
2)위의 숫자의 짝수번째 내용의 합 - 홀수번째 내용의 합을 구하시오
void main()
{
int arr[10]={10,17,3,9,27,10,8,9,13,21};
int i, sum1=0,sum2=0;
for (i=1; i <10; i=i+2){
sum1=sum1 + arr[i];//홀수번째 합 //if(i%2 ==0) sum+=arr[i]
}
for (i=0; i <10; i=i+2){
sum2=sum2 + arr[i]; //짝수번째 합//if(i%2 ==1) sum-=arr[i]
}
printf("[%3d]",sum2-sum1);
}
3)위의 숫자를 sort_arr라는 배열에 내림차순으로 정렬하여 입력하시오
//
#include "stdafx.h"
#include <stdio.h>//
void main()
{
int arr[10]={10,17,3,9,27,10,8,9,13,21};
int sort_arr[10]={0};
int i,j;
for (i=0; i <10; i++){
for (j=0; i <10; j++){
if(sort_arr[i] < arr[j]){sort_arr[i] = arr[j];}
}
}
for (i=0; i <10; i++){
printf("%d",sort_arr[i]);
}
4)위의 숫자를 높은 숫자가 1등이 되게하여 rank_arr라는 배열에 순위를 입력하시오
5)다음 내용을 1차우너 배열에 입력하고 중복된 값을 체크하여 중복된 값은 over_arr에 넣고 중복되지 않은 값은 ret_arr에 입력하시오
=====================================>
#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
int arr[10]={10, 17, 3, 9, 27, 10, 8, 9, 13, 21};
int invert_arr[10];
int sort_arr[10];
int rank[10];
int i, j, sum=0, tmp;
for(i=0;i<10;i++){
// printf("[%3d] ", arr[i]);
}
printf("\n");
for(i=0,j=9;i<10;i++,j--)
invert_arr[i]=arr[j];
for(i=0;i<10;i++){
// printf("[%3d] ", invert_arr[i]);
}
printf("\n");
//위의 숫자의 짝수번째 내용의 합 - 홀수번째 내용의 합을 구하시오
for(i=0;i<10;i++){
if(i % 2 == 0)
sum += arr[i];
else
sum -= arr[i];
}
//printf("%d", sum);
//위의 숫자를 sort_arr라는 배열에 내림차순으로 정렬하여 입력하시오
for(i=0;i<10;i++)
sort_arr[i]=arr[i];
for(i=0;i<9;i++){
for(j=i+1;j<10;j++){
if(sort_arr[i] < sort_arr[j]){
tmp = sort_arr[i];
sort_arr[i] = sort_arr[j];
sort_arr[j] = tmp;
}
}
}
for(i=0;i<10;i++)
printf("[%d] ", sort_arr[i]);
//위의 숫자를 높은 숫자가 1등이 되게하여
//rank_arr라는 배열에 순위를 입력하시오
printf("======== 랭킹 =========\n");
for(i=0;i<10;i++){
rank[i] = 1;
for(j=0;j<10;j++){
if(sort_arr[i] < sort_arr[j]){
rank[i]++;
}
}
}
for(i=0;i<10;i++)
printf("[%3d] [%3d]등\n", sort_arr[i], rank[i]);
return 0;
}
============================================
'C'의 다른글
- 현재글C 7일차 정리