指针上机题目2 2018年12月5日

指针上机题目2 2018年12月5日
以下内容仅供娱乐,欢迎随时探讨,请多指教
1)利用指针作函数的形参,实现:将一个数组中的值按逆序重新存放,例如原先的顺序为8,6,5,4,1,要求逆序存放为1,4,5,6,8,并输出这些数值。(要求只能定义一个数组完成)

#include"stdio.h"
void trans(int *a,int n)
{
	int*i=a,*j=a+n-1,temp,*t=a+n/2;
	for(; i<t;i++,j--) {
		temp=*i;
		*i=*j;
		*j=temp;
	}
}
void main()
{
	int a[100],n,i;
	printf("input n\n");
	scanf("%d",&n);
	printf("input %d numbers\n",n);
	for(i=0; i<n; i++)
			scanf("%d",a+i);
	printf("then is:\n");
	trans(a,n);
	for(i=0; i<n; i++)
	printf("%d\t",*(a+i)); printf("\n");
	}

2)利用指针作函数的形参,实现:输入一行字符,统计其中单词的个数,单词之间用空格隔开。

#include<stdio.h>
int myfun(char *s)
{
	int i, count=0;
	for(i=0; *(s+i)!='\0'; i++)
		if(*(s+i) != ' '&&(*(s+i+1)=='\0'||*(s+i+1)==' '))
				count++;
	return count;
}
void main()
{
	char s[100];
	printf("input a string\n");
	gets(s);
	printf("个数是:%d\n",myfun(s));
}

3)利用指针作函数的形参,求数组中元素的平均值

#include <stdio.h>
double myave(double *a,int n)
{
	int i;
	double sum=0;
	for(i=0; i<n; i++)
		sum+=*(a+i);
	return(sum/n);
}
int main()
{
	double a[100],average;
	int n,i;
	printf("input n\n");
	scanf("%d",&n);
	printf("input %d numbers\n",n);
	for(i=0; i<n; i++)
		scanf("%lf",a+i);
	average=myave(a,n);
	printf("average=%lf\n",average);
	return 0;
}
  1. 删除字符串中所有给定的子串
    问题描述:
    在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。
    要求实现函数:
    int delete_sub_str(const char *str, const char *sub_str, char *result_str)
    【输入】 str:输入的被操作字符串
    sub_str:需要查找并删除的特定子字符串
    【输出】 result_str:在str字符串中删除所有sub_str子字符串后的结果
    【返回】 删除的子字符串的个数
    注:
    I、 子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:
    在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。
    II、 输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。
    示例
    输入:str = “abcde123abcd123”
    sub_str = “123”
    输出:result_str = “abcdeabcd”
    返回:2
    输入:str = “abcde123abcd123”
    sub_str = “1234”
    输出:result_str = “abcde123abcd123”
    返回:0
#include <stdio.h>
#include <string.h>

int delete_sub_str(const char *str, const char *sub_str, char *result_str)
{
	int i=0,num=0,j;
	int sub_str_len=strlen(sub_str);
	const char *temp;
	const char *p,*p1;
	char *q;
	p=str;
	p1=sub_str;
	q=result_str;
	while(*str) {
		if(*str==*sub_str) {
			temp=str;
			//刚开始写成了while((*str++)==(*sub_str++)&&(*sub_str)),
			//这样就出了问题,二者的不通过在于++之后判断*sub_str为空还是++之前
			while((*sub_str)&&(*str++)==(*sub_str++))
				i++;
			if(i==sub_str_len)
				num++;
			else
				for(j=0; j<i; j++) {
					*q++=*(temp+j);
				}
			sub_str=p1;
			i=0;
		} else
			*q++=*str++;
	}
	printf("%s\n",result_str);
	return num;
}
int main()
{
	char str[100],sub_str[100];
	char result_str[100]= {0};
	printf("input two strings\n");
	gets(str);
	gets(sub_str);
	int i=delete_sub_str(str,sub_str,result_str);
	printf("Total %d stings was deleted!\n",i);
	return 0;
}

上机实验测试题目

#include<stdio.h>
void del(int *a, int nun, int *n)
{
	int i,j,t=(*n);
	for(i*0; i < (*n); i++) {
		if(*(a+i) == nun) {
			for(j=i; j < (*n)-1; j++)
				*(a+j)=*(a+j+1);
			(*n)--;
		}
	}
}
void main()
{
	int a[110];
	int n,i,nun;
	printf("input n\n");
	scanf("%d",&n);
	printf("input %d nunbers\n",n);
	for(i=0; i<n; i++)
		scanf("%d",a+i);
	printf("input num\n");
	scanf("%d",&nun);
	del(a,nun,&n);
	printf("then is:\n");
		   for(i=0;i<n;i++)
		   printf("%d ",*(a+i));
		   printf("\n");
}

猜你喜欢

转载自blog.csdn.net/weixin_43310774/article/details/84888557