- 整数値をキーボードから次々と入力し,その値が零より大きいか,そうでないかにより,次のように分岐処理を行うプログラムを作成した.入力値が零より大きければ,それ以前に入力された全ての値との和を計算し,次の値の入力待ちとなる.入力値が零または零より小さければ,それ以前に計算された値の総和をディスプレイに表示する.例として,2,4,-1 の順番で整数値が入力される場合を考える.まず,2を入力すると総和2を計算して変数sに代入し,入力待ちに戻る.次に,4を入力すると総和2+4=6 を計算して変数sに代入し,入力待ちに戻る.最後に,-1を入力したとき6をディスプレイに表示して,プログラムを終了する.以下の問いに答えよ.
#include <stdio.h> (a1)
main() {
int n, (b1) ;
while( (b2) ){
scanf("%d", &n);
if(n>0){
(b3)
}else{
printf("result = %10d\n", s); (a2)
(b4)
}
}
}- 下線部分(a1), (a2)について説明せよ.
- 括弧(b1), (b2), (b3)に入れるべき文を記述し,プログラムを完成せよ.
- 次のプログラムは,キーボードから3つの整数値を読み込み,それらを整数配列に記憶する.つづいて,それらの数値だけの個数の文字 ’*’ (アスタリスク)を横に並べてディスプレイに表示するプログラムである.例えば,3つの整数値が5,1,7であれば以下のように出力する.以下の問いに答えよ.
(a1)
main() {
int (a2)
for(i=0;i<3;i++) scanf("%d",&n[i]);
for(i=0;i<3;i++) {
for( (a3) ) printf("*");
printf( (a4) );
}
}(出力例)
*****
*
*******- 括弧(a1), (a2), (a3), (a4)に入れるべき文を記述し,プログラムを完成せよ.
- 記号 ’*‘(アスタリスク)を横に印刷する部分だけを別の関数 PMark とするように修正し,プログラム全体を書き直した.main関数を以下に記述する.PMark 関数を作成せよ.
#include <stdio.h>
void PMark(int n);
void main() {
int i, n[3];
for(i=0;i<3;i++) scanf("%d",&n[i]);
for(i=0;i<3;i++) PMark(n[i]);
}解答:
(a1):
(a2):
本题考查了C语言程序设计的基础知识。第一题涉及基本的输入输出操作、循环控制以及条件分支。其中引入标准输入输出库是使用库函数的前提,格式化字符串指定了输出整数的最小位宽并右对齐。循环体内通过判断输入值是否大于零来决定是累加还是输出并终止循环,累加变量在使用前必须初始化为零,无限循环通常使用非零常量表示条件为真,并在特定条件下使用跳转语句跳出。第二题考查了数组、嵌套循环以及函数的定义。在双重循环中,内外层循环必须使用不同的循环变量以避免冲突,内层循环用于控制星号的打印次数,外层循环控制换行格式。将功能封装为独立函数时,需要根据传入的参数控制打印行为,并在函数内部声明局部变量用于循环控制,这有助于提高代码的可读性与结构化水平。