プログラミング+α学習ブログ

勉強したことの備忘録です。

二つの整数の値を交換するプログラム

#include <stdio.h>

int main(void)
{
    int n1, n2, tmp;
    int *np1 = &n1, *np2 = &n2;
    
    puts("二つの整数を入力してください。");
    printf("整数A:"); scanf("%d", &n1);
    printf("整数B:"); scanf("%d", &n2);
    
    tmp = *np1;
    *np1 = *np2;
    *np2 = tmp;
    
    puts("これらの値を交換しました。");
    printf("整数Aは%dです。\n", n1);
    printf("整数Bは%dです。\n", n2);
    
    return (0);
}

実行結果

二つの整数を入力してください。
整数A:24
整数B:45
これらの値を交換しました。
整数Aは45です。
整数Bは24です。

静的記憶域期間が与えられたオブジェクトのアドレスを表示するプログラム

#include <stdio.h>

int nx;

int main(void)
{
    static double dx;
    static int vc[3];
    
    printf("nxのアドレス:%p\n", &nx);
    printf("dxのアドレス:%p\n", &dx);
    printf("vc[0]のアドレス:%p\n", &vc[0]);
    printf("vc[1]のアドレス:%p\n", &vc[1]);
    printf("vc[2]のアドレス:%p\n", &vc[2]);
    
    return (0);
}

実行結果

nxのアドレス:0x10000102c
dxのアドレス:0x100001018
vc[0]のアドレス:0x100001020
vc[1]のアドレス:0x100001024
vc[2]のアドレス:0x100001028

文字列中の数学文字を削除するプログラム

#include <stdio.h>

/*--- 文字列str中の数字文字を削除する ---*/
void del_digit(char str[])
{
    int i = 0, idx = 0;
    
    while (str[i]) {
        if (str[i] < '0' || str[i] > '9')
            str[idx++] = str[i];
        i++;
    }
    str[idx] = '\0';
}

int main(void)
{
    char str[100];
    
    printf("文字列を入力してください:");
    scanf("%s", str);
    
    del_digit(str); // 数字文字削除
    
    puts("数字文字を削除しました");
    printf("str=%s\n", str);
    
    return (0);
}

実行結果

文字列を入力してください:AB1C9
数字文字を削除しました
str=ABC

文字列を空文字列にするプログラム

#include <stdio.h>

/*--- 文字列strを空文字列にするプログラム ---*/
void null_string(char str[])
{
    str[0] = '\0';
}

int main(void)
{
    char str[] = "ABC";
    
    printf("str=%s\n", str);
    
    null_string(str);   // 文字列strを空文字列にする
    
    puts("文字列strを空文字列にしました。");
    printf("str=%s\n", str);
    
    return (0);
}

実行結果

str=ABC
文字列strを空文字列にしました。
str=

文字列の配列を表示するプログラム

#include <stdio.h>

/*--- 配列として実現した文字列を表示 ---*/
void put_strary(const char st[][6], int n)
{
    int i;
    for (i = 0; i < n; i++)
        printf("st[%d]=\"%s\"\n", i, st[i]);
}

int main(void)
{
    char cs[][6] = {"LISP", "Ada", "C++"};
        
    put_strary(cs, 3);
        
    return (0);
}

実行結果

str=SEC
文字列strを逆順に並べ替えました。
str=CES

文字列を逆順に格納するプログラム

#include <stdio.h>

/*--- 文字列strの長さを返す ---*/
unsigned str_length(const char str[])
{
    unsigned len = 0;
    while (str[len])
        len++;
    return (len);
}

/*--- 文字列を逆順に並べ替える ---*/
void rev_string(char str[])
{
    int i;
    int len = str_length(str);
    for (i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len-i-1];
        str[len-i-1] = temp;
    }
}

int main(void)
{
    char str[100];
    
    printf("str=");
    scanf("%s", str);
    
    rev_string(str);    // 文字列を逆順に並べ替える
    
    puts("文字列strを逆順に並べ替えました。");
    printf("str=");
    puts(str);
    
    return (0);
}

実行結果

str=SEC
文字列strを逆順に並べ替えました。
str=CES

文字列を後ろから逆に表示するプログラム

#include <stdio.h>

/*--- 文字列strの長さを返す ---*/
unsigned str_length(const char str[])
{
    unsigned len = 0;
    while (str[len])
        len++;
    return (len);
}

/*--- 文字列を逆から表示 ---*/
void put_rstring(const char str[])
{
    unsigned i = str_length(str);
    while (i-- > 0)
        putchar(str[i]);
}

int main(void)
{
    char str[100];
    
    printf("文字列を入力してください:");
    scanf("%s", str);
    
    printf("逆から読むと");
    put_rstring(str);
    puts("です。");
    
    return (0);
}

実行結果

文字列を入力してください:SEC
逆から読むとCESです。