関数とポインタを良く整理して理解しておいてください。
(1)変数 a と b の値を,入れ替えるswap()
関数を作成し,プログラムを完成させよ。
#include <stdio.h>
void swap(float *a, float *b)
{
float tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void main()
{
float a=2.0, b=3.0;
printf("a=%f, b=%f\n", a, b);
swap(&a, &b);
printf("a=%f, b=%f\n", a, b);
}
(2)関数を用いて実数型配列の要素をキーボードから10個入力及び配列の中身表示プログラムを作成せよ。
#include <stdio.h>
void input(float *p, int n)/*キーボードからの入力*/
{
int i;
for(i=0;i<n;i++){
printf("data[%d]=",i);
scanf("%f", p+i);
}
}
void output(float *p, int n)/*配列の表示*/
{
int i;
for(i=0;i<n;i++){
printf("data[%d]=%f\n",i,*(p+i));
}
}
void main()
{
float data[10];
input(data,10);
output(data,10);
}
(3)実数型配列の要素をキーボードから10個入力する,平均値を算出する,大きい順に並び替え(ソート)る,配列の中身を表示する各関数を作成せよ。
ヒント:上の二つの問題を用いるとわかりやすいプログラムが出来る。
#include <stdio.h>
void swap(float *a, float *b)
{
float tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void input(float *p, int n)
{
int i;
for(i=0;i<n;i++){
printf("data[%d]=",i);
scanf("%f",p+i);
}
}
float average(float *p, int n)
{
int i;
float ave=0.0;
for(i=0;i<n;i++) {
ave += *(p+i);
}
ave /= n;
return ave;
}
void sort(float *p, int n)
{
int i, j;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(*(p+i) < *(p+j)){
swap(p+i, p+j);
}
}
}
}
void output(float *p, int n)
{
int i;
for(i=0;i<n;i++){
printf("data[%d]=%f\n",i,*(p+i));
}
}
void main()
{
float data[10];
input(data,10); /* 10個の要素を入力する関数*/
printf("平均値 = %f\n",average(data,10)); /* 平均値を算出する関数 */
sort(data,10); /* 大きい順に並び替える関数 */
output(data,10); /* 配列の中身を出力する関数 */
}
(4)キーボードから文字列を入力すると,文字数を数えて値を返す関数を作成せよ。
#include <stdio.h>
int moji_nagasa(char *str)
{
int i=0;
while(str[i]!=NULL){
i++;
}
return (i);
}
void main()
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
printf("入力された文字列は,%sです.\n", str);
printf("文字数は,%dです.\n", moji_nagasa(str));
}
(5)整数型配列に成績データである得点を入力する,偏差値を計算する,それぞれの番号の得点と偏差値を全て表示する,各関数を作成し,偏差値を表示するプログラムを作成せよ。成績データは以下に示す表を使用せよ。
偏差値は,以下の式から求めることが出来る。
平方根の計算には,sqrt()関数を利用する。sqrt()関数を利用するには,
math.hをインクルードする必要がある。
#include <stdio.h>
#include <math.h>
void read_data(int *tensu, int n)
{
int i;
for(i=0; i<n; i++){
scanf("%d", (tensu+i));
}
}
void deviation(int *tensu, float *hensachi, int n)
{
int i, wa=0;
float ave,dev=0;
/* 和の計算 */
for(i=0; i<n; i++){
wa += tensu[i];
}
ave = (float)wa / n;
/* 標準偏差の計算 */
for(i=0; i<n; i++){
dev += (tensu[i]-ave)*(tensu[i]-ave);
}
dev = sqrt(dev/n);
/* 偏差値の計算 */
for(i=0; i<n; i++){
hensachi[i] = 10.0*(tensu[i] - ave)/dev + 50;
}
}
void kekka(int *tensu, float *hensachi, int n)
{
int i;
for(i=0; i<n; i++){
printf("%d, %d, %.2f\n", i+1, tensu[i], hensachi[i]);
}
}
void main()
{
int tensu[20];
float hensachi[20];
read_data(tensu, 20);
deviation(tensu, hensachi, 20);
kekka(tensu, hensachi, 20);
}