本サンプル問題の著作権は日本商工会議所に帰属します。
また、本サンプル問題の無断転載、無断営利利用を厳禁します。本サンプル問題の内容や解答等に関するお問い合わせは、受け付けておりませんので、ご了承ください。

日商プログラミング検定 STANDARD（C 言語）サンプル問題
知識科目
第１問（知識 4 択：20 問）
1．Ｃ言語ソースプログラムの拡張子は何か。
① ｃ
② obj
③ exe
④ tbl
2．文の最後に記述する記号はどれか。
① ;② :③ ,④ .
3．整数値を格納する変数の型を何というか。
① int② double③ char
④ float4．一文字を格納する変数の型を何というか。
① char② int③ double④ float5．プログラム中に記述した 0x64 は 10 進数ではいくつになるか。
① 100
② 144
③ 64
④ 32

6．変数名として使用することができないものはどれか。
① 1ban② bangou1③ b1④ b_1
7．printf 関数を呼出す際に最も関係のある #include 前処理指令はどれか。
① #include<stdio.h>② #include<stdlib.h>③ #include<time.h>④ #include<string.h>８．printf 関数により文字列を表示するとき、記述すべき変換指定子は何か。
① %s② %c
③ %f
④ %d9．整数値に対する演算で剰余（割り算の余り）を求める演算子は何か。
①%

②＋

③*

④/10．ビットごとの論理和を求める演算子はどれか。
①|②&③^④~

11．整数型変数に対し、右に 2 ビットシフトすると変数の値はどのように変化するか。
① 4倍
② 2倍
③ 1/2 倍④ 1/4 倍12．x=x+2; と同等の文はどれか。
① x+=2;② x=+2;③ +x=2;④ x++;

13．論理式において「または」（論理和）を表現する演算子はどれか。
①||

②&&

③|

④&14．関係演算子でないものはどれか。
①=②<=③＞=④>

15．論理演算子でないものはどれか。
①&②&&

③||

④！

16．t x[10];と宣言したとき、配列要素数は何個か。
① 10
② 不定
③ 9
④ 11
17．数字（0 から 9）のみで構成された文字列を数値に変換するライブラリ関数はどれか。
① atoi()② gets()③ strcpy()④ strcmp()
18．繰り返し処理の途中で以降の処理をスキップする文はどれか。
① Continue② break③ goto④ case19．char 型へのポインタ p に対し、p++; を実行した結果について最も適当な説明はどれか。
① p の値に char 型のサイズ（大きさ）を加算する。
② p の値に文字数（p の指す先の文字列の長さ）を加算する。
③ p の指す先の値に 2 を加算する。
④ p の指す先の値に int 型のサイズ（大きさ）を加算する。

20．C 言語が設計され、作られた目的の説明で最も適当な説明は何か。
① 効率的なオペレーティングシステムを構築するため。
② 事務処理が容易にできるようにするため。
③ 科学技術計算を容易にできるようにするため。
④ コンピュータゲームを作成するため。

第 2 問（穴埋め：2 問）【問題１】
毎日貯金することを考える。１日目は１円、２日目は２円、３日目は４円というように、毎日倍額貯金すると、貯金総額が 100 万円を超えるのは何日目かを求め表示せよ。
【条件】
1. 自然数の範囲で考えるので、変数の型は整数型とする。
【実行結果】

【アルゴリズム】

開始
S=0
D【1】
=1
n=1

S < 1000000

S 【2】
S+D
「n日目はd円を貯金し、総額S円」を表示

d = d【3】＊ ２n++【4】 日「100万円を超えるのは N-1目です。」と表示

終了

以上を実行するプログラムを記述せよ。

#include <stdio.h>
int m ain(void){
int S, d, n;
S = 0;d 【１】= 1;
n = 1;
printf(" 日目\t 貯金額\t 総額\n");w hile(S < 1000000) {S =【２】
S + d;
printf("%2d 日目\t%6d 円\t%7d 円\n",n,d,S);d *【３】=2;n++;}
printf("100万円を超えるのは %d 日目です。\n", 【４】n-1);
return 0;}【１】から【４】に入るべき適当なプログラム片を選択せよ。
【1】 （１）d = 0（２）d = 1（３）d = 2（４）d = 3【2】 （１）S = 0（２）S += n（３）S += d（４）S ++【3】 （１）d = 1（２）d *= 2（３）d *= d（４）d++【4】 （１）d（２）d―1（３）n（４）n－1

【問題 2】10 種類のフルーツがある。各々何個か（0～９個）購入するとき、合計金額を求め、入金額に対しておつりを計算せよ。ただし、例えば以下の様に入力し、100001020340567
1 行目は入金額で 10000 円を示し、２行目は、以下のフルーツの順番に購入する個数を示す。順に 0～9 の数字を文字列として入力せよ。
バナナ：1 個、なし：2 個、かき：3 個、すいか：4 個、もも：5 個、ぶどう：6 個、いちじく：7 個
１０２０３４０５６７＾＾＾＾＾＾＾＾＾＾
１２３４５６７８９10
桁桁桁桁桁桁桁桁桁桁目目目目目目目目目目＜10 種類のフルーツ＞バナナ、みかん、なし、メロン、かき、すいか、キウイ、もも、ぶどう、いちじく【実行結果】

prom pt$ ./a.out
10000
1020340567
バナナ : 1=> 150
なし : 2=> 380
かき : 3=> 600
すいか : 4=> 1520
もも : 5=> 1200
ぶどう : 6=> 2400
いちじく : 7=> 2450
支払総額 :8700
:1300
おつり

【アルゴリズム】

開始

入金額と購入数量（文字列ｓ）を入力

a=0
i=0

False

i < 10True

支払総額とおつりを表示

終了

m に s の ?（iを用いて計算）
桁目を数字として代入

m != 0

False

True
フルーツの単価と数量をかけ、合計金額を変数c に代入

変数a に c の値を追加

i++以上を実行するプログラムを記述せよ。

#include <stdio.h>#include <stdlib.h>static int p[ ]={ 150, 100, 190, 500, 200,380, 170, 240, 400, 350 };static char * f[ ] = { " バナナ ", " みかん ", "なし ", " メロン ", "かき "," すいか", " キウイ ", "","",""};
ももぶどう いちじく
int m ain(void){
int i,m ,a=0,b,c;char s[256];
gets (s); b = atoi(s);【１】gets (s);【１】for(i=0;i<10;i++) {m = s[i]-48;【２】if(m !=0) {c = p[i]*
m;
【３】
a【４】
+= c;
printf("%10s:%3d=>%6d\n",f[i],m ,c);}}printf(" 支払総額:%d\n",a);printf(" おつり :%d\n",b-a);
return 0;}【１】から【４】に入るべき適当なプログラム片を選択せよ。
【1】 （１）getc（２）gets（３）getchar（４）putchar【2】 （１）s[i];（２）s[i] – ‘0’; （３）s[i] – ‘1’;（４）s[i] – “1”;【3】 （１）p[i]*m;（２）p[m]*i;（３）p[i+1]*m;（４）p[m+1]*i;【4】 （１）a *= c;（２）a += c;（３）c *= a;（４）c += a;

第 3 問（読解：1 問）【問題】
以下のプログラムの説明で最も適切なものを選択せよ。
【プログラム】#include <stdio.h>
int m ain(void){
int n, i;n=123456;
for(i=2;i<353;i++)w hile(n% i == 0) {n/= i;printf("%d* ",i);}printf("%d\n",n);return 0;}【選択肢】【１】 123456 は、素数かどうかを判定し結果を表示する。
【２】 123456 は、２の累乗かどうかを判定し結果を表示する。
【３】 123456 を素因数分解したときの因数を表示する。
【４】 123456 の約数を求め表示する。

実技科目
【問題１】
２から 100 までの約数を求め、表示しなさい。
【条件】
1. 自然数の範囲で考えるので、変数の型は整数型とする。
2. 以下の様に表示する（抜粋）。

【アルゴリズム】

開始
n=2
False

n <= 100True「nの約数:」を表示

n++【１】の一部m = 2【１】の一部
m <= nFalse

True

n %【２】
m = 0

FalseTruen 【３】
== m

True

False

mと「,」を表示

m【１】の一部= m + 1終了

m と「改行」を表示

以上を実行するプログラムを記述せよ。
【１】から【３】に入る適当なプログラム片を入力せよ。

#include <stdio.h>
int m ain(){
int n, m ;for( n=2 ; n<=100 ; n++ ) {printf("%d の約数:", n);【１】for( m =2;m<=n;m ++ )if( n%m==0 ) {【２】if( 【３】n==m )printf("%d\n",m );else
printf("%d,",m );}}return 0;}

【問題２】
３辺a, b, c（c を斜辺とする）の直角三角形の成立条件は、𝑎2 + 𝑏2 = 𝑐 2である。各辺の長さは自然数と仮定し、さらに３～N（N=100）までの範囲の値をとるものとする。
条件が成立する直角三角形の辺の組を求めよ（a, b の値を交換した直角三角形は同じとする）。

【条件】
1. for 文を 3 重ループにし、a, b, c を総当たりで調べる。
2. a ≤ b ≤ c と仮定する。
3. 自然数の範囲で考えるので、変数の型は整数型とする。
【実行結果】

3, 4, 5
5, 12, 13
6, 8, 10
7, 24, 25
8, 15, 17
9, 12, 15
9, 40, 41＜略＞

【アルゴリズム】

開始
a=3
N = 100
cnt = 0False
個数（cnt）を表示

a <= Na++
True

終了

b【１】
＝ab <= Nb++

False

True

c 【２】
= ac++
False

c <= NTrue【３】

a*a + b*b == c*c

True

cnt++
答の一つ、a、b、 c を表示

False以上を実行するプログラムを記述せよ。
【１】から【３】に入る適当なプログラム片を入力せよ。

# include <stdio.h>
int m ain(void){
int a, b, c, cnt=0, N=100;
for( a=3; a<=N; a++ )for( 【１】b=a ; b<=N; b++ )for( 【２】c=a ; c<=N; c++ )if( a* a+b*b==c* c ) {【３】
cnt++;
printf("%d, %d, %d\n", a,b,c);}printf(" 個数：%d\n", cnt );return 0;}

【問題３】
２０人の学生の英語の試験の点が以下のようであった。

氏名

英語赤井64

安藤82

青山98

有吉76

浅井83

浅野63

浅岡73

千葉

9

江口88

遠藤94

藤井39

藤木45

藤原

21

福永58

船橋99

古川

17

二村82

花井38

原田88

橋本100

英語の試験の点のヒストグラムを作ることを考える。配列 a に英語の試験の点をあらかじめ格納し、配列 hに度数を格納した後、＊を用いて度数分布表を表示しなさい。ヒストグラムとは、統計で度数分布を示すグラフの一つである。ここでは、横軸に度数をとり、縦軸に階級をとる。
【実行結果】

0 :*
10 :*
20 :*
30 :**40 :*＜略＞

【アルゴリズム】

開始
配列a に英語の試験の点を格納

配列h の初期化

i=0
N = 20
False

i<N
True
【１】
r = a[i]/10i++

h[

【2】
r]++

i=0
False

i <= 10True

階級： の表示終了

改行 の表示j=0Falsej <【３】
h[i]
True

* の表示

j++

以上を実行するプログラムを記述せよ。
【１】から【３】に入る適当なプログラム片を入力せよ。

#include <stdio.h>
static int a[]={64,82,98,76,83,63,73,9,88,94,39,45,21,58,99,17,82,38,88,100};
int m ain(void){
int h[11];int i,j,r, N=20;
for(i=0; i<=10; i++) h[i]=0;
for(i=0; i<N; i++) {r = a[i]/10;【１】h[ 【2】r]++;}for(i=0; i<=10; i++) {printf("%3d: ", i* 10 );for(j=0; 【３】j<h[i] ; j++)putchar('* ');putchar('\n');}return 0;}