(1)10個のデータから,平均値を求めて,平均値以上のデータを大きい順に表示するプログラムを作成せよ
<解答>
#include <stdio.h>
void main()
{
float data[10]={2.5, 9.5, 4.23, 28.59, 30.2, 13.7, 9.14, 8.65, 7.81, 10.34};
float sum=0,ave,temp;
int i,j;
for(i=0;i<10;i++)
sum += data[i];
ave = sum/10.0;
for(i=0;i<9;i++){
for(j=i+1;j<10;j++){
if(data[i]<data[j]){
temp=data[j];
data[j]=data[i];
data[i]=temp;
}
}
if(data[i]>=ave)
printf("%d番目に大きな数字は%f¥n",i+1,data[i]);
}
}
(2)2次方程式ax2+bx+c=0(a=0の場合もありうる)の係数a,b,cを入力し,判別式D(=b2-4ac)の値を求め,D>0の時は2つの実数解を求め,
D=0の時は重解を求め,D<0の時は「解なし」として結果を画面に表示するプログラムを作成せよ.
<解答>
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,d;
printf("aの入力:"); scanf("%f",&a);
printf("bの入力:"); scanf("%f",&b);
printf("cの入力:"); scanf("%f",&c);
d = b*b-4*a*c;
if(d>0 && a==0){
printf("xの解は%fです¥n",-c/b);
}else if(d>0 && a!=0){
printf("xの解は%fと%fです¥n",(-1*b+sqrt(d))/(2*a),(-1*b-sqrt(d))/(2*a));
}else if(d==0){
printf("xの解は%fです¥n",(-1*b)/(2*a));
}else{
printf("解無し¥n");
}
}
(3) 2つの整数a, bを入力すると,その数を含めて,2つの数の間の整数の和を求めるプログラムを作成せよ.ただし,a, b どちらが大きいかは,わからない.
例:a=5, b=1の場合,答えは15(1+2+3+4+5)
<解答>
#include <stdio.h>
void main()
{
int a,b,i,sum=0;
printf("aの入力:"); scanf("%d",&a);
printf("bの入力:"); scanf("%d",&b);
if(a>=b){
for(i=b;i<=a;i++)
sum += i;
printf("%d,%d間の整数の合計は%dです",b,a,sum);
}else{
for(i=a;i<=b;i++)
sum += i;
printf("%d,%d間の整数の合計は%dです",a,b,sum);
}
}
(4)キーボードから入力した整数a,bの割り算 a ÷ b の商とあまりを引き算のみを用いて計算し,画面に表示するプログラムを作成せよ.
(例えばaとして17,bとして3を入力すると,「5 あまり 2」と表示する.「 / 」,「 % 」演算を使用しない事.)
<解答>
#include <stdio.h>
void main()
{
int a,b,quot=0,rema;
printf("aの入力:"); scanf("%d",&a);
printf("bの入力:"); scanf("%d",&b);
rema = a;
while(rema>b){
rema -= b;
quot++;
}
printf("商は%d,余りは%d¥n",quot,rema);
}
(5)4*4の二次元配列の中身を上下逆転するプログラムを作成せよ.
<解答>
#include <stdio.h>
void main()
{
int X[4][4] = {{1,2,3,4}, /*行列の定義*/
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}};
int i,j,temp;
for(i=0;i<2;i++){
for(j=0;j<4;j++){ /*行列の並び替え*/
temp = X[3-i][j];
X[3-i][j] = X[i][j];
X[i][j] = temp;
}
}
for(i=0;i<4;i++){
for(j=0;j<4;j++)
printf(" %d ",X[i][j]);
printf("¥n");
}
}