指针上机题目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
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
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;
}
#include
#include
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;
}
上机实验测试题目
利用指针作函数的形参,实现:现在一个数组存放10个整型数据(可以有相同),要求用户输入一个数,然后把数组中与其输入相同的数删除。
#include
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");
}