编程语言基础 C语言 递归 素数判定

[1] C言語における,以下の用語またはプログラムの一部について説明せよ。

  1. 条件演算子
  2. printf("%5i--->%+14.7e",a,b)
  3. プリプロセッサ

[2] 再帰的プログラミングを用いて,2つのベクトルの内積を計算する関数inprodをC言語で作成した。2つのベクトルとそれらの要素数は,それぞれ配列変数abと変数iに代入される。関数inprodと,それを用いる関数mainからなるプログラムを以下に示す。括弧内に入れるべき式,または式の一部を答えよ。

#include<stdio.h>
_____(1)_____ ;
int main(){
    int a[]={1,2,3}, b[]={100,10,1}, n=3;
    printf("%d\n", inprod( _____(2)_____ ));
    return 0;
}
int inprod(int a[], int b[], int i){
    if( _____(3)_____ ){
        return a[i-1]*b[i-1] _____(4)_____ ;
    }else{
        return 0;
    }
}

[3] 素数判定を行う関数primをC言語で作成した。変数xに値を受け取り,その変数の値が素数ならば1を,素数でなければ0を返す。ただし,変数xは1より大きな整数とする。括弧内に入れるべき式,または式の一部を答えよ。

int prim( int x){
    int i, _____(1)_____ ;
    for(i=2; i<x; i++){
        if( _____(2)_____ ){
            label=0;
            return label;
        }
    }
    return label;
}

[4] 問[3]のプログラムの処理速度を向上するためには,どの箇所をどのように修正すればよいか論述せよ。

[5] 問[3]のプログラムを利用するための関数mainを作成せよ。この関数ではキーボードより変数yへ1より大きな整数を読み込む。それを関数primに引き渡して,関数primの結果に応じて,変数yが素数であれば”素数です.”,素数でなければ”素数ではありません.”と表示するようにせよ。


解答:

[1]
1)

条件式 ? 真の場合の値 : 偽の場合の値を返す3項演算子

変数aを5桁の10進数,変数bを符号付き全体14桁・小数部7桁の指数表記で出力

コンパイル前に includedefine などのマクロ展開を行う前処理プログラム

[2]
(1)

(2)

(3)

(4)

[3]
(1)

(2)

[4]

[5]


这道题目全面考察了C语言的常用特性以及基础算法的实现。第一部分要求对语言基础概念进行简明阐述,涵盖了控制流、格式化输入输出以及编译流程。第二部分通过向量内积的计算考察了递归函数的编写,核心在于准确构建递归的终止条件与递推关系。第三和第四部分聚焦于素数判定算法,填空部分主要考察逻辑状态变量的初始化和取模运算,而优化部分则涉及算法复杂度的改进,将循环上限从线性降低至平方根级别可以有效提升计算性能。第五部分考察了基本的标准输入输出操作与条件分支控制。