指针 实验~
前段时间 我说 要写一个 关于 指针 实验的 东西 然后 由于 放假 国庆 没有 写完了 还是发上来吧~已经 写到 第三个了 其实 都是 差不多的 很简单地说 现在感觉 但是 链表....

晕乎乎~
程序代码:# include <stdio.h>
# include <stdlib.h>
void one (void);//主菜单函数
void bigan (void);//本函数用于开始 选择菜单
void play (int);//此函数用于判断用户选择
void zhizhen_1 (void);//以下函数用于运行 1.指针和变量
void zhizhen_2 (void);//2 . 指针和字符
void zhizhen_3 (void);//3 . 指针和一维数组
void zhizhen_4 (void);//4 . 指针和多维数组
void zhizhen_5 (void);//5 . 指针和字符串
void zhizhen_6 (void);//6 . 指针与函数
void zhizhen_1_x (int);//此函数用于对指针内分菜单的选择判断
void zhizhen_1_x_1 (void);//此函数用于使用指针对变量值进行输入
void zhizhen_1_x_2 (void);//此函数用于使用指针对变量值进行更改
void zhizhen_1_x_3 (void);//此函数用于在调用函数中使用指针对一个以上的变量值进行更改
void zhizhen_1_x_3_1 (char *,char *,char *);//此函数用于zhizhen_1_x_3的分函数实现指针改值的功能
void zhizhen_1_x_4 (void);//此函数是指针和变量的一个例题
void zhizhen_1_x_4_1 (char *,char *,char *);//此函数用于 排序
void zhizhen_3_x (int);//此函数用于对指针内分菜单的选择判断
void zhizhen_3_x_1 ();//使用指针对一维数组进行输入
void zhizhen_3_x_2 ();//使用指针对一维数组进行更改
void zhizhen_3_x_3 ();//在调用函数中使用指针对一维数组进行更改
void zhizhen_3_x_4 ();//对一维数组进行排序使用指针
void zhizhen_3_x_5 ();//一个例题
void zhizhen_yuanma (int);//此函数用于判断是否输出源代码
void fanhui (void);//此函数用于使用户选择返回
void zhizhen_1_x_1_y (void);//源代码程序
int zhizhen_pan_duan (void);//判断输入
void fanhui_1 ();//此函数用于使用户选择返回
void zhizhen_yuanma_1 (int);
int main (void)//函数作用 调用主菜单 函数
{
one ();
return 0;
}
void one ()//主菜单函数
{
char a;//定义字符a用于用户激活程序
printf ("********************************************************************************\n");
printf ("** 你好 **\n");
printf ("** 很高兴你使用本程序 **\n");
printf ("** 本程序的功能是实验指针的我所知的用法 **\n");
printf ("** 源代码在运行完后都会给出 **\n");
printf ("** 其次会加上我的想法个人意见 **\n");
printf ("** 如果想运行请按回车键 **\n");
printf ("** 小偌 **\n");
printf ("********************************************************************************\n");
a = getchar ();
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
if (a==1)
{
bigan ();
}
else
{
bigan ();
}
}
void bigan ()//本函数用于开始 选择菜单
{
int a;//用于存放用户选择
printf ("\n1 . 指针和变量\n\n2 . 指针和字符\n\n3 . 指针和一维数组\n\n4 . 指针和多维数组\n\n5 . 指针和字符串\n\n6 . 指针与函数\n\n");
printf ("请输入你的选择........");
scanf ("%d",&a);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
play (a);//此函数用于判断用户选择
}
void play (int a)//此函数用于判断用户选择
{
if (a==1)//以下选择使用户进入其选择的
zhizhen_1 ();
else if (a==2)
zhizhen_2 ();
else if (a==3)
zhizhen_3 ();
else if (a==4)
zhizhen_4 ();
else if (a==5)
zhizhen_5 ();
else if (a==6)
zhizhen_6 ();
else
{
printf ("\n\n对 不 起 输 入 错 误 请 重 新 选 择..........\n\n\n");
bigan ();
}
}
void zhizhen_1 ()//指针和变量
{
int a;//用于存放用户选择
printf ("\n\n你可以选择你需要实验的函数\n1.使用指针对变量值进行输入\n2.使用指针对变量值进行更改\n3.在调用函数中使用指针对一个以上的变量值进行更改\n4.一个例题\n");
printf ("请输入你的选择........");
scanf ("%d",&a);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
zhizhen_1_x (a);//此函数用于判断用户选择
}
void zhizhen_1_x (int a)//此函数用于判断用户选择
{
if (a==1)//以下选择使用户进入其选择的
zhizhen_1_x_1 ();//此函数用于使用指针对变量值进行输入
else if (a==2)
zhizhen_1_x_2 ();//此函数用于使用指针对变量值进行更改
else if (a==3)
zhizhen_1_x_3 ();//此函数用于在调用函数中使用指针对一个以上的变量值进行更改
else if (a==4)
zhizhen_1_x_4 ();//此函数是指针和变量的一个例题
else
{
printf ("\n\n对 不 起 输 入 错 误 请 重 新 选 择..........\n\n");
zhizhen_1 ();
}
}
void zhizhen_1_x_1 ()//此函数用于使用指针对变量值进行输入
{
char a, * p;//定义变量及指针
p = &a;
printf ("\n\n请随机输入一个值 本实验程序 会将它输出\n");
scanf ("%c", p);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("你输入的东西是%c\n", * p);
fanhui ();
}
void zhizhen_yuanma (int b)//此函数用于判断是否输出源代码
{
if (b==1)
zhizhen_1_x_1_y ();
else if (b==2)
zhizhen_1 ();
else if (b==3)
bigan ();
else
{
printf ("\n\n对 不 起 输 入 错 误 请 重 新 选 择..........\n\n");
zhizhen_1 ();
}
}
void zhizhen_1_x_2 ()//此函数用于使用指针对变量值进行更改
{
char a = 78, * p;
p = &a;
printf ("\n\n首先 请输入一个数字 本程序会使用指针更改它的值\na = %c\n", a);
scanf ("%c", p);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("a = %c\n", a);
fanhui ();
}
/*void zhizhen_1_x_3 ()//此函数用于在调用函数中使用指针对一个以上的变量值进行更改
{
int a = 5, b = 6, c = 7;
printf ("\n首先a = %d,b = %d,c = %d\n",a,b,c);
printf ("本函数将在调用函数中更改这三个数的值\n");
zhizhen_1_x_3_1 (a,b,c);
printf ("现在a = %d,b = %d,c = %d\n",a,b,c);
fanhui ();
}*/
/*void zhizhen_1_x_3_1 (int a,int b,int c)
{
int * p, * q, * w;
p = &a,q = &b,w = &c;
printf ("请输入数字a = "); 这里错了 因为形参另外分配的地址
scanf ("%d", &a);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("\n请输入数字b = ");
scanf ("%d", &b);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("\n请输入c = ");
scanf ("%d", &c);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
* p = a, * q = b, * w = c;
}*/
void zhizhen_1_x_3 ()//此函数用于在调用函数中使用指针对一个以上的变量值进行更改
{
char a = 'z', b = 'x', c = 'v';
char * p, * q, * w;
p = &a,q = &b,w = &c;
printf ("\n首先a = %c,b = %c,c = %c\n",a,b,c);
printf ("本函数将在调用函数中更改这三个数的值\n");
zhizhen_1_x_3_1 (p, q, w);
printf ("本函数将只取输入的第一个字符\n");
printf ("现在a = %c,b = %c,c = %c\n",a,b,c);
fanhui ();
}
void zhizhen_1_x_3_1 (char * p,char * q,char * w)//此函数用于zhizhen_1_x_3的分函数实现指针改值的功能
{
printf ("请输入a = ");
scanf ("%c", p);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("\n请输入b = ");
scanf ("%c", q);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("\n请输入c = ");
scanf ("%c", w);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
}
void zhizhen_1_x_4 ()//此函数是指针和变量的一个例题
{
char a, b, c;
char * p, * q, * w;
p = &a,q = &b,w = &c;
printf ("\n\n现在这个例题是这样的,使用指针来实现三个数或者字符排序\n");
printf ("首先请输入三个数\n本程序将从小到大排序\n");
printf ("请输入a = ");
scanf ("%c", p);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("\n请输入b = ");
scanf ("%c", q);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("\n请输入c = ");
scanf ("%c", w);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("本函数将只取输入的第一个字符\n");
zhizhen_1_x_4_1 (p, q, w);
printf ("现在a = %c,b = %c,c = %c\n",a,b,c);
fanhui ();
}
void zhizhen_1_x_4_1 (char * p,char * q,char * w)//此函数用于 排序
{
char t;
int i = 0;
for (;i<=2;)
{
if (*p>=*q)
{
t = * p;
* p = * q;
* q = t;
}
if (*q>=*w)
{
t = * q;
* q = * w;
* w = t;
}
i++;
}
}
void zhizhen_2 ()//指针和字符
{
int a;//用于存放用户选择
printf ("\n\n你可以选择你需要实验的函数\n1.使用指针对字符进行输入\n2.使用指针对字符进行更改\n3.在调用函数中使用指针对一个以上的字符进行更改\n4.一个例题\n");
printf ("请输入你的选择........");
scanf ("%d",&a);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
printf ("由于字符的 我第一个也使用了 所以就一样了 抱歉\n");
zhizhen_1_x (a);//此函数用于判断用户选择
}
void zhizhen_3 ()//指针和一维数组
{
int a;//用于存放用户选择
printf ("\n\n你可以选择你需要实验的函数\n1.使用指针对一维数组进行输入\n2.使用指针对一维数组进行更改\n3.在调用函数中使用指针对一维数组进行更改\n4.对一维数组进行排序使用指针\n5.一个例题\n");
printf ("请输入你的选择........");
scanf ("%d",&a);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
zhizhen_3_x (a);////此函数用于判断用户选择
}
void zhizhen_3_x (int a)
{
if (a==1)//以下选择使用户进入其选择的
zhizhen_3_x_1 ();//使用指针对一维数组进行输入
else if (a==2)
zhizhen_3_x_2 ();//使用指针对一维数组进行更改
else if (a==3)
zhizhen_3_x_3 ();//在调用函数中使用指针对一维数组进行更改
else if (a==4)
zhizhen_3_x_4 ();//对一维数组进行排序使用指针
else if (a==5)
zhizhen_3_x_5 ();//一个例题
else
{
printf ("\n\n对 不 起 输 入 错 误 请 重 新 选 择..........\n\n");
zhizhen_3 ();
}
}
/*void zhizhen_3_x_1 ()//使用指针对一维数组进行输入
{
char a[100]; 这个 错了 错在 那里
char * p;
char b;
p = &a[0];
printf ("\n\n请输入你需要输入的字符按回车结束\n");
for (;1;)
{
scanf ("%c", p);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
p++;
printf ("请问输入完毕了吗?输入完成请输入Y否则输入N\n");
loop: scanf ("%c", &b);//此处加入GOTO是为了方便 因为 不想在写一个调用函数了
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
if (b=='y'||b=='Y')
{
break;
}
else if (b=='n'||b=='N')
{
}
else
{
printf ("对不起 输入错误 请重新输入\n请问输入完毕了吗?输入完成请输入Y否则输入N\n");
goto loop;
}
}
printf ("\n你输入的字符有以下这些\n");
for (j = 0;j<=100;j++)
{
printf ("%c", a[j]);
}
fanhui ();
}*/
void zhizhen_3_x_1 ()//使用指针对一维数组进行输入
{
char a[100];
char * p;
int i, j;
p = a;
printf ("\n\n请输入你需要输入的字符按回车结束\n");
for (;1;)
{
scanf ("%c", p);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
p++;
loop: i = zhizhen_pan_duan ();
if (i==0)
{}
else if (i==1)
{
break;
}
else
{
printf ("对不起输入错误请重新输入");
goto loop;
}
}
printf ("\n你输入的字符有以下这些\n");
* p = '1';
for (j = 0;1;j++)
{
if (a[j]=='1')
{
break;
}
else printf ("%c ", a[j]);
}
fanhui_1 ();
}
void zhizhen_3_x_2 ()//使用指针对一维数组进行更改
{
}
void zhizhen_3_x_3 ()//在调用函数中使用指针对一维数组进行更改
{}
void zhizhen_3_x_4 ()//对一维数组进行排序使用指针
{}
void zhizhen_3_x_5 ()//一个例题
{}
void zhizhen_4 ()//指针和多维数组
{}
void zhizhen_5 ()//指针和字符串
{}
void zhizhen_6 ()//指针与函数
{}
void fanhui ()
{
int b, * q;
printf ("\n输入1 查看源代码 输入2 返回分菜单 输入3 返回主菜单");
q = &b;
scanf ("%d", q);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
zhizhen_yuanma (b);//此函数用于判断是否输出源代码
}
void zhizhen_1_x_1_y ()
{
printf ("\n\n********************************************************************************\n");
printf (" 请查看源代码 在最后 有编号\n\n 自动返回主菜单\n");
printf ("********************************************************************************\n");
bigan ();
}
int zhizhen_pan_duan ()//判断输入
{
char b;
int i;
printf ("请问输入完毕了吗?输入完成请输入Y否则输入N\n");
scanf ("%c", &b);//此处加入GOTO是为了方便 因为 不想在写一个调用函数了
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
if (b=='y'||b=='Y')
{
return 1;
}
else if (b=='n'||b=='N')
{
return 0;
}
else
{
return 2;
}
}
void fanhui_1 ()//三号选择的判断
{
int b, * q;
printf ("\n输入1 查看源代码 输入2 返回分菜单 输入3 返回主菜单");
q = &b;
scanf ("%d", q);
fflush(stdin);//清空磁盘缓冲区 便于重复使用 以及 不影响后面
zhizhen_yuanma_1 (b);//此函数用于判断是否输出源代码
}
void zhizhen_yuanma_1 (int b)//此函数用于判断是否输出源代码
{
if (b==1)
zhizhen_1_x_1_y ();
else if (b==2)
zhizhen_3 ();
else if (b==3)
bigan ();
else
{
printf ("\n\n对 不 起 输 入 错 误 请 重 新 选 择..........\n\n");
zhizhen_3 ();
}
}
虽然 没写完啦~










