C言語学習初等二分探索水仙数印刷ひし形

ヒント:ここでは、シリーズのすべての記事のカタログを追加できます。カタログは自分で手動で追加する必要があります。
例:パンダの使用に関する最初の章のPython機械学習の概要


ヒント:記事を書いた後、目次を自動的に生成できます。生成方法については、右側のヘルプドキュメントを参照してください。


序文

C言語コースを再学習した学生のために、ここにいくつかの重要なメモを書きたいと思います。そして、いくつかの難しい例(もちろん、私だけのために)、誰もがそれを参照することができます。

1.C言語から始めるのが最も簡単です

1.データ型

char        //字符数据类型
short       //短整型
int         //整形
long        //长整型
long long   //更长的整形
float       //单精度浮点数
double      //双精度浮点数

それぞれが数バイトを占めます。次の関数で確認してください。覚えておくのが最善です。

#include<stdio.h>
void main(){
    
    
	printf("char= %d\n", sizeof(char));
	printf("short=%d\n", sizeof(short));
	printf("int=%d\n", sizeof(int));
	printf("long=%d\n", sizeof(long));
	printf("long long =%d\n", sizeof(long long));
	printf("double= %d\n", sizeof(double));
}

ここに画像の説明を挿入

2.変数、定数

名前が示すように、変数は変更される値です。定数は、一度定義されると変更できない値です。

  1. ローカル変数のスコープは、変数のローカルスコープです。
  2. グローバル変数のスコープはプロジェクト全体です。
  3. 変数のライフサイクルとは、変数の作成から変数の破棄までの期間を指します
  4. ローカル変数のライフサイクルは次のとおりです。スコープに入るライフサイクルが始まり、スコープ外のライフサイクルが終わります。
  5. グローバル変数のライフサイクルは次のとおりです。プログラム全体のライフサイクル。

3.文字列+エスケープ文字

二重引用符によって引き起こされる文字列は、文字列リテラル、または略して文字列と呼ばれます。(注:文字列の終了マークは\ 0のエスケープ文字です。文字列の長さを計算する場合、\ 0は終了マークであり、文字列としてカウントされません)
エスケープ文字
:?連続する疑問符を書き込むときに使用されます。それらが3文字の単語に解析されないようにします。
'文字定数を示すために使用されます'
\ "文字列内の二重引用符
を示すために使用されます。\バックスラッシュを示すために使用され、エスケープシーケンス文字として解釈されないようにします。
\警告文字、ブザー
\ bバックスペース
\ f紙送り
\ n改行
\ rキャリッジリターン
\ t水平タブ
\ v垂直タブ
\ ddd dddは1〜3個の8進数を表します。例:\ 130 X
\ xddddは2つの16進数を意味します。数字。例:\ x30 0

#include <stdio.h>
int main()
{
    
    
    printf("%d\n", strlen("abcdef"));
    printf("%d\n", strlen("c:\test\328\test.c"));
    return 0;
}

出力結果は次のとおり
です。614最初の結果は理解しやすいです。ここでは、理解しやすいように2番目の結果を分割します。もっと恥ずかしいのは、最初は理解が間違っていたということですが、最終的には次のようになりました。これ。わかりやすくするために、各文字を#:c#:#\ t#e#s#t#\ 32#8#\ t#e#s#t#。#cで区切ります。合計13個あります。 #。

4.ステートメントを選択してループします

選択文は、if、switch、switchと呼ばれるもので、ifやelseの選択に似た、理解しやすい特別な種類の選択文だと思います。注:ブレークはスイッチを終了でき、デフォルトの句が処理に使用されます。大文字と小文字が一致しない場合は、スイッチの大文字と小文字の前後に書き込むことができます。
ループ文
しばらく
のため
ながら行います

#include <stdio.h>
int main()
{
    
    
	int i = 1;
	while (i <= 10)
	{
    
    
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}
#include <stdio.h>
int main()
{
    
    
 int i = 0;
 for(i=1; i<=10; i++)
 {
    
    
 printf("%d ", i);
 }
 return 0;
}
#include <stdio.h>
int main()
{
    
    
 int i = 10;
 do
 {
    
    
 printf("%d\n", i);
 }while(i<10);
 return 0;
}

ここでも、breakとcontinueの違いは、前者はループから直接ジャンプし、後者はこのループを終了して次のループに入ります。

2.典型的な質問

1.ひし形を印刷する

#include<stdio.h>
//打印菱形
int main()
{
    
    
	int i, j, N = 5;
	//上半部分
	for (i = 0; i < N; i++) //N控制上半部分行数
	{
    
    
		for (j = i; j < N - 1; j++) //随行数递增,空格数递减(这里每行前面的空格数分别为4,3,2, 1,0)
			printf(" ");
		for (j = 0; j < 2 * i + 1; j++) //随行数递增,“*”数递增(这里每行前面的*数分别为1,3,5,7,9)
			printf("*");
		printf("\n"); //记得换行
	}
	//下半部分,其实就是上半部分的翻转
	for (i = N - 2; i >= 0; i--) //这里i从N-2开始的,不知道为什么的可以换成N-1试试,保证秒懂
	{
    
    
		for (j = i; j < N - 1; j++) //这里的空格数刚好相反,是随行数递增的
			printf(" ");
		for (j = 0; j < 2 * i + 1; j++) //这里的“*”数则是递减的(想想图形的样子)
			printf("*");
		printf("\n"); //同样的记得换行
	}
	return 0;
}

2.0から100000までのすべての「水仙の数」を見つけて出力します。

#include <math.h>
void main(){
    
    
	int n;
	int a[6] = {
    
     0 };
	int i;
	int sum = 0;
	int count = 0;
	for (n = 0; n <= 100000; ++n){
    
     //遍历0-100000之间所有数字
		for (i = n; i; i /= 10){
    
    
			a[count] = i % 10;  //用数组a[count]将每一位存起来,用count记下数字的位数
			++count;
		}
		for (i = 0; i < count; ++i){
    
    
			sum += pow(a[i], count); //将数组中所存的数字的每一位进行对应的位数count次方并求和
		}
		if (n == sum){
    
    
			printf("%d \n", n);
		}
		count = sum = 0; //强制将count与sum归0
	}
}

3.二分探索

#include <math.h>
void main()
{
    
    
	int ar[] = {
    
     12, 23, 34, 45, 56, 67, 78, 90, 100, 120, 150, 200, 1234 };
	int n = sizeof(ar) / sizeof(ar[0]);
	int key;
	printf("input key:>");
	scanf("%d", &key);
	int low = 0;
	int high = n - 1;
	int mid, index = -1;
	while (low <= high)
	{
    
    
		mid = (low + high) / 2;
		if (key == ar[mid])
		{
    
    
			index = mid;
			break;
		}
		else if (key < ar[mid])
			high = mid - 1;
		else
			low = mid + 1;
	}
	if (index == -1)
		printf("要查找的%d不存在.....\n", key);
	else
		printf("要查找的%d在: 第%d个\n", key, index+1);
}

総括する

ここに少し紹介があり、多くの典型的な質問があります、次の関数、配列、ポインタが追加されます、言い方、この言語を学ぶために2回目は、初めてではなく、非常に異なった感じなので、今は無知です、私は物事のために何かを実装する方法を知っていますが、実装方法がごみである場合もありますが、これは書き込みが少なすぎる理由でもあるため、コードに同意する必要があります。

おすすめ

転載: blog.csdn.net/weixin_45070922/article/details/109644258