Skip to content

Latest commit

 

History

History
296 lines (220 loc) · 4.83 KB

[题解]六、指针.md

File metadata and controls

296 lines (220 loc) · 4.83 KB

六、指针

程序片段编程题

实验07-1:利用指针实现拆分实数

【问题描述】拆分实数的整数和小数部分:要求自定义一个函数void splitfloat(float x,int *intpart,flaot *fracpart)。其中x是要被拆分的实数,intpart和fracpart分别是将实数拆分出来的整数和小数部分。通过定义的主函数,编写对应的splitflaot函数内容。 【样例输入】

12.4567

【样例输出】

The intpart is 12
The fracpart is 0.456700
#include<stdio.h>
#include<stdlib.h>
void splitFloat(float x,int *intpart,float *fracpart){

}

int main(){
	float x,fp;
	int ip;
	scanf("%f",&x);
	splitFloat(x,&ip,&fp);
	printf("The intpart is %d\n",ip);
	printf("The fracpart is %f\n",fp);
}
void splitFloat(float x,int *intpart,float *fracpart){
	*intpart=abs(x);
	*fracpart=x-abs(x);
}

实验07-2:使用函数进行选择法排序

【问题描述】定义函数void sort(int a[], int n),用选择法对数组a中的元素升序排序。主函数中输入n(n<=10)再输入n个数放入数组,调用函数排序后输出数组内容。 【样例输入】

6
1 5 -9 2 4 -6

【样例输出】

-9 -6 1 2 4 5
#include<stdio.h>
void sort(int a[], int n){

}

int main(){
	int a[10],n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	sort(a,n);	
	for(int i=0;i<n;i++)
		printf("%d ",a[i]);
	
}
void sort(int a[], int n){
	int t;
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			if(a[i]<a[j]){
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
}

实验07-3:在数组中查找指定元素

【问题描述】输入一个正整数n,再输入n个整数存入数组中,再输入一个整数x,在数组中查找x,如果找到则输出相应的下标,否则输出“Not found”。要求定义并调用函数search(list,n,x),其功能是在数组中查找元素x,若找到则返回相应下标,否则返回-1; 【样例输入】

3
1 2 -6
2

【样例输出】

1
#include<stdio.h>
void printArray(int a[],int n){

}
void setArray(int a[],int n){

}
int search(int list[],int n,int x){

}

int main(){
	int a[10],n,r,x;
	scanf("%d",&n);
	setArray(a,n);
	scanf("%d",&x);
	r=search(a,n,x);
	if(r>=0)
		printf("%d\n",r);
	else
		printf("Not found\n");	
}
void printArray(int a[],int n){
	for(int i=0;i<n;i++)
		printf("%2d ",a[i]);
	printf("\n");
}
void setArray(int a[],int n){
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
}
int search(int list[],int n,int x){
	for(int i=0;i<n;i++) {
		if(x==list[i])
			return i;
	}
return -1;
}

实验07-4:字符串逆序

【问题描述】设计一个函数void f(char *p),对p指向的字符串进行逆序,要求函数不能定义任何数组、不能调用任何字符串处理函数。在主函数中输入字符串,调用f(),输出逆序后的字符串。 【样例输入】

abcd

【样例输出】

dcba
#include<stdio.h>
void f(char *p){
}
int main(){
	char st[20];
	scanf("%s",st);
	f(st);
	printf("%s",st);	
}
void f(char *p){
char ch;
int i,k=0;
	for(i=0;*(p+i)!='\0';i++)
		k++;
	for(i=0;i<k/2;i++){
    	ch=*(p+i);
    	*(p+i)=*(p+k-i-1);
    	*(p+k-i-1)=ch;
  	}
}

实验07-6:使用函数实现字符串复制

【问题描述】输入一个字符串t和正整数m,将字符串t中从第m个字符开始的全部字符复制到字符串s中,再输出字符串s。要求使用字符指针定义并调用函数strmcpy(s,t,m),其功能是将字符串t中的第m个字符开始的全部字符,复制到串s中。 【样例输入】

happy new year
7

【样例输出】

new year
#include<stdio.h>
void strmcpy(char *st,char *tt,int m){
	
}

int main(){
 	char st[20],tt[20],ch;
 	int i=0,m;
 	scanf("%c",&ch);
	while(ch!='\n'){
		tt[i++]=ch;
		scanf("%c",&ch);
	}
	tt[i]='\0';
 	scanf("%d",&m);
 	strmcpy(st,tt,m);
 	printf("%s\n",st);
}
void strmcpy(char *st,char *tt,int m){
	for(int i=0;*(tt+m+i-1)!='\0';i++) {
		*(st+i)=*(tt+m+i-1);						
	}
}

编程题

实验07-5:寻找最长的字符串

【问题描述】输入5个字符串,输出其中最长的字符串。通过输入函数scanf("%s",sx)的形式输入字符串。 【输入形式】

li wang zhang jin xian

【输出形式】

zhang
#include<stdio.h>
#include<string.h>
int main()
{
	char string[20],strr[20];
	char *sx=string;
	int max=0;
	for(int i=0;i<5;i++) {
		scanf("%s",sx);
		if(strlen(sx)>max){
			strcpy(strr,sx);
			max=strlen(sx);
		}
	}
	printf("%s",strr);
}