[c언어] 기초프로그래밍 중간고사 준비 (6~9번)
6번
그냥 계산하면 되는 문제이다.
#include <stdio.h>
#include <math.h>
// 절댓값 함수 사용법
// int : abs
// long : labs
// double : fabs
int main(void){
int x1,x2,x3,y1,y2,y3;
double wide=0;
printf("(x1,y1)을 입력하세요 :");
scanf("%d %d",&x1,&y1);
printf("(x2,y2)을 입력하세요 :");
scanf("%d %d",&x2,&y2);
printf("(x3,y3)을 입력하세요 :");
scanf("%d %d",&x3,&y3);
wide =(x1*y2+x2*y3+x3*y1)-(x2*y1+x3*y2+x1*y3);
printf("삼각형의 넓이 : %f \n",fabs(wide/2));
return 0;
}
역시.. 그냥 계산만 하면 안됐다.
절댓값 함수 abs로만 접근했더니 double을 저장못해서 뭐지 하고 알아보니 double형에는 fabs를 사용해야했다.
이런거 찾는 능력이 중요할것같네..
7번
rand를 써줘야한다.
그렇게 하기위해서 stdlib.h를 불러와준다.
그런데, seed를 매번 바뀌는 것이 아니라 20을 주면 되므로 time은 안가져와도 될것같다.
그리고 배열을 사용안하면.. 음 노가다가 되겠군
#include <stdio.h>
#include <stdlib.h>
int main(void){
int num,dice;
double d1=0,d2=0,d3=0,d4=0,d5=0,d6=0;
printf("주사위 던질 횟수를 입력하세요 : ");
scanf("%d",&num);
srand(20);
for(int i=0;i<num;i++){
dice = rand()%6+1;
printf("%d ",dice);
if(dice == 1)
d1+=1;
else if(dice == 2)
d2+=1;
else if(dice == 3)
d3+=1;
else if(dice == 4)
d4+=1;
else if(dice == 5)
d5+=1;
else
d6+=1;
}
printf("\n");
//%% : %출력
printf("1 횟수 : %.f, 확률 : %.1f%% \n",d1,d1/num*100);
printf("2 횟수 : %.f, 확률 : %.1f%% \n",d2,d2/num*100);
printf("3 횟수 : %.f, 확률 : %.1f%% \n",d3,d3/num*100);
printf("4 횟수 : %.f, 확률 : %.1f%% \n",d4,d4/num*100);
printf("5 횟수 : %.f, 확률 : %.1f%% \n",d5,d5/num*100);
printf("6 횟수 : %.f, 확률 : %.1f%% \n",d6,d6/num*100);
return 0;
뭐,, 꽤나 이쁘게 나온다
형 변환이 안먹혀서 그냥 d1에다가 doubl을 줬다.
뭐 줘도 틀린건 아니니깐
교수님 코드는 if문대신 switch문을 사용하셨는데..움..
난 이프문 할련다.
8번
비슷한 문제이다.
srand로 seed받고, 랜덤으로 1000개 수 받는데 while문 쓰면 되겠다. 근데 평균과 표준편차를 구해야하므로 반복문 끝나기전에 총합과 제곱의 합을 저장하는 변수를 만들어준다.
그렇게 끝나고 나서 평균구하고 제곱의 평균구하고 표준편차구하면 될것같다.
내 코드
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void){
int cnt=0;
int num;
double avg1=0,avg2=0,total1=0,total2=0,sigma=0;
printf("1000개 난수는 다음과 같다. \n");
srand(100); // seed 10
// 난수 1000개 생성
while(cnt<1000){
num = rand()%10; // 0~9
printf("%d ",num);
total1+=num; //총합 구하기
total2+=num*num; //제곱의 합
cnt++;
}
printf("\n\n");
avg1 = total1/1000;
avg2 = total2/1000;
// 평균의 제곱
// 제곱의 평균
sigma = sqrt(avg2-avg1*avg1);
printf("이 난수의 평균값은 %.3f 이며 표준편차는 %.3f 이다.\n",avg1,sigma);
return 0;
}
무난쓰..
교수님 코드
int main(void) { int i, n;
double sum = 0, avg, result = 0;
srand(RANDOM_SEED_2);
printf("%d개 난수는 다음과 같다.\n", MAXSAMPLE); for (i = 0; i < MAXSAMPLE; i++) {
n = rand() % 10; printf("%d ", n); sum += n;
}
avg = sum / MAXSAMPLE;
printf("\n\n이 난수의 평균값은 %.3lf 이며 ", avg);
sum = 0; srand(RANDOM_SEED_2);
for (i = 0; i < MAXSAMPLE; i++) {
}
n = rand() % 10;
sum += pow(n - avg, 2);
avg = sum / MAXSAMPLE;
result = sqrt(avg);
printf("표준편차는 %.3lf 이다.\n", result);
return 0;
}
음 제곱의평균빼기 평균의 제곱방식이 아니라 평균을 뺀 값들을 활용하여 표준편차를 구하셨다..
코드적으로 훨 깔끔하긴하다..!!
9번
음... 모르겠다.
비트연산이 꽤나 나오네
비트연산 마스터하고 시험치자
교수님 코드
#include <stdio.h>
int main(void){
int num1,num2,result;
int shitftCnt=0,plusCnt=0;
char opt;
printf("곱셈식을 입력하시오 : ");
scanf("%d %c %d",&num1,&opt,&num2);
for(int i=2;i<num2;i<<=1){
shitftCnt++;
}
for(int i=1;i+(1<<shitftCnt)<=num2;i++){
plusCnt++;
}
result = (num1 << shitftCnt ) + num1 * plusCnt;
printf("곱한 결과값 = %d \n",result);
printf("bit 동작 횟수 : %d \n",shitftCnt);
printf("plus 연산 횟수 : %d \n",plusCnt);
return 0;
}
총평
전반적으로 알고리즘을 묻는 문제가 많이 나온다.
그리고 무조건 웹서핑을 통해서 해결할 수 있는 문제들인 것같다...
지금 교수님이 교육해주신 수준안의 문제들은 아닌 것 같다.
그리고 교육범위 내에서는 비트연산이 꽤나 까다로운 파트이기에 비트연산관련 문제를 많이 내신 것같다.
시험 전날에 비트연산마스터 하고 관련 예제들을 풀어보고 기초적인 알고리즘같은것들을 확인하고 가면 될것같다.
딱히 막 많이 어려운 문제는 없는 것같다.
Author And Source
이 문제에 관하여([c언어] 기초프로그래밍 중간고사 준비 (6~9번)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seochan99/c언어-기초프로그래밍-중간고사-준비-69번저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)