NOIP 2007普及組初戦問題(C++)(答えなし)

41245 ワード

解答を含む問題https://blog.csdn.net/fuzhenkun/article/details/104498640
第1題
以下の各項目において、()はCPUの構成部分ではない
A.コントローラB.演算器C.レジスタD.マザーボード
第2題
リレーショナル・データベースでは、データベースに格納されているデータの論理構造は()を主とします.
A.二叉木B.多叉木C.ハッシュ表D.二次元表
第3題
以下の各項目のうち、()のみがコンピュータの記憶容量の常用単位ではありません.
A. Byte B. KB C. UB D. TB
第4題
ASCIIコードの意味は()です.
A.二→十進法変換コードB.アメリカ情報交換標準コードC.デジタルのバイナリ符号化D.コンピュータが文字を処理できる唯一の符号化
第5題
完全なコンピュータシステムには()が含まれます.
A.システムハードウェアとシステムソフトウェアB.ハードウェアシステムとソフトウェアシステムC.ホストと外部機器D.ホスト、キーボード、ディスプレイと補助メモリ
第6題
ITの意味は()です.
A.通信技術B.情報技術C.ネットワーク技術D.情報学
第7題
LANの意味は()です.
A.インターネットB.ローカルエリアネットワークC.広域ネットワークD.シティエリアネットワーク
第8題
冗長データとは、他のデータからエクスポートできるデータのことです.たとえば、データベースには学生の数学、国語、英語の3つの科目の成績が格納されており、3つの科目の成績の合計が格納されている場合、合計は冗長データと見なすことができます.冗長データは往々にしてデータの不一致をもたらす.たとえば,上の4つのデータがすべて入力されている場合,操作ミスにより総得点が3科目の成績の和に等しくないと矛盾する.次の冗長データについての言い方では、正しいのは()です.
A.すべての冗長データをデータベースに消去すべきであるB.高度な言語で記述されたデータ処理システムは、通常、リレーショナル・データベースで記述されたシステムよりも冗長データを消去しやすいC.クエリー効率を向上させるために、データベースに冗長データを残すことができるが、更新時に適合性検査D.適合性検査を行うと効率が低下する.データベース内の冗長データを無視できます
第9題
以下の各ソフトウエアにおいて,NOIP競合(再試合)に該当しない推奨言語環境は()である.
編集者注:2007年です
A. gcc B. g++ C. Turbo C D. Free Pascal
第10題
以下の停電後もデータを保存できるものは()あります.
A.ハードディスクB.キャッシュC.メモリD.RAMスコア:0/1.5
第11題
以下のコンピュータ言語についての言い方の中で、正しいのは()です.
A.プレミアム言語がアセンブリ言語よりも高度であるのは、プログラムの実行効率が高いためである.B.Pascal、Cなどの高度な言語の出現に伴い、機械言語とアセンブリ言語はすでに歴史の舞台を脱退した.C.プレミアム言語はアセンブリ言語プログラムよりも一つのコンピュータから別のコンピュータに移植しやすい.D.Cはオブジェクト向けの高度なコンピュータ言語である.
第12題
ここ20年来、多くのコンピュータ専門家は再帰アルゴリズムを大いに推奨し、複雑な問題を解決する強力なツールだと考えている.再帰アルゴリズムについて以下の説では,正しいのは()である.
A.1977年前後に標準的なコンピュータの高級言語「FORTRAN 77」を形成してプログラムで再帰を使用することを禁止した.理由の一つは、この方法がより多くのメモリ空間を占有する可能性があるからである.B.非再帰アルゴリズムに比べて、同じ問題を解決し、再帰アルゴリズムは一般的により速く実行される.C.複雑な問題に対して、再帰的なプログラミングは一般的に非再帰的なプログラミングよりも難しいD.定義された標準数学関数sin(x)、アプリケーションの文「y=sin(sin(x)」;再帰呼び出しです
第13題
自分の制御で終了できないループが「デッドループ」になります.例えば、C言語プログラムでは、文while(1)printf("");デッドサイクルで、実行時に番号が印刷されます.次の死の循環についての言い方は、()だけが正しい.
A.アルゴリズムが存在しない.どのプログラムと相応の入力データに対しても、デッドサイクルが発生するかどうかを判断することができる.そのため、どのコンパイルシステムもデッドサイクル検査をしない.B.一部のコンパイルシステムはデッドサイクルC.デッドサイクルが文法エラーであることを検出することができる.コンパイルシステムは各種の文法エラーを検査することができる以上、もちろん、デッドサイクルD.デッドサイクルとマルチプロセスに現れる「デッドロック」の差は多くないが、デッドロックは検出可能であるため、デッドロックも検出可能である
第14題
C言語では、式23|2^5の値は()
A. 18 B. 1 C. 23 D. 32
第15題
C言語において、aが0またはbが0またはcが0に等しいと判断する正しい条件式は()である.
A. !((a!=0)||(b!=0)||(c!=0)) B. !((a!=0)&&(b!=0)&&(c!=0)) C. !(a==0&&b= =0)||(c!=0) D. (a=0)&&(b=0)&&(c=0)
第16題
地面にはA、B、Cと表記された3本の柱があり、A柱には直径が同じ中間に穴のある円盤が10個置かれており、上から下へ順に1、2、3…と番号付けされており、A柱の上の皿の一部をB柱を経てC柱に移してもよいし、B柱に一時保存してもよい.B柱の操作が「入、入、出、入、入、出、出、入、入、入、入、出、入、出」と記録されている場合.では、C柱には、下から上までの番号が()です.
A. 2 4 3 6 5 7 B. 2 4 1 2 5 7 C. 2 4 3 1 7 6 D. 2 4 3 6 7 5
第17題
10進数1770に対応する8進数は()である.
A. 3350 B. 3351 C. 3352 D. 3540
第18題
A=B=True,C=D=Falseとし,論理演算式の値を偽とする()がある.
A. (﹁A∧B)∨(C∧D∨A) B. ﹁(((A∧B)∨C)∧D) C. A∧(B∨C∨D)∨D D. (A∧(D∨C))∧B
第19題
( 2070 ) 16 + ( 34 ) 8 (2070)_{16} + (34)_8(2070)16+(34)8の結果は()であった.A. ( 8332 ) 10 (8332)_{10} (8332)10​ ​B. ( 208 A ) 16 (208A)_{16} (208A)16​ C. ( 100000000110 ) 2 (100000000110)_2 (100000000110)2​ D. ( 20212 ) 8 (20212)_8 (20212)8​
第20題
7つのノードが知られている二叉木の先根遍歴は1 2 4 5 6 3 7(数字はノード番号、以下同じ)であり、中根遍歴が4 2 6 5 1 7 3であると、その二叉木の後根遍歴は()である.
A. 4 6 5 2 7 3 1 B. 4 6 5 2 1 3 7 C. 4 2 3 1 5 4 7 D. 4 6 5 3 1 7 2
第21題
(サブセット分割)n個の数(1,2,...,n)をrサブセットに分割する.各数はちょうど1つのサブセットに属し、2つの異なるサブセットには共通の数も空のセットもありません.異なる分割方法の総数をS(n,r)と記す.例えば,S(4,2)=7の7つの異なる分割方法は,{(1),(234)},{(2),(134)},{(3),(124)},{(4),(123)},{(12),(34)},{(13),(24)},{(14),(23)}の順である.n=6,r=3のとき、S(6,3)=_____である.(ヒント:まず1つの数を固定し、残りの5つの数についてS(5,3)とS(5,2)を考慮し、この2つの状況に分けて元の固定数を分析する.)
第22題
(最短ルート)ある都市の街は整然とした矩形ネットワーク(下図参照)で、南北に7本の縦通り、5本の東西に横町がある.今南西の角のAから東北の角のBまで歩いて、最も短い歩き方は全部で何種類ありますか?
第23題
プログラムを見て結果を書く:
#include
int main()
{
	int i, p[5], a, b, c, x, y = 20;
	for ( i = 0; i <= 4; i++ )
		scanf( "%d", &p[i] );
	a = (p[0] + p[1]) + (p[2] + p[3] + p[4]) / 7;
	b = p[0] + p[1] / ( (p[2] + p[3]) / p[4]);
	c = p[0] * p[1] / p[2];
	x = a + b - p[(p[3] + 3) % 4];
	if ( x > 10 )
		y += (b * 100 - a) / (p[p[4] % 3] * 5);
	else
		y += 20 + (b * 100 - c) / (p[p[4] % 3] * 5);
	printf( "%d,%d
"
, x, y ); return(0); }
: , 0 。
  :6 6 5 5 3

第24題
プログラムを見て結果を書く:
#include
void fun( int *a, int *b )
{
	int *k;
	k = a; a = b; b = k;
}


main()
{
	int a = 3, b = 6, *x = &a, *y = &b;
	fun( x, y );
	printf( "%d,%d ", a, b );
}
  :_______________________________

第25題
プログラムを見て結果を書く:
#include "math.h"
#include "stdio.h"
main()
{
	int a1[51] = { 0 };
	int i, j, t, t2, n = 50;
	for ( i = 2; i <= sqrt( n ); i++ )
		if ( a1[i] == 0 )
		{
			t2 = n / i;
			for ( j = 2; j <= t2; j++ )
				a1[i * j] = 1;
		}
	t = 0;
	for ( i = 2; i <= n; i++ )
		if ( a1[i] == 0 )
		{
			printf( "%4d", i ); t++;
			if ( t % 10 == 0 )
				printf( "
"
); } printf( "
"
); }

第26題
プログラムを見て結果を書く:
#include "ctype.h"
#include "stdio.h"
void expand( char s1[], char s2[] )
{
	int i, j, a, b, c;
	j = 0;
	for ( i = 0; (c = s1[i]) != '\0'; i++ )
		if ( c == '-' )
		{
			a = s1[i - 1]; b = s1[i + 1];
			if ( isalpha( a ) && isalpha( b ) || isdigit( a ) && isdigit( b ) )
/*  isalpha(a)      a     ,isdigit(b)       b     ,   ,  1,    0 */
			{
				j--;
				do
					s2[j++] = a++;
				while ( tolower( a ) < tolower( s1[i + 1] ) );
			}
/*  tolower(a)       a     ,    ,      */
			else s2[j++] = c;
		}else s2[j++] = c;
	s2[j] = '\0';
}


main()
{
	char s1[100], s2[300];
	printf( "input s1:" );
	gets( s1 );
	expand( s1, s2 );
	printf( "%s
"
, s2 ); }
  :
wer2345d-h454-82qqq

第27題
完全な手順:
(文字の逆順を求める)次のプログラムの機能は、いくつかの行の文字列を入力し、1行を入力するたびにその行を逆順に出力し、最後に-1を入力してプログラムを終了することです.プログラムを補完してください.
#include 
#include 
int maxline = 200, kz;
int reverse( char s[] )
{
	int i, j, t;
	for ( i = 0, j = strlen( s ) - 1; i < j; 【①】 , 【②】 )
	{
		t = s[i]; s[i] = s[j]; s[j] = t;
	}
	return(0);
}


void main()
{
	char line[100];
	cout << "continue? -1 for end." <<endl;
	cin>>kz;
	while(【③】)
	{
		cin  >>  line;
		【④】;
		cout << line  <<  endl;
		cout << "continue ? -1 for end." << endl;
		cin >> kz;
	}
}

第28題
完全な手順:(碁盤カバーの問題)
2 kで× 2 k 2^k\times 2^k 2k×2 k個の格子からなる碁盤には、特殊な格子と呼ばれる他の格子とは異なる1つの格子(図中に-1と表記されている格子)がある.現在,L型(3個の小四角を占める)紙片で碁盤上の特殊四角を除いたすべての部分を覆い,各紙片は重ならないようにしているので,用いられる紙片数はちょうど(4 k−1)/3(4^k−1)/3(4 k−1)/3である.以下の表に示す1つのカバースキームにおいて、k=2は、同じ3の各数字で1つの紙片を構成する.以下に示すプログラムは,分治法を用いて設計され,碁盤を4つに分け,左上角,右上角,左下角,右下角を順次処理し,再帰的に行う.プログラムを補完してください.
2  2  3  3
2 -1  1  3
4  1  1  5
4  4  5  5
#include 
#include 
int board[65][65], tile; /* tile      */
void chessboard( int tr, int tc, int dr, int dc, int size )
/* dr,dc         、   */
{
	int t, s;
	if ( size == 1 )
		⑤ ;
		t = tile++;
	s = size / 2;
	if ()
		chessboard( tr, tc, dr, dc, s );
	else{
		board[tr + s -1][tc + s -1] = t;
		[];
	}
	if ( dr < tr + s && dc >= tc + s )
		chessboard( tr, tc + s, dr, dc, s );
	else{
		board[tr + s -1][tc + s] = t;;
	}
	if ( dr >= tr + s && dc < tc + s )
		chessboard( tr + s, tc, dr, dc, s );
	else{
		board[tr + s][tc + s -1] = t;
		[];
	}
	if ( dr >= tr + s && dc >= tc + s )
		chessboard( tr + s, tc + s, dr, dc, s );
	else{ board[tr + s][tc + s] = t;
	      []; }
}


void prtl( int b[][65], int n )
{
	int i, j;
	for ( i =1; i <= n; i++ )
	{
		for ( j =1; j <= n; j++ )
			cout << setw( 3 ) << b[i][j];
		cout << endl;
	}
}


void main()
{
	int size, dr, dc;
	cout << "input size(4/8/16/64):" << endl;
	cin >> size;
	cout << "input the position of special block(x,y):" << endl;
	cin >> dr >> dc;
	board[dr][dc] = -1;
	tile++;
	chessboard( 1, 1, dr, dc, size );
	prtl( board, size );
}