[] Estructura de datos y estudio algoritmo de notas - "notas" algoritmo -3

función

  • La sintaxis básica de la función
    devuelve el tipo del nombre de la función (parámetro parámetro de tipo) {
    cuerpo de la función
    }

  • Valor se pasa: los parámetros entre paréntesis son cada llamada parámetro de la función, los parámetros reales de la llamada es el argumento

  • Matriz como un argumento de función: Cuando llamada real acaba de escribir el nombre de la matriz.
    Modificación en la función de los elementos de la matriz es equivalente a la modificación del elemento de la matriz original (que es diferente de las variables locales ordinarias)
    Sin embargo, mientras que la matriz se puede utilizar como parámetros, pero parece que no se permite que el tipo de retorno.
    Practica
    ejercicios 7-5 cadena en el almacenamiento inversa

Escribe el título describe una cadena de función almacenada en el orden inverso. Introduzca una cadena en la función principal, llamando a la función, después de la cadena de la cadena almacenada en el orden inverso, y salidas. Introduzca
su cadena. La producción de la cadena de caracteres cadena de entrada almacena en orden inverso. Una línea separada.

#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;
}

cuerdas vocales 7-7 Copia Problema

Título Descripción
escribir una función que copia una vocales cadena a otra cadena. Introduzca una cadena en la función principal, llamando a esta función, para dar una cadena de una cadena del componente y salidas vocal.
Introduzca una cadena (una línea de caracteres).

La cadena de cadena de salida compuesta por todos los vocales. Final de ajuste de línea.

- [x] ha encontrado un problema

#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 no inicializado en la función principal [100] = {}; en el caso, el resultado final será ilegible de entrada (cadena de conversión correcto seguido por un grupo de "caliente")
solución: para inicializar str2, pero todavía no sabe cómo explicar el problema.

puntero

  • Un puntero es un tipo entero sin signo
  • variable de puntero utilizado para almacenar punteros, después de un tipo de datos / * precedida por una variable puntero indica que se trata
	int *p;//C写法
	int* p;//C++写法
	int* p1, p2, p3;//只有p是指针变量
	int *p1, *p2, *p3;//三个都是指针变量
  • Lo cual, int * es un tipo de variable, p está detrás del nombre de la variable, la dirección se asigna a p, p * No
  • * Recuperar y identificador de contenido dirección de caracteres
  • tipos de puntero se pueden utilizar como el tipo de los parámetros de función, entonces considerado como la dirección de una variable pasada a la función, si se realizan cambios para hacer frente a los elementos de esta función, los datos originales serán cambiados de hecho, esto se llama dirección de entrega.
#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;
}

Tal como se usa en el presente documento, los datos * p almacenan en la modificación de dirección, es decir, un cambio en sí mismo, cambiando el valor de a.

  • Usando el puntero como un argumento, el intercambio de dos números
#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;
}
  • No hay copia de referencia, sólo para la variable original de un alias
    - [] ha detectado un problema: ¿Cuál es la referencia?

Ejercicio
C-10.1

Descripción Título
de entrada dos enteros A y B, de acuerdo con la primera pequeña secuencialmente grande salidas a y b. Por favor, prestar atención a la forma en que las variables se compararon mediante un puntero y la salida.

de entrada dos enteros separada por espacios a y b.

A y B de salida por la primera pequeña orden grande, separados por espacios. Tenga en cuenta que el extremo de salida de la línea de recapitulación.

#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 lenguaje C

Descripción Título de entrada a, b, C tres números enteros, de acuerdo con la primera pequeña secuencialmente grande da salida a, b y c. Por favor, prestar atención a la forma en que las variables se compararon mediante un puntero y la salida.

espacio de entrada separada tres enteros a, b y c.

De salida a, b y c de acuerdo con la primera pequeña orden grande, separados por espacios. Tenga en cuenta que el extremo de salida de la línea de recapitulación.

#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

Descripción cadena define un tema determinado Char * a = "Amo a China !", Lee entero n,
la salida que lleva un a = a + n después de esta asignación que corresponde a un puntero de cadena de caracteres.

Introduzca un número entero n, para asegurar que 0 <= n <13.

cadena de salida se describe en el sujeto después de una asignación correspondiente. Tenga en cuenta que el extremo de salida de la línea de recapitulación.

#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

Descripción Título entrada de cadena 3, en orden ascendente de salida.
El método requiere el uso de un procesamiento de puntero.
3 líneas de entrada, cada línea de una cadena. Asegúrese de que la longitud de cada cuerda no exceda del 20.
De salida con el fin de pequeñas a grandes salidas de tres cadenas, cada línea de la cadena.
Tenga en cuenta que el extremo de salida de la línea de recapitulación.

- [] ha encontrado un problema

#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

Descripción Título
enteros de entrada 10, en donde el primer número y el número mínimo de transductores,
el número y el número máximo del último cambio. Se requiere tres funciones implementadas por,
respectivamente, los 10 dígitos, el proceso, el número de la salida 10.
El método requiere el uso de un procesamiento de puntero.
espacios de entrada 10 separados por un número entero.
10 para la salida después de la descripción de los enteros sujetos operación, cada número entero de la salida después de un espacio. Tenga en cuenta que el extremo de salida de la línea de recapitulación.

#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;
}
Publicado 43 artículos originales · ganado elogios 4 · Vistas 1224

Supongo que te gusta

Origin blog.csdn.net/weixin_42176221/article/details/99691333
Recomendado
Clasificación