読者です 読者をやめる 読者になる 読者になる

苦C一周した。まだまだだ。

C/C++

一周しましたがコレ、復習しないとだめだな。最初の方のこと忘却の彼方に置き忘れておる。
練習問題が解答できるようにならないとですね。
2日勉強したソースコードの断片が以下。汚い。

#include <stdio.h>
#include <memory.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "sum.h"
#include "variouscaluculation.h"

/* 定数 */
#define TAX 0.03

/* マクロ */
#define PRINT_TEMP printf("temp = %d\n",temp);
// 引数があるパターン
#define PRINTM(X) printf("%d\n",X);
// 決まりきった数式などに使われる
#define GET_TAPEXOID_AREA(A,B,H) (((A) + (B)) * (H) / 2);




/* prototype */
//int sum(void);
int sum_max(int);
int fact(int);
void func(int *pvalue);
int getaverage(int data[]);


/* struct */
struct student {
    int year;	/* 学年 */
    int clas;	/* クラス */
    int number;	/* 出席番号 */
    char name[64];	/* 名前 */
    double stature;	/* 身長 */
    double weight;	/* 体重 */
};
void print_student(struct student *s);
typedef struct{
    int year;
    int clas;
} student_struct;

/* enum */
enum STATUS {
    NORMAL,
    POISON,
    SPARK,
};

/* main */
int main(void){
    /*
     printf("日本語表示\tできるのか?\n");
     printf("日本語\tできるのか?\n");
     int syo = 40 / 13;
     int msyo= 40 % 13;
     printf("40/13=%d 余り %d\n",syo,msyo);
     printf("%5d\n",100);
     printf("%05d\n",100);
     double pi = 3.14159;
     printf("%6.2f\n",pi);
     printf("123456\n");
     int price_juice = 198;
     int price_milk  = 138;
     int oazukari = 1000;
     int daikin = (int)((price_juice * 1 + price_milk * 2) * 1.05);
     int oturi = oazukari - daikin;
     printf("%d\n",oturi);

     // section 6
     // accept user input
     int data;
     double data_double;
     printf("input number...>");
     scanf("%d",&data);
     printf("input double number...>");
     scanf("%lf",&data_double);
     printf("%d\n",data);
     printf("%f\n",data_double);
     printf("end of program.");
     */
    /*
     int point;
     printf("点数は?>");
     scanf("%d",&point);
     if(point >= 60){
     printf("おめでとうござます。合格です。\n点数補正を行います。\n");
     point += 20;
     if(point > 100){
     point = 100;
     }
     }
     printf("補正後の点数は%3dです\n",point);
     */
    /*
     // switch
     int no;
     scanf("%d",&no);
     switch (no) {
     case 0:
     printf("aaaaa\n");
     break;
     case 1:
     printf("BBBBBB\n");
     break;
     default:
     printf("no code here...");
     break;
     }
         */
    /*
     for(int i=0,len=100;i<len;i++){
     printf("count%2d\n",i);
     }
     for(int i=0;;){
     printf("counti=>%3d\n",i);
     i++;
     if (i>100) {
     break;
     }
     }
     sum();
     sum_max(304);
     printf("%d\n",fact(10));

     int ar[100];
     ar[10] = 100;
     printf("%d\n",ar[10]);
     int ar2[10] = {10,20,30};
     printf("%d\n",ar2[2]);

     //for文を使わない配列のコピー
     // #include <memory.h>
     int ar3[10];
     for(int i=0,len=sizeof(ar3)/sizeof(ar3[0]);i<len;i++){
     ar3[i] = i*10;
     }
     for(int i=0,len=sizeof(ar3)/sizeof(ar3[0]);i<len;i++){
     printf("%d\n",ar3[i]);
     }
     int ar4[10];
     memcpy(ar4, ar3, sizeof(ar3));
     for(int i=0,len=sizeof(ar4)/sizeof(ar4[0]);i<len;i++){
     printf("%d\n",ar4[i]);
     }

     // 文字列
     char c = 'A';
     printf("%c\n",c);

     int suuti;
     if(isdigit(c)){
     suuti = c - '0';
     }else{
     suuti = 0;
     }
     printf("%d\n",suuti);

     // 文字「列」
     char retu[] = {'h','g','\0'};
     printf("%s\n",retu);

     //文字列リテラル
     char str[] = "mario";
     printf("%s\n",str);

     char str2[] = "145";
     int suuti2 = atoi(str2);
     printf("%d\n",suuti2);

     char str3[10];
     strcpy(str3 , "marioo");
     printf("%s\n",str3);
     */
    /*
     stdlib.h atoi
     string.h strcpy
     strncpy
     strcat
     strlen

     stdio.h    sprintf
     数値と同様、文字列を入力する場合にもscanf関数を使うことが出来ます。文字列を入力する場合、scanf関数で%s指定子を指定します。ただし、配列名の前に&を付けません
     "%32s"
     int i;
     for (i = 0;str[i] != '\0';i++);
     */
    /*
     int i1,i2,i3;
     printf("i1(%p)\n",&i1);
     printf("i2(%p)\n",&i2);
     printf("i3(%p)\n",&i3);
     */
    /*
    int *p_ = NULL;
    int *p,i;
    p = &i;
    i = 30;
    *p = 10;
    printf("%d\n",i);

    int hoge = 10;
    func(&hoge);
    printf("%d\n",hoge);

    int ar[] = {0,1,2,3,4,5,6,7,8,9};
    int average = getaverage(ar);
    printf("%d\n",average);

    struct student s1;
    s1.clas = 1;
    strcpy(s1.name, "aaaaa");

    student_struct s2;
    s2.clas = 3;

    student_struct *ps2;
    ps2 = &s2;
    printf("%d\n",ps2->clas);

    FILE *file;
    file = fopen("/Users/seijiro/tmp/test.txt","a+");
    fprintf(file,"Hello,WOrld\n");
    fclose(file);

    const double EXCISETAX = 0.05;
    printf("%f\n",10 * EXCISETAX);
    enum STATUS stat;
    stat = POISON;
    printf("%d\n",stat);
    */
    /*
    // malloc / realloc
    int *heap;
    int size = 100;
    heap = (int *)malloc(sizeof(int) * size);
    for(int i =0;i< size ; i++){
        heap[i] = i;
    }
    PRINTM(heap[5]);
    heap = realloc(heap,sizeof(int) * 1000);

    struct student *student_heap;
    student_heap = (struct student *)malloc(sizeof(struct student)*10);
    if(student_heap == NULL){
        printf("NULLだよ\n");
    }
    struct student *s;
    for(int i =0;i<10;i++){
        s = &student_heap[i];
        (*s).clas = i+1;
        //print_student(s);
    }
    for(int i =0;i<10;i++){
        s = &student_heap[i];
        print_student(s);
    }

    print_student(&student_heap[5]);

    free(student_heap);
    free(heap);
    */
    int value;
    value = sum(50,100);
    printf("%d\n",value);

    int ar[] = { 3,4,43,5,6,6,43,5,4,4,5,6,6,4,4,5};
    SortBubble(ar, sizeof(ar) / sizeof(int));
    for (int i=0,len=sizeof(ar) / sizeof(int); i<len; i++) {
        printf("%d\t",ar[i]);
    }
    printf("\n");
    return 0;
}

void print_student(struct student *s){
    printf("クラスは:");
    printf("%d\n",(*s).clas);
}
/*
int sum(void){
    printf("%d\n",(1+100) * 100 / 2);
    return 0;
}
*/
int sum_max(int max){
    printf("%d\n",(1+max) * max / 2);
    return 0;
}

int fact(int value){
    if(value <= 1){
        return 1;
    }else{
        return value * fact(--value);
    }
}

void func(int *pvalue){
    (*pvalue)++;
}

int getaverage(int data[10]){
    int i,average = 0;
    for(i=0;i<10;i++){
        average += data[i];
    }
    return average/10;
}