課題 6 :ポインタ (2003年10月23日)

例題 1 : アドレス演算子とポインタ演算子の使用例

#include <stdio.h> int main(void) { int int_val; /* int型の変数 */ int *int_ptr; /* int型のポインタ変数 */ int_ptr = &int_val; *int_ptr = 2; printf("int_val : %d\n", int_val); printf("*int_ptr : %d\n", *int_ptr); return 0; }

例題 2:文字列をコピーするプログラム

#include <stdio.h> int main(void) { char a_str[100]; /* 入力される文字列 */ char b_str[100]; /* 複写先の文字列 */ char *a_ptr, *b_ptr; /* ポインタ変数 */ a_ptr = a_str; b_ptr = b_str; printf("input string "); scanf("%s", a_ptr); for (;*a_ptr != '\0'; a_ptr++, b_ptr++) *b_ptr = *a_ptr; *b_ptr = '\0'; printf("input string %s\n", a_str); printf("copied string %s\n", b_str); return 0; }

例題 3: 和と積を同時に計算する関数

#include <stdio.h> void add_mul(float x, float y, float *add, float *mul); int main(void) { float a,b; float x,y; printf("input a "); scanf("%f", &a); printf("input b "); scanf("%f", &b); add_mul(a,b,&x,&y); printf("add = %f\n", x); printf("mul = %f\n", y); return 0; } void add_mul(float x, float y, float *add, float *mul) { *add = x + y; *mul = x * y; }

課題 1

例題 2のプログラムを参考にして,2つの文字列を入力して、 文字列1の最後に文字列2をコピーし(文字列を接続する)、 その文字列の出力するプログラムを,ポインタ変数を用いて作成せよ. 例えば、abcとxyzを入力とすると、abcxyzと出力する。

課題 2

例題 3のプログラムを参考にして,2変数x,yに関する連立一次方程式
a1*x + b1*y = 1
a2*x + b2*y = 1
を解く関数solveを作成しなさい。関数の宣言は、
void solve(float a1,float b1,float a2,float b2,float *x,float *y);
とし、解はポインタ型の引数x,yの指すところに格納し、返すものとする。 なお、不定解は考慮しなくてもよい。この関数を用いて、
3.1*x + 2.0*y = 1.0
5.6*x + 11.2*y = 1.0
を解くプログラムを作成しなさい。