#include <stdio.h>
int main(){
int arr[] = {2, 10, 30, 21, 34, 23, 53, 21, 9, 1};
for (int i=0;i<10;i++){
printf("%d 번째 숫자 : %d \n",i+1,arr[i]);
}
return 0 ;
}
1 번째 숫자 : 2
2 번째 숫자 : 10
3 번째 숫자 : 30
4 번째 숫자 : 21
5 번째 숫자 : 34
6 번째 숫자 : 23
7 번째 숫자 : 53
8 번째 숫자 : 21
9 번째 숫자 : 9
10 번째 숫자 : 1
#include <stdio.h>
int main(){
int n,i, avg = 0;
printf("몇 명의 점수를 입력 할건가요? :");
scanf("%d",&n);
int arr[n];
for (i=0;i<n;i++){
printf("%d 번째 학생의 점수:",i+1);
scanf("%d",&arr[i]);
avg = avg + arr[i];
}
avg = avg / n;
printf("반의 평균은 %d\n",avg);
for (i=0;i<n;i++){
printf("%d 번째 학생 : ",i+1);
if (arr[i] >= avg){
printf("합격 \n");
}
else{
printf("불합격 \n");
}
}
return 0 ;
}
몇 명의 점수를 입력 할건가요? :3
1 번째 학생의 점수:10
2 번째 학생의 점수:20
3 번째 학생의 점수:30
반의 평균은 20
1 번째 학생 : 불합격
2 번째 학생 : 합격
3 번째 학생 : 합격
여기서 특이하게 배열의 크기를 지정할 때 특정 값을 준 것이 아니라 변수를 주었는데 이는 원래 C에서는 불가능하다. C++에서는 가능하지만 말이다. 그말은 즉 사실 배열의 크기를 지정할 떄 변수를 사용하면 안된다는 것이다. 이에 대한 내용은 추후 다시 다루어 보자.
약수가 1과 자기자신밖에 없는 숫자, 소수(Prime number) 1000개 구하는 프로그램 만들기
#include<stdio.h>
int main(){
int num = 5;
int prime[1000];
prime[0] = 2;
prime[1] = 3;
int counting;
int arr_num = 2;
for (;;){
counting = 0;
for (int i=0;i<arr_num;i++){
if (num % prime[i] != 0){
counting += 1;
} else {
break;
}
}
if (arr_num ==counting){
prime[arr_num] = num;
arr_num += 1;
}
if (arr_num == 999) break;
//printf("%d \n",num);
num += 2 ;
}
//printf("%d",arr_num);
for (int i = 0;i<arr_num;i++){
printf("%d \n",prime[i]);
}
return 0;
}
... (생략) ...
소수 : 7727
소수 : 7741
소수 : 7753
소수 : 7757
소수 : 7759
소수 : 7789
소수 : 7793
소수 : 7817
소수 : 7823
소수 : 7829
소수 : 7841
소수 : 7853
소수 : 7867
소수 : 7873
소수 : 7877
소수 : 7879
소수 : 7883
소수 : 7901
소수 : 7907
소수 : 7919
상수는 변수와 정반대로 한 번 그 값이 주어지고 나면 다시는 그 값이 변하지 않는다.
const (상수의 형) (상수 이름) = (상수의 값);
이런식으로 사용한다. 실제 예시를 보면
#include <stdio.h>
int main() {
const int a = 3;
printf("%d", a);
return 0;
}
3
상수 같은 경우 한 번 선언을 하면 그 값을 입력하지 않아도 컴파일 오류가 발생하고 그 값을 바꿔도 오류가 발생 한다. 그러면 여기서 이러한 생각을 할 수 있다. 즉 상수는 어떠한 짓을 하여도 값을 바꿀수 없는 불변의 데이터다.
배열의 크기를 상수로 주면 안될까?
앞서 학생의 합격/불합격을 구하는 프로그램을 작성할 때 마지막에 배열의 크기를 변수로 주면 안된다고 했었다.
그렇다면 상수로 줄 수 있을까?? 아래 코드를 보면 그러한 생각이 사라진다.
#include <stdio.h>
int main() {
int b = 3;
const int a = b;
char c[a];
return 0;
}
이는 즉 상수 a
로 배열의 크기를 할당하게 되면 다시 말해서 변수 b
의 크기로 배열의 크기를 할당 할 수 있다는 말이기 때문에 이전에 '배열의 크기는 변수로 할당할 수 없다'라는 말에 모순이 된다.
#include <stdio.h>
int main() {
int arr[3] = {1};
printf("니 값은 모니 : %d", arr[1]);
return 0;
}
니 값은 모니 : 0
여기서 우리는 arr[1]
를 따로 정의 하지 않았는데도 0이 출력되는 것을 볼 수 있다.
왜 이런 결과가 나올까?
int arr[3] = {1};
와 같이 정의한다면 컴파일러가 내부적으로 아래와 같이 생각하기 때문이다.
int arr[3] = {1, 0, 0};
따라서, 자동적으로 우리가 특별히 초기화 하지 않은 원소들에는 0 이 들어가게 된다.
int arr2[5] = {1, 2, 3};
역시, 해보면
int arr2[5] = {1, 2, 3, 0, 0}
과 같이 한 것과 똑같이 된다.