实验六 指针程序设计 要求设三个指针变量p1,p2,p3, 使p1指向三个数中最大者,p2指向次大者,p3指向最小者

发布时间:2023年12月17日

1. 从键盘输入任意三个数,要求设三个指针变量p1,p2,p3, 使p1指向三个数中最大者,p2指向次大者,p3指向最小者, 然后从大到小输出三个数。

运行时分别输入3,7,5和6,-4,2,记录运行结果。

#include <stdio.h>
int main(){
	int a,b,c;
	// 最大 , 次大 , 最小 
	int *pMax,*pMid,*pMin;
	scanf("%d,%d,%d",&a,&b,&c);
	if(a>b){
		// pMax 指 a 
		pMax=&a;
		// pMin 指 b 
		pMin=&b;
	}else {
		// pMax 指 b
		pMax=&b;
		// pMin 指 a 
		pMin=&a;
	}
	if(c<*pMin){
		// pMin 指 c
		pMin=&c;
		// pMid 指 b 
		pMid=&b;
	}
	else if(c>*pMax){
		// pMax 指 c
		pMax=&c;
		// pMid 指 a
		pMid=&a;
	}
	else{
		// pMid 指 c 
		pMid=&c;
	}
	printf("%d,%d,%d\n",*pMax,*pMid,*pMin);
	return 0;
}

2.? 求一元二次方程ax2+bx+c的根。要求用函数实现。提示:一元二次方程的求根公式:

?

#include <stdio.h>
#include <math.h>

/** 
 * x1 x2 为两个解 
 * 返回有几个解 
 */
int getSolve(int a,int b,int c,double *x1,double *x2){
	int dt = b*b-4*a*c;
	if(dt>=0){
		*x1 = (-b+sqrt(dt))/2*a;
		*x2 = (-b-sqrt(dt))/2*a;
		if(dt==0){
			return 1;
		}else{
		    return 2;
		}
	} else {
		*x1=0;
		*x2=0;
		return 0;
	}
}
int main(){
	double x1,x2;
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	if(getSolve(a,b,c,&x1,&x2)){
		printf("x1=%lf,x2=%lf\n",x1,x2);
	} else {
		printf("无解\n");
	}
	return 0;
}

3.拆分实数的整数与小数部分:输入一个实数x (0<=x<=10000) ,输出其整数和小数。自定义一个函数void splitfloat(float x, int * intpart, float *fracpart),其中x是被拆分的实数,*intpart和*fracpart分别是将实数x拆分出来的整数部分与小数部分。自定义主函数,并在其中调用splitfloat()函数。试编写相应函数。

输入输出示例

Enter x: 5.34

The intpart is 5

The fracpart is 0.34

#include <stdio.h>
void splitfloat(float x, int *intpart, float *fracpart){
	// 获取x的整数部分 
	*intpart = (int)x;
	// 获取x的小数部分 
	*fracpart = x - (int)x;
}
int main(){
	int intpart;
	float x,fracpart;
	printf("Enter x:");
	scanf("%f",&x);
	splitfloat(x, &intpart,&fracpart);
	printf("The intpart is %d\n",intpart);
	printf("The fracpart is %.2lf\n",fracpart);
	return 0;
}

4.删除字符:输入一个字符串s,再输入一个字符c,将字符串s中出现的所有字符c删除。要求定义并调用函数delchar(s,c),它的功能是将字符串s中出现的所有c字符删除。试编写相应程序。

输入输出示例

Enter s string: Nice to meet you!

Enter a character: o

Nice t meet yu!

#include <stdio.h>
#include <string.h>
void delchar(char s[],char c){
	char copyS[100];
	int i,j;
	for(i=0,j=0;s[i]!='\0';i++){
		// 发现字符c
		if(s[i]==c){
			continue;
		}
		copyS[j] = s[i];
		j++;
		// printf("%c\t",s[i]);
	}
	strcpy(s,copyS);
}
int main(){
	char c,s[100]="\0";
	printf("Enter s string: ");
	gets(s);
	printf("Enter s character: ");
	scanf("%c",&c);
	delchar(s,c);
	puts(s);
	return 0;
}

5. 编写函数int charAt(char c, char s[], int begin),判断某个字符c在字符串s中出现的位置,从begin个字符开始判断,输出字符c首次出现的位置,如果begin开始的字符串中不存在字符c,输出-1。编写主程序,输入一个字符和一个字符串,利用上面的函数,输出字符在字符串中出现的次数,并输出字符出现的每一个位置。(字符串相关内容在教材第9章)

输入输出示例1

Hello world

o

5,8,字符o在字符串Hello world中出现了2次。

输入输出示例2

Hello world

a

字符a不在字符串Hello world中

#include <stdio.h>
#include <string.h>
int charAt(char c, char s[], int begin){
	int cnt=0;
	int i;
	for(i = begin-1;s[i]!='\0';i++){
		// 如果发现 c 字符 
		if(s[i]==c){
			cnt++;
			printf("%d,",i+1);
		}
	}
	// 如果 cnt 是 0 就返回-1 
	return (cnt)?cnt:-1;
}
int main(){
	char c,s[100]="\0";
	gets(s);
	scanf("%c",&c);
	// 从第一个字符开始判断 
	int cnt = charAt(c,s,1);
	if(cnt != -1){
		printf("字符%c在字符串%s中出现了%d次。\n",c,s,cnt);
	} else {
		printf("字符%c不在字符串%s中\n",c,s);
	}
	return 0;
}

文章来源:https://blog.csdn.net/m0_46745664/article/details/134991920
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。