'프로그래밍/뇌를자극하는 "C"(예제,문제)' 에 해당되는 글 68건
문제) 다음 배열에서 최소값을 구하여 출력하는 프로그램을 작성합니다. 단, 배열의 값을 참조하여 최소값을 리턴하는 함수를 만들고 호출하여 작성합니다. - double ary[] = {1.5, 20.1, 16.4, 2.3, 3.5}; 프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)</FONT> less..
#include <stdio.h>
double min(double *); //최소값을 구하여 리턴역할을 해주는 함수 선언
int main(){ double ary[] = {1.5, 20.1, 16.4, 2.3, 3.5}; double small; //ary의 배열에 최소값을 넣어주는 변수 small=min(ary); //최소값 구하는 함수 printf("배열의 최소값 : %.1lf\n",small);
return 0; }
double min(double *ap){ //최소값을 구하여 리턴해준다. int i; double small=ap[0]; //small변수에 ap배열 첫번째 값을 넣어준다.
for(i=0; i<5; i++){ if(small > ap[i]){ //small변수가 ap[i]번지보다 크면 small=ap[i]; //small에다가 sp[i]번지의 값을 넣어준다. } } return small; //최소값을 리턴한다. }
less..
문제) -최근 10년간의 경제성장률을 입력 받아서 배열에 저장합니다. -평균 경제성장률을 계산하여 출력합니다. -평균을 초과한 해는 몇 번이었는지 출력합니다. 세 가지 모두 함수를 만들어서 처리합니다. 물론 10년간의 데이터를 저장할 배열은 메인함수에 선언해야 합니다. 다른 특정 함수에 배열을 선언하면 그 함수가 리턴된 후에는 다른 함수에서 그 값들을 사용할 수 없을 것입니다. 데이터는 90년대 한국의 경제성장률을 사용합시다.
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
9.3
5.3
5.7
8.4
8.1
4.8
2.1
-9.1
9.4
3.6
프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)</FONT> less..
소스) ">문제) ">
#include <stdio.h>
void input_growth(double *); //배열에 데이터를 입력하는 함수 double average_growth(double *); //평균 경제성장률을 구하는 함수 int extra_growth(double *, double); //평균을 초과한 횟수를 계산하는 함수
int main(){ double growth[10]; //배열선언 double avg; //평균 경제성장률을 저장할 변수 int ext; //초과 횟수를 저장할 변수 input_growth(growth); //데이터를 입력한다. avg=average_growth(growth); //평균 경제성장률을 구하여 리턴한다. ext=extra_growth(growth, avg); //평균을 초과한 횟수를 구한다.
printf("평균 경제성장률 : %.2lf\n", avg); //평균 출력 printf("평균 경제성장률을 초과한 횟수 : %d\n", ext); //초과 횟수 출력 return 0; }
void input_growth(double *gp){ //배열이 double형 배열이므로 매개변수로 //double포인터 변수를 선언한다. int i; //반복 제어변수.
printf("10년간 경제성장률을 입력하세요. \n"); for(i=0; i<10; i++){ //배열 요소의 개수만큼 반복 scanf("%lf", gp+i); //scanf 함수에는 포인터를 직접 전달한다. } }
double average_growth(double *gp){
double tot=0; //합을 누적할 변수, 0으로 초기화한다. int i;
for(i=0; i<10; i++){ tot += gp[i]; //포인터변수로 배열표현을 사용 //tot = tot + gp[i], 복합대입연산자 사용 } return tot/10; //평균을 구하여 리턴한다. }
int extra_growth(double *gp, double avg){ //평균보다 초과한 횟수를 구하기 //위해 평균도 전달인자로 받는다. int count=0; //초과 횟수를 누적시킬 변수. int i;
for(i=0; i<10; i++){ if(gp[i]>avg){ count++; //배열의 값이 평균보다 큰 횟수를 센다. } } return count; }
less..
문제) 포인터변수를 사용하여 다음 배열의 값들을 거꾸로 출력하는 프로그램을 작성합니다. - double ary[] = {1.5, 20.1, 16.4, 2.3, 3.5}; 프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)<br /></FONT> less..
소스) ">소스) ">
#include <stdio.h>
int main(){ double ary[] = {1.5, 20.1, 16.4, 2.3, 3.5}; double *ap=ary; int i,size;
size=sizeof(ary)/sizeof(ary[0]); for(i=size-1; i>=0; i--){ //거꾸로 반복된다. printf("%5.1lf",ap[i]); } printf("\n");
/*책의있는 답안지에 있는 소스다. 괜찮군.... double ary[] = {1.5, 20.1, 16.4, 2.3, 3.5}; double *ap=ary+4; //포인터변수가 마지막 배열요소를 가리키게 한다. int i; //반복 제어변수
for(i=0; i<5; i++){ //배열요소의 개수만큼 반복 printf("%5.1lf",*ap); //포인터변수가 가리키는 배열요소의 값을 출력 ap--; //ap=ap-1, 포인터변수가 앞의 배열요소를 가리키게 한다. } printf("\n"); */ return 0; }
less..
문제) 다음 배열의 평균값을 구하여 출력하는 프로그램을 작성합니다. 단, 배열요소를 참조할 때는 배열명에 정수값을 더하는 포인터표현을 사용하며, 평균은 소수점 이하 둘째자리까지 출력합니다. -double ary[] = {1.5, 20.1, 16.4, 2.3, 3.5}; 프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)<br /></FONT> less..
소스) ">소스) ">
#include <stdio.h>
int main(){ double ary[]={1.5, 20.1, 16.4, 2.3, 3.5}; double total,avg; int i,size; size=sizeof(ary)/sizeof(ary[0]); //ary배열에 갯수를 구한다.
for(i=0; i<size; i++){ total += *(ary+i); //*포인터표현 }
avg=total/size;
printf("평균값 : %.2lf\n", avg);
return 0; }
less..
문제) 키보드로부터 임의의 숫자 세 개를 입력 받은 후에 큰 숫자부터 차례로 출력하는 프로그램을 작성합니다. 단 main 함수가 다음과 같이 작성되어 있을 때 line_up 함수를 정의하여 프로그램을 완성합니다. 필요하다면 exchange 함수도 작성하여 사용합시다. int main(){ double max,mid,min;
printf("숫자 세 개를 입력하세요 : "); scanf("%lf%lf%lf",&max,&mid,&min);
line_up(&max, &mid, &min); //세 변수의 값을 비교하여 바꿔주는 함수 호출 printf("큰 수부터 차례로 출력하면 : %lf %lf %lf\n", max, mid, min); return 0; } 프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)</FONT> less..
#include <stdio.h>
void line_up(double *, double *, double *); //함수선언 void exchange(double *, double *); //함수선언 int main(){ double max,mid,min;
printf("숫자 세 개를 입력하세요 : "); scanf("%lf%lf%lf",&max,&mid,&min);
line_up(&max, &mid, &min); //세 변수의 값을 비교하여 바꿔주는 함수 호출 printf("큰 수부터 차례로 출력하면 : %lf %lf %lf\n", max, mid, min); return 0; }
void line_up(double *xp, double *dp, double *np){ //큰수인지 작은수인지 비교하는 함수 if(*xp<*dp){ exchange(xp,dp); } if(*xp<*np){ exchange(xp,np); } if(*dp<*np){ exchange(dp,np); } }
void exchange(double *xp, double *yp){ //큰수부터 자리를 이동해주는 함수 double temp;
temp=*xp; *xp=*yp; *yp=temp; }
less..
문제) 두 개의 double형 변수 a,b에 다음과 같이 값이 저장되어 있다고 합시다. double a=1.3; double b=1.7; 두 변수a,b를 가리키는 포인터변수를 사용하여 두 변수의 값을 바꾸는 프로그램을 작성합니다.(두 변수의 값을 바꾸는 방법은 연습문제[9-2-3]을 참고하세요.) 프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)</FONT> less..
#include <stdio.h>
int main(){ double a=1.3; double b=1.7; double *ap,*bp; double temp;
printf("바꾸기 전의 a,b의 값 : %.1lf %.1lf\n",a,b);
ap = &a; bp = &b;
temp = *ap; *ap = *bp; *bp = temp;
printf("바꾼 후의 a,b의 값 : %.1lf %.1lf\n",a,b);
return 0; }
less..
문제) 다음과 같이 두 개의 문자배열을 선언합니다. char str1[]="There is no royal road to learning."; char str2[80]; str1에 저장되어 있는 문자열을 str2에 복사하여 출력하는 프로그램을 작성합니다. 프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)</FONT> less..
문제) ">문제) ">
#include <stdio.h>
int main(){ char str1[] = "There is no road to learning."; char str2[80]; int i,size;
size=sizeof(str1)/sizeof(str1[0]);
for(i=0; i<size; i++){ str2[i]=str1[i]; }
printf("%s\n",str2);
return 0; }
less..
문제) 예제 9-3-1에서 구한 단어의 길이를 이용하여 입력된 단어를 뒤집어서 출력해 봅시다. 프로그램을 실행하면 다음과 같이 실행될 것입니다.
<FONT color=#0000ff>소스)</FONT> less..
소스) ">
#include <stdio.h>
int main(){ char ary[50]; int i,size,cnt=0; char a,b,temp;
printf("단어를 입력하세요 : "); scanf("%s",ary); size=sizeof(ary)/sizeof(ary[0]); //문자열사이즈를 구한다.
for(i=0; i<size; i++){ if(ary[i] == '\0'){ //만약에 ary[i]번지의 값이 널문자라면 반복문을 빠져나간다. break; } cnt++; } printf("단어를 뒤집으면 : "); for(i=cnt-1; i>=0; i--){ //cnt로 구한 널문자를 뺀 총 길이부터 꺼꾸로 반복한다. printf("%c",ary[i]); //-1은 만약 apple가 5자인데 문자열은 0부터시작돼서 // -1을 해줘야한다. 그럼 문자열은 0~4 } printf("\n");
return 0; }
less..
문제) 키보드로부터 임의의 단어를 입력 받아서 문자배열에 저장합니다. 저장된 단어의 길이를 계산하여 단어와 함께 출력하는 프로그램을 작성합니다. 문자열의 앞에서부터 널문자가 아닌 문자의 개수를 세면 될 것입니다. 프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)</FONT> less..
소스) ">
#include <stdio.h>
int main(){ char ary[50]; int i,size,cnt=0;
printf("단어를 입력하세요 : "); scanf("%s",ary); size=sizeof(ary)/sizeof(ary[0]); //문자열사이즈를 구한다.
for(i=0; i<size; i++){ if(ary[i] == '\0'){ //만약에 ary[i]번지의 값이 널문자라면 반복문을 빠져나간다 . break; } cnt++; }
printf("%s단어의 길이는 %d자입니다. \n",ary,cnt);
return 0; }
less..
문제) 배열에 임의의 숫자를 초기화한 후에 각 숫자들의 위치를 반대로 바꾸는 프로그램을 작성합니다. 배열은 하나만 사용하며 배열의 크기가 바뀌더라도 수정할 필요가 없도록 작성합니다. 두 변수의 값을 바꾸기 위해서는 임시변수를 하나 준비하여 다음과 같이 처리합니다. 프로그램을 실행하면 다음과 같이 수행될 것입니다.
<FONT color=#0000ff>소스)</FONT> less..
#include <stdio.h>
int main(){ int ary[5]={1,2,3,4,5}; int i,r; int temp; int size;
size = sizeof(ary)/sizeof(ary[0]);
printf("처음 배열에 저장된 값 : "); for(i=0; i<size; i++){ printf("%d ",ary[i]); } printf("\n");
for(i=0; i<size/2; i++){ //바꾸는 횟수는 배열요소의 개수의 절반이다. r=size-1-i; //왼쪽 같과 교환할 오른쪽 값의 위치를 계산한다. temp=ary[i]; //두 배열요소의 값을 교환한다. ary[i]=ary[r]; ary[r]=temp; }
printf("바뀐 배열에 저장된 값 : "); for(i=0; i<size; i++){ printf("%d ", ary[i]); } printf("\n"); return 0; }
less..
« 2025/05 »
일
월
화
수
목
금
토
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31