C言語演習2日目

ここに画像の説明を挿入します
今日もC言語の練習問題をシェアしていきます。

1. 多肢選択問題

1. 次のプログラムセグメントの出力結果は ( ) です。

#include<stdio.h>
int main()
{
    
    
char s[] = "\\123456\123456\t";
printf("%d\n", strlen(s));
return 0;
}

A: 12 B: 13 C: 16 D:
上記のどれでもありません。この質問はエスケープ文字の理解をテストします。\ は \ を意味し、1 文字としてカウントされます。strlen は \0 より前の文字数を検索するためです。 1つずつ入力していきます。\123は16進数です。\tは1文字と数えます。そうすると12文字になります。この質問の答えはAです。 2. 以下のプログラムがあった場合、実行すると出力結果は
( )

#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
    
    
printf("%d\n", NUM);
return 0;
}

この質問はコードを読んで書くことができます。N を 2、M を N+1、num=(N+1+1)*N+1/2 と定義すると、計算後の結果は 8 3 になります。
関数 f(1) の値は ( ) となります

int f(int n)
{
    
    
	static int i = 1;
	if(n >= 5)
	return n;
	n = n + i;
	i++;
	return f(n);
}

A: 5 B: 6 C: 7 D: 8
まず第一に、これは単純な再帰的なアイデアです。n=5 の場合にのみ返されます。ここでの静的により、関数を呼び出すと、i が成長し続けることができます。関数スタックフレームを作成しますが、staticで変更しないとローカル変数となり、スタックからポップされると破棄されてしまうので、staticを付けると静的ローカル変数になります。それでは、この質問を見てみましょう。実際には下書きを書くだけで十分です。
ここに画像の説明を挿入します
したがって、答えは 7 です。

4. 次の 3 つのプログラム コードは同じ効果を持ちますか? ( )

int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;

私たちのスローガンを覚えておいてください。左の固定値を右に向ければ、この問題は解決できます。オプション
A: (2)=(3) B: (1)=(2) C: なし D: どちらも同じです
。私たちのスローガン、答えはBです

5. 次のステートメントの場合、正しいステートメントは ( )
A: struct X{short s;int i;char c;} の場合、sizeof(X) は sizeof(s) + sizeof(i) + sizeof© B に等しいです。 :
特定の A double 変数 a について、a == 0.0 を使用してゼロかどうかを判断できます
C: 初期化メソッド char a[14] = "Hello, world!"; および char a[14]; a = "Hello 、ワールド!"; 効果は同じです。
D. 上記のステートメントは正しくありません
。 1 つずつ見てみましょう。 まず第一に、選択肢 A は間違いなく間違っています。 構造は整列する必要があるため、等しくすることはできません。ここで図を描いて計算することもできます。理解できない場合は、以前の記事を参照してください。構造体のメモリ アライメントに関する記事、計算してみましょう。まず、コンパイラのデフォルトのメモリ アライメント番号は 8 で、次に短い
ですは 2 バイトを占め、int は 4 です。 int のアライメント数の整数倍から開始する必要があるため、4 から開始して 4 から 7 に進み、char に 1 を加えた値は 8 となるため、構造体のサイズは次のようになります。は9です。

選択肢 B も間違いです。その理由は、データの保存方法が異なるためです。データの保存方法については、具体的な記事も書きました。理解できない場合は、それを確認してください。次に、選択肢 C です。一方は文字列、もう一方は配列ですので効果は確実ですが
、異なると開ける空間が異なります。
したがって、私たちの答えはDです

1. ニコッヘルの定理を検証します。つまり、任意の整数 m の 3 乗は、m 個の連続する奇数の合計として記述できます。例:
正の整数 m (m≦100) を入力し、m の 3 乗を連続する m 個の奇数の和として書き込み、出力します。
注: この質問には複数の入力データ セットが含まれています。
入力説明: int 整数を入力
出力説明: 分解された文字列を出力
OJ リンク[Niuke.com 質問番号: HJ76 ニコチェスの定理] [難易度: 簡単]

1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19

実は、この問題のポイントは、最初の数字を計算するのが難しいということです。最初の数字を計算するのは難しいです。最初の数字を計算できれば、この問題はとても簡単です。わかりませんでした。それは最初からアウトです、はははは

#include <stdio.h>
 
int main()
{
    
    
   int m=0;
   scanf("%d",&m);
   int i=0;
   int start=0;
   start=m*(m-1)+1;
    printf("%d",start);
   for(i=1;i<m;i++)
   {
    
    
        start+=2;
        printf("+%d",start);
        
   }
   return 0;
}

質問 2
等差数列

ここに画像の説明を挿入します
上記の問題を知っていれば、この問題は確実に簡単になるため、説明は省略します。

#include<stdio.h>
int main()
{
    
    
	int n=0;
	scanf("%d",&n);
	int start=2;
	
	int i=0;
	int sum=2;
	for(i=1;i<n;i++)
	{
    
    
		start+=3;
		sum=sum+start;
		
	}
	printf("%d",sum);
	return 0;
}

今日の毎日の C 言語共有はこれで終わりです。また次回お会いしましょう

おすすめ

転載: blog.csdn.net/2301_76895050/article/details/132531268