[]データ構造とアルゴリズムの研究ノート - 「アルゴリズム・ノート」-3

機能

  • 関数の基本的な構文は、
    関数名(パラメータタイプパラメータ){タイプ返す
    関数本体
    }

  • 値が渡されます。カッコ内のパラメータは、各関数のパラメータと呼ばれ、コールの実際のパラメータは、引数であります

  • 実際の呼び出しは、単にアレイの名前を書く:関数の引数として配列。
    配列要素の機能における改変は、(通常のローカル変数とは異なる)は、元の配列要素の変形に相当する
    配列をパラメータとして用いることができるが、しかし、しかし戻り型が許可されないように見えます。
    練習は
    逆ストレージに7-5文字列を行使する

逆の順序で保存されたファンクション文字列を記述するタイトルを書きます。逆の順序、出力に格納されている文字列への文字列の後に、メイン関数で、関数を呼び出して文字列を入力します。入力し
、彼の文字列を。入力文字列の文字列の出力は逆の順序で格納されます。別の行。

#include <cstdio>
#include<cstring>

void k(char s1[], char s2[])
{
	int n = strlen(s1);
	for (int i = 0; i < n; i++)
	{
		 s2[i]= s1[n-i-1] ;
	}
}
 
int main()
{
	char str1[100], str2[100] = {};
	scanf("%s", str1);
	k(str1, str2);
	printf("%s",str2);
	return 0;
}

7-7コピー母音問題の文字列

タイトル説明は、
別の文字列にそのコピーした文字列の母音関数を記述します。母音成分や出力の文字列の文字列を与えるために、この関数を呼び出すことで、メイン関数に文字列を入力します。
文字列(文字の行)を入力します。

すべての母音で構成される出力文字列文字列。ラインラップの終わり。

- [X]は、問題が発生しました

#include <cstdio>
#include<cstring>

void vowels(char s1[], char s2[])
{
	int n = strlen(s1),j=0;
	for (int i = 0; i < n; i++)
	{
		if ((s1[i] == 'a') || (s1[i] == 'e') || (s1[i] == 'i') || (s1[i] == 'o') || (s1[i] == 'u'))
		{
			s2[j] = s1[i];
			j++;
		}
	}
}
 
int main()
{
	char str1[100], str2[100];//*
	scanf("%s", str1);
	vowels(str1, str2);
	printf("%s", str2);
	return 0;
}

; STR2メイン関数[100] = {}で初期化されていない場合には、最終的な結果は、入力文字化けする(正しい変換文字列は、「ホット」の束が続く)
STR2を初期化するために、まだどのようにわからない:溶液問題を説明します。

ポインタ

  • ポインタは、符号なし整数型であります
  • / *ポインタ変数が先行するデータ・タイプは、これがあることを示した後、格納ポインタに使用されるポインタ変数
	int *p;//C写法
	int* p;//C++写法
	int* p1, p2, p3;//只有p是指针变量
	int *p1, *p2, *p3;//三个都是指针变量
  • 、INTは*変数の型であり、pはアドレスをpに代入され、変数名の後ろにある、ない* P
  • *&アドレス文字のコンテンツ識別子を取得
  • ポインタ型は、これはと呼ばれ、あなたがこの機能の要素に対処するための変更を加えた場合、元のデータが実際に変更されます、関数に渡された変数のアドレスと考え、その後、関数のパラメータの型として使用することができますアドレスが配信しました。
#include <cstdio>
#include<cstring>

void change(int* p) {
	*p = 233;
}

int main()
{
	int a = 1;
	int* p = &a;
	change(p);
	printf("%d\n",a);
	return 0;
}

本明細書で使用する場合、* Pデータの値を変更する、すなわち、Aが自分自身を変更する、アドレス変更に格納されています。

  • 2つの数の引数としてポインタを使用して、為替
#include <cstdio>
#include<cstring>

void swap(int* pa,int* pb) {
	int temp;
	temp = *pa;
	*pa = *pb;
	*pb = temp;
}

int main()
{
	int a = 1, b = 2;
	int* pa = &a;
	int* pb = &b;
	swap(pa, pb);
	printf("a=%d,b=%d\n",a,b);
	return 0;
}
  • ノー参照コピー、単なるエイリアスから元の変数に
    - []問題が発生しました:参照は何ですか?

運動
C-10.1

説明タイトル
入力二つの整数、bは、最初の大きな小順次に応じ及びBを出力します。変数はポインタと出力を用いて比較した方法に注意してください。

スペースで区切られた入力二つの整数aとb。

スペースで区切られた最初の大きな小さいため、によってA及びB出力。行の折り返しの出力端ことに注意してください。

#include <cstdio>
#include<cstring>

void func(int* pa,int* pb) {
	int temp;
	if (*pa <= *pb)
	{
		temp = *pa;
		*pa = *pb;
		*pb = temp;
	}
}

int main()
{
	int a , b ;
	scanf("%d %d", &a, &b);
	int* pa = &a;
	int* pb = &b;
	func(pa, pb);
	printf("%d %d\n",a,b);
	return 0;
}

10.2 C言語

a、b、cの出力の最初の大きな小順番に従って説明タイトル入力A、B、C三つの整数、。変数はポインタと出力を用いて比較した方法に注意してください。

入力空間は三つの整数、a、b及びcを分離しました。

スペースで区切られた最初の大きな小順序に従って出力A、BおよびC。行の折り返しの出力端ことに注意してください。

#include <cstdio>
#include <cstring>

void change(int* p1, int* p2)
{
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

int main()
{
	int a , b,c ;
	scanf("%d %d %d", &a, &b,&c);
	int* pa = &a;
	int* pb = &b;
	int* pc = &c;
	if (*pb < *pc) change(pb, pc);
	if (*pa < *pb) change(pa, pb);
	if (*pb < *pc) change(pb, pc);
	printf("%d %d %d\n",a,b,c);
	return 0;
}

C-10.10

説明Stringを定義し、特定のトピックはchar * A =「私は中国を愛して !」、 読み込み整数nは、
文字列のポインタに対応するA = A + nの後、この割り当てを運ぶ出力。

整数を入力してN、0 <= N <13ことを確実にします。

出力列は、対応する割り当て後に対象に記載しました。行の折り返しの出力端ことに注意してください。

#include <cstdio>
#include <cstring>


int main()
{
	char str[14] = "I love China!";
	char* a = str;
	int t;
	scanf("%d", &t);
	for (int i = t; i < 13; i++)
	{
		printf("%c", *(a + i));
	}
	return 0;
}

C-10.15

説明タイトル出力の小さい順に文字列入力3、。
この方法は、ポインタ処理の使用を必要とします。
3本の入力ライン、ストリングの各行。各文字列の長さが20を超えていないことを確認してください。
小規模から大出力の3つの文字列、各文字列ラインに順に出力します。
行の折り返しの出力端ことに注意してください。

- []問題が発生しました

#include "stdafx.h"
#include <cstdio>
#include <cstring>

void change(char* str1,char* str2)
{
	char temp;
	temp = *str1;
	*str1 = *str2;
	*str2 = temp;
}

int main()
{
	char stra[10], strb[10], strc[10];
	scanf("%s\n%s\n%s",stra,strb,strc);
	char *a=stra, *b=strb, *c=strc;
	if (strcmp(a, b) > 0)	change(a, b);
	if (strcmp(b, c) > 0)	change(b, c);
	if (strcmp(a, b) > 0)	change(a, b);
	printf("%s\n%s\n%s", stra, strb, strc);
	return 0;
}

C-10.16

説明タイトル
入力整数10、前記第一の数とトランスデューサの最小数、
番号及び最後の変更の最大数。それは、によって実現三つの機能が必要
それぞれ、10桁、プロセス、出力10の数。
この方法は、ポインタ処理の使用を必要とします。
入力スペース10は、整数によって分離しました。
操作対象整数、空間後の出力の各整数の説明の後出力10。行の折り返しの出力端ことに注意してください。

#include <cstdio>
#include <cstring>

void input(int* a)
{
	for (int i = 0; i <= 9; i++)
	{
		scanf("%d", a+i);//这里到底要不要取址
	}

}

void change(int* a)
{
	/**(a + 9)=999;*/
	int *min,*max;
	min =a; max = (a + 9);//这里之前写错了
	for (int i = 0; i <= 9; i++)
	{
		if (*(a+i) <= *min)		min = (a + i);
		if (*(a + i) >= *max)	max = (a + i);
	}
	int temp;
	temp = *a;
	*a = *min;
	*min = temp;
	temp = *(a+9);
	*(a + 9) = *max;
	*max = temp;
}

void output(int* a)
{
	for (int i = 0; i <= 9; i++)
	{
		printf("%d ",*( a + i));//这里到底要不要取址
	}
}

int main()
{
	int a[10];
	int *p = a;
	input(p);
	change(p);
	output(p);
	return 0;
}
公開された43元の記事 ウォンの賞賛4 ビュー1224

おすすめ

転載: blog.csdn.net/weixin_42176221/article/details/99691333