7개까지 들어가는 상자 안에 7개의 값이 들어간 배열 b가 있고 4개의 값이 들어간 배열 c가 있다.
(근데 c는 몇개들어가는지는 안정해졌음)
배열 b에 있는 값들을 다 더하고 싶었다.
i는 b배열의 번째수? 이다 i가 1일땐 첫번째, 2일땐 2번째 이런식.
각각 번째수에 있는 수를 프린트하고 for문을 사용해 차례로 더했다.
이제 c배열의 사이즈를 알아보자
sizeof(c)는 c의 자료형 크기를 구하는거임. 몇바이튼지 보여주는거지.
그래서 sizeof(int)로 나누면 int는 4바이트 짜리니까 자동으로 쪼개지겠지?
그럼 총 몇개가 배열에 들어갔는지 알수있는거임
#include <stdio.h>
int main() {
int i;
int x;
int sum = 0;
int sumc = 0;
int b[7] = { 10,20,30,40,50,60,70 };
int c[] = { 100,200,300,400 };
for (i = 0; i < 7; i++) {
printf("array [%d] has the value of = \t", i);
printf("%d \t\n", b[i]);
sum = sum + b[i];
}
printf("sum of all array : %d\n", sum);
printf("----------------------------------\n");
printf("size of array c: %d\n", sizeof(c));
printf("number of array c: %d\n", sizeof(c) / sizeof(int));
}
이 아이는 이차원 배열임. int stu[a][b] 에서 a는 배열의 수(차원)을, b는 배열 안에 있는 수의 개수? 를 말하는거임(아 wording 못하겠다)
그래서 지금 for문을 돌려서 몇번째 배열의 몇번째 숫자에 뭐가 들어있나를 낱낱히 까발릴거임
일단 보면 배열은 2차원이니까 1, 2로 나눠서 출력하게 만들거야.
일단 첫번째 배열에서 첫번째부터 5번째까지 뭐가 들었는지 하나하나 까발려줌
그리고 두번째 배열한테도 똑같은짓을 하면
이런식으로 출력이됨
#include <stdio.h>
int main() {
int stu[2][5] = { {0,1,2,3,4},
{5,6,7,8,9} };
int sum = 0;
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 5; j++) {
printf("array [%d][%d] =\t", i, j);
printf("%d\t\n", stu[i][j]);
sum += stu[i][j];
}
}
printf("sum of the 2-dimensional array: %d", sum);
}
저 밑에서 i=0 에 int를 붙여준 이유는 i 가 선언이 안되있어서 선언하는거임 위에서 이미 말했으면 또 안말해도됨
그럼 저걸 해석하면 0에서부터 10보다 작을때까지, 즉 9까지 i를 하나씩 늘리란거임
그리고 i를 늘릴때마다 *를 출력하라고 적어놈
#include <stdio.h>
int main() {
for (int i=0; i < 10; i++) {
printf("*\n");
}
}
그럼 이렇게 *이 10개 출력됨
응용해서 구구단을 만들어보자
#include <stdio.h>
int main() {
int x, y, z, p;
printf("how many u want to stack:");
scanf_s("%d", &x);
for (y = 1; y <= x; y++)
{
for (z = 1; z <= x; z++) {
printf("%d x %d = %d", z, y, y * z);
if (y * z < 10) {
printf(" ");
}
else {
printf(" ");
}
}
printf("\n");
}
}
#include <stdio.h>
/*void star() {
printf("*************************\n");
return;
}
void line() {
printf("------------------\n");
}
*/
int addNum(int a, int b) {
return a + b;
}
void star2(int type) {
if (type == 1) {
printf("*****************\n");
}
else if (type == 2) {
printf("-----------------\n");
}
else {
printf("그럼뭐임");
}
}
int main() {
printf("안녕하세요\n");
for (int i = 0; i < 3; i++) {
star2(1);
star2(2);
}
int a;
int b;
int c;
printf("함수\n");
printf("숫자 2개 입력\n");
printf("a=");
scanf_s("%d", &a);
printf("b=");
scanf_s("%d", &b);
c= addNum(a, b);
printf("a+b= %d\n",c);
star2(2);
}
대충 수를 받으면 돌려주는 코드
#include <stdio.h>
int star(int type) {
printf("main에서 전달받은 값은 %d임\n", type);
if (type >= 4) {
printf("이거 안됨");
exit(1);
}
else if (type == 1) {
return type;
}
else if (type == 2) {
return type;
}
else {
printf("choose either 1 or 2");
return type;
}
}
int main() {
int num;
printf("type to print:");
scanf_s("%d", &num);
int c;
c = star(num);
printf("%d",c);
}
1. 숫자를 스켄해서 num에 넣음
2. star라는 함수에 들어감 키라키라도키도키
3. num이 4보다 같거나 크면 나가지고 1이면 1 돌려주고 2면 2돌려주고 3이면 1이나 2중에 고르라는 말을 내보낼거임
4. 결과가 c에 들어감
5. c를 프린트함
계산을 해주는 함수를 만들어보자
극한의 비효율 코드의 예시
나도 이거 쓰면서 처음 코드에서 조금 바꾼건데 그게 비효율적이였던거임
근데 이미 많이 써놔서 그걸 바꿀바에야 딴걸 바꾸겠다 해서 이래적었는데
코드상으로는 극한의 비효율인거임 나도 쓰면서 아차싶었음ㅋㅋ 위에서 다 프린트 하고 밑에선 호출만 하면 될것을..
나누기할때 double인 이유는 값이 float로 나와서 int쓰면 안나옴ㅋㅋ
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
double div(double a, double b) {
return a / b;
}
int mult(int a, int b) {
return a * b;
}
int main() {
int a,b,c,d,e;
double f;
printf("함수\n");
printf("숫자 2개 입력\n");
printf("a=");
scanf_s("%d", &a);
printf("b=");
scanf_s("%d", &b);
c = add(a, b);
printf("a+b= %d\n", c);
d = sub(a, b);
printf("a-b= %d\n", d);
e = mult(a, b);
printf("a*b= %d\n", e);
f = div(a, b);
printf("a/b= %lf\n", f);
}
결과
조금은 더 효율적인..코드
#include <stdio.h>
int add(int a, int b) {
printf("a+b= %d\n", a+b);
return;
}
int sub(int a, int b) {
printf("a-b= %d\n", a-b);
return;
}
double div(double a, double b) {
printf("a/b= %fl\n", a/b);
return;
}
int mult(int a, int b) {
printf("a*b= %d\n", a*b);
return;
}
int main() {
int a, b;
printf("함수\n");
printf("숫자 2개 입력\n");
printf("a=");
scanf_s("%d", &a);
printf("b=");
scanf_s("%d", &b);
add(a, b);
sub(a, b);
div(a, b);
mult(a, b);
}
지역변수가 뭐냐 (local variable)
함수 내에만 존재하고 접근이 가능함
중괄호 내에 선언됨
지역 내에서만 유효함
해당 지역을 벗어나면 소멸됨
지역이 다르면 이름이 같아도 됨
전역변수가 뭐냐 (global variable)
전역한 변수임
중괄호 내에 선언안됨
프로그램 어디서든 접근가능
종료할때까지 존재
초기화 안하면 0값
전역이랑 지역이랑 겹치면 지역이 먼저임
정적 지역 변수가 뭐냐 (static local variable)
static 이 붙어있으면 값이 고정되어서 사용됨
선언됨 함수 내에서만 접근가능
#include <stdio.h>
int a, b;//전역변수
int main() {
printf("입력:");
scanf_s("%d%d", &a, &b);
printf("결과 %d",add(a,b));
}
int add() {
static int a = 10;
return a + b;
}
a값을 입력 받아도 이미 10이 정적지역변수에 들어가있어서 계산은 10으로됨.
즉 20이랑 5가 스켄되더라도 10이랑 5로 계산되는거임
초를 시간으로 바꾸는걸 짜보자
#include <stdio.h>
const int H = 60 * 60;
const int M = 60;
void StoHMS(int sec);
int main(void) {
int sec;
printf("초:");
scanf_s("%d", &sec);
StoHMS(sec);
return 0;
}
void StoHMS(int sec) {
int h, m, s;
h = sec / H;
sec = sec % H;
m = sec / M;
sec = sec % M;
s = sec;
printf("[%d 시간],[%d 분],[%d 초]\n", h, m, s);
}
const int 는 선언할때 말고는 값을 더 못넣어서 특정한 값 하나를 지정해서 계속 쓰고 싶을때 쓰면 되는거임.
자 일단 1시간은 1초의 60*60배니까 저렇게 선언해놓고
M는 1초의 60배니까 저래 해 놨음
메인함수에는 함수만 호출하도록 할거임.
자 그럼 Second 를 M이랑 H로 바꾸는 함수를 만들어보자. 일단 sec를 H로 나누면 몇시간이 나오는지 보여주겠지?
그리고 남는 s값(나머지)를 sec에 다시 넣는거임. 이제 그 나머지로는 더이상 H가 안나오니까
나누기 M(60)해서 몇분인지를 구하는거임
그리고 또 남는값을 구해서 분으로도 못만드는 나머지들을 구해서 그걸 sec에 넣고 출력하면 되는거야 (사실 그래보면 s라는 변수선언 안해도 되긴 해 그냥 sec 프린트 하면 되지)
그래서 나온 값을 프린트하면 몇시간 몇분 몇초인지 나온답니다-
#include <stdio.h>
const int H = 60 * 60;
const int M = 60;
void StoHMS(int sec);
int main(void) {
int sec;
printf("초:");
scanf_s("%d", &sec);
StoHMS(sec);
return 0;
}
void StoHMS(int sec) {
int h, m;
h = sec / H;
sec = sec % H;
m = sec / M;
sec = sec % M;
printf("[%d 시간],[%d 분],[%d 초]\n", h, m, sec);
}