6. Arrays and strings

Source code

配列x[]の10倍を配列y[]に格納するプログラム

#include <stdio.h>
int main(void)
{
    int x[5] = {11, 12, 13, 14, 15};
    int y[5], i;
    for (i = 0; i < 5; i++)
    {
        y[i] = x[i] * 10;
    }
    for (i = 0; i < 5; i++)
    {
        printf("%d ", y[i]);
    }
    return 0;
}

逆行列を求めるプログラム

#include <stdio.h>
int main(void)
{
    double a[2][2] = {{1.0, 2.0}, {3.0, 4.0}};
    double b[2][2], d;
    d = a[0][0] * a[1][1] - a[0][1] * a[1][0];
    b[0][0] = a[1][1] / d;
    b[0][1] = -a[0][1] / d;
    b[1][0] = -a[1][0] / d;
    b[1][1] = a[0][0] / d;

    printf("%f %f\n", b[0][0], b[0][1]);
    printf("%f %f\n", b[1][0], b[1][1]);

    return 0;
}

Problem

問題1. キーボードから入力した4つの数値を4つの配列にそれぞれ記憶させた後,それらの合計を求めて出力せよ.(forやwhileは使わずに)

問題2. 上と同じことをfor文を使って作る.入力時と計算時で,for文を2度使ってよい. (4回繰り返すためにforを使う)

問題3. 5個の数値をキーボードから入力し,入力された数値を偶数と奇数に分けて表示するプログラムを作成せよ.

問題4. char ss[50];と宣言された配列に,自分の名前(半角ローマ字)を格納し,出力せよ.(キーボードからの入力でなくて良い). さらに,配列ss[]の各要素(格納されている値)を1文字ずつで出力せよ.参考:p.49

問題5. 入力された文字列を逆順に表示するプログラムを作成せよ.またプログラム中に「a」が含まれていたら,「A」に変換せよ.

問題6. 3人の学生のテスト結果(3回分)をキーボードから入力し,それぞれの平均点を計算し,出力せよ.

配列の要素ss[]が0(‘\0’)である所までを繰り返し文(forやwhileなど)を使って出力する.

Solutions

問題1

キーボードから入力した4つの数値を4つの配列にそれぞれ記憶させた後,それらの合計を求めて出力せよ.(forやwhileは使わずに)

#include <stdio.h>
int main(void)
{
	int a[4],b;
	printf("a[0]="); scanf("%d",&a[0]);
	printf("a[1]="); scanf("%d",&a[1]);
	printf("a[2]="); scanf("%d",&a[2]);
	printf("a[3]="); scanf("%d",&a[3]);

	b = a[0] + a[1] + a[2] + a[3];
	printf("sum of a[]=%d\n",b);
	return 0;
}

問題2

上と同じことをfor文を使って作る.入力時と計算時で,for文を2度使ってよい. (4回繰り返すためにforを使う)

#include <stdio.h>
int main(void)
{
    int a[4],b,i;
    for(i=0;i<4;i++){
        printf("a[%d]=",i); scanf("%d",&a[i]);
    }
    b=0;
    for(i=0;i<4;i++){
        b += a[i];
    }
    printf("sum of a[]=%d\n",b);
    return 0;
}

問題3

5個の数値をキーボードから入力し,入力された数値を偶数と奇数に分けて表示するプログラムを作成せよ.

#include <stdio.h>
int main(void)
{
    int num[5];
    int i;
    for (i = 0; i < 5; i++){
        printf("#%d:", i + 1);
        scanf("%d", &num[i]);
    }
    printf("\neven: ");
    for (i = 0; i < 5; i++){
        if ((num[i] % 2) == 0)
            printf("%d,", num[i]);
    }
    printf("\nodd: ");
    for (i = 0; i < 5; i++){
        if ((num[i] % 2) != 0)
            printf("%d,", num[i]);
    }
}

問題4

char ss[50];と宣言された配列に,自分の名前(半角ローマ字)を格納し,出力せよ.(キーボードからの入力でなくて良い). さらに,配列ss[]の各要素(格納されている値)を1文字ずつで出力せよ.参考:p.49

#include <stdio.h>
#include <string.h>
int main(void)
{
    char ss[50]; int i;
    strcpy(ss,"Taro");
    printf("%s\n",ss);
    i=0;
    while(ss[i]!='\0'){
        printf("%c ",ss[i]);
        i++;
    }
    return 0;
}

問題5

入力された文字列を逆順に表示するプログラムを作成せよ.またプログラム中に「a」が含まれていたら,「A」に変換せよ.

#include <stdio.h>
int main(void)
{
    char str[50];
    int len = 0;
    printf("String?:");
    scanf("%s", str);
    while (str[len] != 0)
        len++;
    for (len--; len >= 0; len--)
    {
        if (str[len] == 'a')
            str[len] = 'A';
        printf("%c", str[len]);
    }
    printf("\n");
    return 0;
}

問題6

3人の学生のテスト結果(3回分)をキーボードから入力し,それぞれの平均点を計算し,出力せよ.

#include <stdio.h>
int main(void)
{
    int dt[3][3], i, j, total = 0;
    double ave[3];
    //3人分のテスト成績を入力
    for (i = 0; i < 3; i++)
    {
        printf("#%d\n", i + 1);
        for (j = 0; j < 3; j++)
        {
            printf("test result %d:", j + 1);
            scanf("%d", &dt[i][j]);
        }
    }
    //それぞれの平均値を計算
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            total += dt[i][j];
        }
        ave[i] = total / 3.0;
        total = 0;
    }
    //平均値を出力
    printf("\n");
    for (i = 0; i < 3; i++)
        printf("#%d ave:%.2f\n", i + 1, ave[i]);
    return 0;
}

Last updated