实验目的
一、了解并掌握使用指针进行编程的方法;
二、了解并掌握指针作为函数参数时函数的编写与调用方法。
实验要求
本次实验不要求提交正式实验报告,但要求实验完成后,将程序及程序的运行结果依次拷贝到一个word文档中,统一形成一个.doc文档后提交至Blackboard。文档名可用你的姓名+你的学号。
实验要求
本次实验要求定义2个函数,编写主函数调用这2个自定义函数进行验证。
(第一个函数)编写一函数
void Insert_char_to_string (char * dest_str, char * orig_str)
将源字符串orig_str中每隔一个字符插入一个字符’m’, 插入后形成的字符串存放于目的字符串dest _str中。(如源字符串为“ABCDEFG12345” ,则目的字符串应为“AmBmCmDmEmFmGm1m2m3m4m5”。
(第二个函数)编写一个函数 float FindMax(float a[], int m, int *n),找出一个大小为m的实型数组a中的最大数,以及最大数对应的下标,并将找出的最大数作为函数FindMax的返回值,最大数的下标通过指针变量n传给调用函数。
(第三个函数)编写一个函数 int FindMin(float a[], int m),找出一个大小为m的实型数组a中最小数的下标,并将其作为函数FindMin的返回值。
(主函数)编写主函数对你所编写的上述3个函数进行调用验证。主函数应包含如下功能:
1、定义两个字符数组、一个实型数组,一个用于存贮最大值的实型变量max和一个用于存贮最大值下标的变量a,如:
char DestString[100],OrigString[100];
float b[10],max;
int a,min_idx;
2、从键盘读入一个字符串存入字符数组OrigString中;调用函数Insert_char_to_string得到插入后的字符串,函数的两个输入参数为DestString,OrigString;将目的字符串显示到屏幕上。
3、从键盘读入10个数存入数组b中; 调用函数FindMax找到最大值和最大值的下标,函数的输入参数分别为b,10和&a,函数的返回值存入变量max中;将最大值和最大值的下标显示到屏幕上;调用FindMin找到最小数的下标,将其赋给变量min_idx,并将最小数和最小数的下标显示到屏幕上; 将数组b中的最大数和最小数交换,将交换后数组各元素的值显示到屏幕上。
注意:字符串要使用字符数组存贮。
实验代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Insert_char_to_string(char *dest_str, char *orig_str)
{
int len = strlen(orig_str);
int i,j = 0;
for (i = 0; i < len; i++)
{
dest_str[j++] = orig_str[i];
if (i != len - 1)
{
dest_str[j++] = 'm';
}
}
dest_str[j] = '\0';
}
float FindMax(float a[], int m, int *n)
{
int i;
float max_num = a[0];
*n = 0;
for (i = 1; i < m; i++)
{
if (a[i] > max_num)
{
max_num = a[i];
*n = i;
}
}
return max_num;
}
int FindMin(float a[], int m)
{
int min_idx = 0;
int i;
for (i = 1; i < m; i++)
{
if (a[i] < a[min_idx])
{
min_idx = i;
}
}
return min_idx;
}
int main()
{
char DestString[100], OrigString[100];
float b[10], max;
int a, min_idx;
printf("请输入一个字符串:");
gets(OrigString);
Insert_char_to_string(DestString, OrigString);
printf("插入后的字符串为:%s\n", DestString);
printf("请在接下来输入10个数字,以空格分隔:\n");
int j;
for (j = 0; j < 10; j++)
{
scanf("%f", &b[j]);
}
max = FindMax(b, 10, &a);
printf("数组b中的最大数为%f,其下标为%d\n", max, a);
min_idx = FindMin(b, 10);
printf("数组b中的最小数为%f,其下标为%d\n", b[min_idx], min_idx);
float temp = b[a];
b[a] = b[min_idx];
b[min_idx] = temp;
printf("交换后数组中各元素的值为:\n");
int i;
for (i = 0; i < 10; i++)
{
printf("%f ", b[i]);
}
printf("\n");
return 0;
}