민트맛뚱이
kwangkwang우럭따
민트맛뚱이
전체 방문자
오늘
어제
  • 분류 전체보기 (16)
    • C (12)
    • C programming (2)
    • digital engineering (1)
    • machine learning (0)
    • Data communication (0)
    • signal processing (0)
    • computer architecture (RISC.. (0)
    • project (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
민트맛뚱이

kwangkwang우럭따

뚱이가 알려주는 소프트웨어

(C언어) 중간고사 전 과제들 - (1)
C

(C언어) 중간고사 전 과제들 - (1)

2022. 12. 17. 21:27

안녕하세요~~ 오늘은 중간고사 과제들을 소개해볼게요~~

중요한 것만 추려서 적었습니다.


#1. 대수 비교

//#4. (두 개의 대수 비교),  *주의 : else문은 조건이 붙지 않는다
#include<stdio.h>
int main(){
	int a, b;
	
	printf("comparison:");
	scanf("%d %d",&a, &b);
	
	if(a>b) { /*a가 b보다 클 때*/ 
		printf("a가 더 큽니다");
	}
		else if(a<b) { /*a가 b보다 작을 때*/ 
		printf("b가 더 큽니다");
		}
		else { /*a와 b가 같습니다*/
			printf("a와 b가 같습니다");
		}
}

//추가요소 (세 수 대수 비교)

#include<stdio.h>
int main(){
	int a, b, c;

	printf("정수 입력");
	scanf("%d %d %d", &a, &b, &c);
	
         if(a>b){
		if(a<c)
	        printf("c가 가장 큽니다");
	        else//a>c
	        printf("a가 가장 큽니다"); 
	} 
    else if(b>c){
    	        If(b>a)
    		printf("b가 가장 큽니다");
    	        else //b<a
    	        printf("a가 가장 큽니다"); 
	    }
    else if(c>a){
		if(c>b)
		printf("c가 가장 큽니다");
	        else //c<b
	        printf("b가 가장 큽니다");
	}  		
}

여기 부분은 다이어그램을 통해서 그려나가는게 제일 이해하기는 쉬울거지만, 생각하면서 코드를 짜도 될거에요~ 이 부분을 {: ?} 문법을 통해 간단히 몇 줄로 나타낼 수도 있는데, 한 번 해보시면 좋을거같아요.


#2. 문자

//5. (대문자는 소문자로 소문자는 대문자로)

#include<stdio.h>
#include<ctype.h>
int main(){
	char a[20]; //문자 변수를 지정
	int i, j;
	printf("이름입력\n");
    
	for (i=0; i<20; i++){
		scanf("%c", &a[i]);
		if(a[i]=='\n')
		break;
	} 
   for (i=0; a[i]!='\n'; i++) 
   {
   	if(islower(a[i]))
   printf("%c", toupper(a[i]));
   else
   printf("%c", tolower(a[i])); 
   }	  
//b의 배열의 수를 받으면서 printf와 같은 성질인 putchar와 a의 배열을 실행함.
}

//7. (소문자로 이름을 입력했을 때 대문자로 바꾸는 활용문) 

#include<stdio.h>
#include<ctype.h>
int main(){
	char a[20], b; //문자 변수를 지정
	int i, j;
	printf("이름입력\n");
	
        while(b !='\n'){ //b문자가 공백이 아닐 때
		b=getchar(); //b를 getchar변수로 지정함
		a[j]=b;  //a를 b의 배열을 붙인 변수로 지정함
		j++; //j를 함수 끝날 때 까지 1씩 더해준다
	 // 즉 b가 공백일 때 까지 배열의 수는 증가하면서 내가 원하는 값을 입력함
}
   for (i=0; i<=j; i++ ) 
   {
   putchar(toupper(a[i])); 
   }	  
//b의 배열의 수를 받으면서 printf와 같은 성질인 putchar와 a의 배열을 실행함.
}

//추가 요소 (이름을 집어넣으면 대문자로 출력하는 프로그램 (아스키 코드 이용))
#include<stdio.h>
main()
{
    char s[64]; // 이름을 입력받을 공간 할당
    int gap = 'a' - 'A'; // 대문자 ‘A’와 소문자 ‘a’ 사이의 아스키 값 차이를 gap에 저장
    int i; // for문에 사용할 정수형 변수 i를 선언

    printf("Insert your name : "); // 이름을 입력받음
    gets(s);
    for(i = 0; s[i]; i++) // 배열 s에 들어간 값이 있는 부분에 도달할 때 까지 반복
    {
        if((s[i] >= 'a') && (s[i] <= 'z')) // 만약 소문자라면
		s[i] = s[i] - gap; // gap만큼 빼서 소문자를 대문자로 만든다.
        else if((s[i] >= 'A') && (s[i] <= 'Z')) // 만약 대문자라면	
	    	s[i] = s[i] + gap; // gap만큼 더해서 대문자를 소문자로 만든다.
    }
    printf("%s\n", s); // 배열 s에 저장된 바뀐 문자열을 출력한다.
    return 0; // 프로그램이 끝났으므로 0을 return 하고 종료한다.
}

이 코드는 문자를 받아서 소문자를 대문자로 교환하는 코드입니다.  ctype 헤더파일에 집중하면 되는 코드라고 생각할 수 있죠? header 파일에 중요성을 몰랐던 저는 a-A의 아스키코드의 활용을 통해 귀찮게 코드를 활용했습니다.

하지만 시행착오는 저만 겪으면 충분하다고 보기 때문에, 여러분은 ctype 헤더파일을 사용해서 toupper(), tolower() 함수를 통해 사용하길바래요. 


#3. if문 성적

//8. (성적의 개수와 평균을 나타냄) 

#include<stdio.h>
int main(){
	int g=0, a=0, b=0, c=0, f=0, s=0, i;
	float d; //성적은 소수점도 나올 수 있으니 float변수로 지정
	printf("성적을 입력하시오\n");
	
	for(i=1; i<=10; i++){ //총 10번의 값을 받음
	scanf("%d", &g); 
	
	if(g<=100 && g>=80){
		printf("A입니다\n");
		a++;
	}
		else if(g<80 && g>=60){
		printf("B입니다\n");
		b++;
}
		else if(g<60 && g>=40){
		printf("C입니다\n");
                c++;
}
		else{
		printf("F입니다\n");
                f++;
} 
                s+=g;
                d=s/10;
}
                printf("A:%d, B:%d, C:%d, F:%d\n", a, b, c, f);
		printf("평균은: %f", d);
}

//추가요소 (중간고사 2018)

#include<stdio.h>
int main(){
 int a, i, b=0, c=0, d=0, e=0;
 printf("10개의 숫자를 입력 : ");
 for(i=0; i<10; i++){
 scanf("%d", &a);
    if(a>=0 && a<=24)
     b++;
    else if(a>=25 && a<=49)
        c++;
        
    else if(a>=50 && a<=74)
        d++;

    else if(a>=75 && a<=100)
        e++;
}
printf("0 - 24 : %d\n 25 - 49 : %d\n 50 - 74 : %d\n 75 - 100 : %d\n", b, c, d, e);
}

if문을 활용해서 성적을 입력받으면, 그 점수에 해당되는 사람의 숫자를 뽑는 코드죠, 여기서는 scanf와 if문 연습 할 수 있기 때문에..적었던거 같아요


#4. 이름 입력, 알파벳 개수, 위치 확인

//10. (이름을 입력하고 알고 싶은 이름의 알파벳 하나를 받고 그 개수와 위치를 알 수 있음)

#include<stdio.h>
main()
{
   int i, count=0, k;
   char a[20], n;
   printf("enter the name:");

   for(i=0; i<20; i++)
   {
    scanf("%c", &a[i]); //for문이 20안으로 반복되면서 I의 값이 계속 저장됨 
        if (a[i] == '\n') //a가 띄어쓰기가 된다면
        break; //멈춘다
   }
    printf("what do you want alphabet? ");
    scanf("%c", &n); //입력했던 것 중 알고 싶은 개수를 입력한다
    printf("\n");
   
   for(i=0; a[i] != '\n'; i++) // 문자열에서 줄바꿈 이전까지 반복(문자열 길이만큼 반복)
      {
         if(a[i] != ' ' && a[i] !='\n') // 만약 띄워쓰기나 줄바꿈이 아니라면
         k++; // 문자라는 소리이므로 i++ 실행
      }  
      
    for (i=0; i<20; i++)
	{
      if (a[i] == n) //배열이 알고 싶은 알파벳이 나온다면
	  {
        printf("the poosition of letter %d\n", i+1); // 그 글자에 위치를 알 수 있음
        count++; //그 수를 센다
   }  
   }
    printf("%c letter %d count\n.", n, count);
    printf("letter strlen %d", k);
}

이 코드는 문자열을 입력하고, 자신이 알고 싶은 알파벳을 입력하면 어느 위치에 있는지 알 수 있고,  추가적으로 그 알파벳이 몇 개인지 문자열이 몇 개의 알파벳으로 이루어져있는지 알 수 있습니다~~ 이 코드도 헤더파일을 활용하면 쉽게 사용가능하니 google을 통해 찾아보면 되는데, "c언어 문자열 길이"라고 치면 바로 나올거에요. 코딩에 기본은 구글링이니깐, 구글링하는게 나쁜게 아니니깐 꼭 활용하세요


 

#5. 구구단 출력

//17. 구구단

#include<stdio.h>
int main(){
	int i, j;
	
	printf("구구단을 나타냅시다\n");
	for(i=1; i<11; i++){
		for(j=1; j<13; j++){
			printf("%4d", i*j);
		}
			printf("\n");
	}
}


//부가요소 (do while을 활용한 구구단)

#include <stdio.h>
int main()
{
	int i=1, j;         
	do{
		j=1;
		do{
			printf("%4d ",i*j);
			j++;
		}
		while(j<10);// 10만 변경하면 됨
		printf("\n");
		i++;
	}
	while(i<10); //10만 변경하면 됨	
}

for문의 기본 시작!!, do while문의 시작!!의 기본이라고 생각하면 되죠 구구단을 출력하는 것이고, 9단까지 출력해요. 여기서 제일 주목해야하는 것은 %4d이에요. 출력에서 기본은 양식, 양식이 존재하는게 편할거고, 그것이 디자인에 기본이 될거에요. 이것이 자바스크립트로 치면 css라고 생각하면 됩니다


#6. %[^\n]s 활용

//19. (띄어쓰기)

#include<stdio.h>
int main(){
	char a[10];
	printf("이름입력:");
	scanf("%[^\n]s",&a);

	printf("내 이름은:%s",a);
}

이를 활용하면, 우리는 띄어쓰기를 포함한 문자열을 입력받을 수 있어요~~ 전 자주 활용했는데...사람들은 자주 사용 안 하더라고요,, ^\n이 뜻은 enter값을 받으면, scanf 값을 받지 않겠다는 소리입니당. 이거를 활용하면 여러 scanf 활용이 가능하기 때문에 자주 사용하세요!!


이런식으로 중간고사 대비를 했습니다.

이번 과제는 문자열과 대수비교를 중점적으로 담았습니다. 제가 중간고사 전까지 헷갈렸던 문법들이나 시행착오를 통해 알게된 문법들이 중점적이고 너무 많이 담으면 보기 힘들거 같아서 2편으로 돌아올게요

'C' 카테고리의 다른 글

(C언어) 중간고사 전 과제들 - (3)  (2) 2022.12.17
(C언어) 중간고사 전 과제들 - (2)  (0) 2022.12.17
(C언어) 중간고사 전 과제들  (0) 2022.12.17
C언어 공부법  (0) 2022.12.17
software 첫걸음  (0) 2022.12.17
    민트맛뚱이
    민트맛뚱이
    암 벅

    티스토리툴바