三个整数排序
一、实验目的
- 掌握指针的概念,会定义并使用指针变量。
- 学会使用数组的指针和指向数组的指针变量。
- 学会使用字符串的指针和指向字符串的指针变量。
- 学会使用指向函数的指针变量。
二、实验内容
1、输入三个整数,用指针实现从大到小排序
(1)编程提示
本质上是两个数的比较。三个数比较时,a和b比较,a和c比较,b和c比较。
输入样例:
88 22 55
输出样例:
88 55 22
代码:
#include <stdio.h>
void swap(int *a,int *b)
{int t;t=*a;*a=*b;*b=t;
}
void exchange(int *p1,int *p2,int *p3)
{if(*p1<*p2)swap(p1,p2);if(*p1<*p3)swap(p1,p3);if(*p2<*p3)swap(p2,p3);
}
int main()
{int a,b,c;scanf("%d %d %d",&a,&b,&c);int *p1=&a,*p2=&b,*p3=&c;exchange(p1,p2,p3);printf("%d %d %d",a,b,c);return 0;
}
10个整数排序
实验7 函数
一、实验目的
- 掌握指针的概念,会定义并使用指针变量。
- 学会使用数组的指针和指向数组的指针变量。
- 学会使用字符串的指针和指向字符串的指针变量。
- 学会使用指向函数的指针变量。
二、实验内容
2.将10个整数按由大到小排序输出。
(1)编程提示:利用冒泡法排序。
输入样例:
9 7 1 6 8 4 3 10 2 5
输出样例:
输出格式“%d ”
1 2 3 4 5 6 7 8 9 10
代码:
用指针知识统计各种字符的个数
实验7 函数
一、实验目的
- 掌握指针的概念,会定义并使用指针变量。
- 学会使用数组的指针和指向数组的指针变量。
- 学会使用字符串的指针和指向字符串的指针变量。
- 学会使用指向函数的指针变量。
二、实验内容
3.输入一行字符,用指针知识统计其中的大写字母、小写字母、空格、数字和其它字符的个数。
(1)编程提示
利用if的第三种形式,判断各字符并进行计数。
输入样例:
输入一行字符,例如
chi n123CDEH# !Tt @
输出样例:
输出格式数据格式如下,用一个空格分隔
大写字符 小写字母 空格 数字字符 其他字符
5 5 3 3 3
#include <stdio.h>
int main () {char str[100],*p=str;gets(p);int bchar_number=0,space_number=0,schar_number=0,num_number=0,other=0;for(;*p!='\0';p++){if(*p>='A' && *p<='Z') bchar_number++;else if(*p>='a' && *p<='z')schar_number++;else if(*p==' ')space_number++;else if(*p>='0' && *p<='9')num_number++;elseother++;}printf("%d %d %d %d %d\n",bchar_number,schar_number,space_number,num_number,other);return 0;
}
用指针知识按要求输出5×5矩阵
实验7 函数
一、实验目的
- 掌握指针的概念,会定义并使用指针变量。
- 学会使用数组的指针和指向数组的指针变量。
- 学会使用字符串的指针和指向字符串的指针变量。
- 学会使用指向函数的指针变量。
二、实验内容
4.编写函数,将一个5×5矩阵的最大值放在中心,四角按从左到右,从上到下的顺序存放最小值。
编程提示:利用打擂台法求最大值和最小值。
输入样例:
输入数据,之间用空格分隔,例如
11 12 13 14 15
21 31 66 88 23
10 42 68 31 35
65 68 99 82 29
71 72 73 74 75
输出样例:
输出格式数据格式如下,用一个空格分隔
10 71 75 14 11
21 31 66 88 23
15 42 99 31 35
65 68 68 82 29
12 72 73 74 13
代码:
/*11 12 13 14 15
21 31 66 88 23
10 42 68 31 35
65 68 99 82 29
71 72 73 74 75
输出样例:
输出格式数据格式如下,用一个空格分隔
10 71 75 14 11
21 31 66 88 23
15 42 99 31 35
65 68 68 82 29
12 72 73 74 13 */
#include <stdio.h>
void fun(int *p,int n)
{int *pmax=p,*pmin=p,*m=p,t; //四个指针均指向一维空间的起始单元//找最大数和最小数for(m=m+1;m<p+n;m++){if(*m>*pmax)pmax=m;if(*m<*pmin)pmin=m;}//把最大数放到中心位置t = *(p+2*5+2);*(p+12) = *pmax;*pmax = t;//把最小值放到左上角t = *p;*p = *pmin;*pmin = t;//找次小数pmin = p+1;m = p + 2;for(; m<p+n;m++){if(*m < *pmin)pmin = m;}//把次小数置换到右上角t = *(p+4);*(p+4) = *pmin;*pmin = t;//找次次小数pmin = p+1;m = p+2;for(; m<p+n;m++){if( (*m<*pmin)&&(m!=(p+4)) )pmin = m;}//把次次小数置换到左下角 [4][0]——>4*5+0t = *(p+20);*(p+20) = *pmin;*pmin = t;//找出此次次次小数pmin = p+1;m = p+2;for(; m<p+n;m++){if( (*m<*pmin)&&(m!=(p+4))&&(m!=(p+20)) )pmin = m;}//把次次次小数置换到右下角 [4][4]——>24t = *(p+24);*(p+24) = *pmin;*pmin = t;
}int main()
{int a[5][5],i,j;for(i=0;i<5;i++){for(j=0;j<5;j++)scanf("%d",&a[i][j]);}fun(*a,25);for(i=0;i<5;i++){for(j=0;j<4;j++)printf("%d ",a[i][j]);printf("%d",a[i][j]);printf("\n");}return 0;
}
求字符串的长度
实验7 函数
一、实验目的
- 掌握指针的概念,会定义并使用指针变量。
- 学会使用数组的指针和指向数组的指针变量。
- 学会使用字符串的指针和指向字符串的指针变量。
- 学会使用指向函数的指针变量。
二、实验内容
5.编写函数,求字符串的长度。
编程提示:在遍历字符串时,进行计数,直到遇到’\0’结束。
输入样例:
输入数据,之间用空格分隔,例如
abcdefghi
输出样例:
输出格式数据格式如下,用一个空格分隔
9
代码:
#include<stdio.h>
int main(){char str[256];char *p=str;gets(p);while((*p)!='\0')p++;printf("%d",p-str);return 0;
}
用函数指针实现数组排序
一、实验目的
- 掌握指针的概念,会定义并使用指针变量。
- 学会使用数组的指针和指向数组的指针变量。
- 学会使用字符串的指针和指向字符串的指针变量。
- 学会使用指向函数的指针变量。
二、实验内容
6.输入10个整数进行排序并输出,其中用函数指针编写一个通用的排序函数,如果输入1,程序实现数据按升序排序;如果输入2,程序实现数据按降序。
(1)编程提示
定义ascend函数,决定按升序排序;定义descend函数,决定按降序排序;定义sort函数,实现排序的算法,根据实参,确定指向函数的指针变量调用ascend函数还是descend函数。
输入样例:
输入数据,之间用空格分隔
输入样例1:
2 3 4 9 10 8 7 6 5 1
1
输出样例:
输出格式数据格式如下,用一个空格分隔;最后一个数字后没有空格。
输出样例1:
1 2 3 4 5 6 7 8 9 10
输入样例2:
2 3 4 9 10 8 7 6 5 1
2
输出样例2
10 9 8 7 6 5 4 3 2 1
代码:
#include <stdio.h>
void sort_1(int a[],int n) //case为1,升序排列
{int i,j,*p=a;int t;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++)if(*(a+i)>*(a+j)){t=*(a+i);*(a+i)=*(a+j);*(a+j)=t;}}
}
void sort_2(int a[],int n) //case为2,降序排列
{int i,j,*p=a;int t;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++)if(*(a+i)<*(a+j)){t=*(a+i);*(a+i)=*(a+j);*(a+j)=t;}}
}int main()
{int i,j,a[10];int flag;for(j=0;j<10;j++)scanf("%d",&a[j]);scanf("%d",&flag);switch(flag){case 1:sort_1(a,10);break;case 2: sort_2(a,10);break;}printf("%d",*(a));for(i=1;i<10;i++)printf("% d",*(a+i));return 0;
}