1.有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。注明:要用工程实现,跨文件调用外部函数。
main.c(文件1)
#include <stdio.h>
#include <stdlib.h>
int main()
{
extern void enter_string(char str[]);
extern void delete_string(char str[],char ch);
extern void printf_string(char str[]);
char c,str[80];
enter_string(str);
printf("输入一个要删除的字符:");
scanf("%c",&c);
delete_string(str,c);
printf("输出字符串:");
printf_string(str);
return 0;
}
file1.c(文件2)
void enter_string(char str[80])
{
printf("输入字符串:");
gets(str);
}
file2.c(文件3)
void delete_string(char str[],char ch)
{
int i,j;
for(i=j=0;str[i]!='\0';i++)
{
if(str[i]!=ch)
str[j++]=str[i];
}
str[j]='\0';
}
file3.c(文件4)
void printf_string(char str[])
{
printf("%s\n",str);
}
2.写一个函数,使给定的一个3x3的二维数组转置,即行列转换。
#include<stdio.h>
#define N 3
int a[N][N];
void convert(int a[][3])
{
int i,j,t;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
}
int main()
{
int i,j;
printf("输入9个数:");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("输出3x3的二维数组:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
convert(a);
printf("输出行列转换后的二维数组:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
3.输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用封装调用函数实现。要求形参、实参必须为指针类型。
#include<stdio.h>
void swap(int *n,int *m)
{
int temp;
if(*n<*m)
{
temp=*n;
*n=*m;
*m=temp;
}
}
void exchange(int *i,int *j,int *k)
{
if(*i<*j) swap(i,j);
if(*i<*k) swap(i,k);
if(*j<*k) swap(j,k);
}
int main()
{
int a,b,c,*p1,*p2,*p3;
printf("输入三个整数:");
scanf("%d %d %d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf("由大到小输出:%d %d %d",a,b,c);
return 0;
}
4.将数组a中n(可以动态输入也可以写死)个整数按相反顺序存放。要求不能引入新的数组。用数组名或者指针变量做实参。
#include<stdio.h>
void inv(int *a,int m)
{
int *p,*q,temp;
p=a;
q=a+m-1;
while(p<q)
{
temp=*p;
*p=*q;
*q=temp;
p++;
q--;
}
}
int main()
{
int j;
printf("输入几个整数:");
scanf("%d",&j);
int a[j],*p;
printf("输入%d个整数:",j);
for(int i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
int n=sizeof(a)/sizeof(a[0]);
p=a;
inv(p,n);
printf("相反顺序:");
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
5.用指针方法对10个整数按由大到小顺序排序。封装排序函数,函数的形参必须是指针。实参可以是数组名也可是指针变量。
#include<stdio.h>
void sort(int *p,int n)
{
int i,j,t,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(*(p+j)>*(p+k)) k=j;
}
if(k!=i)
{
t=*(p+i);
*(p+i)=*(p+k);
*(p+k)=t;
}
}
}
int main()
{
int i,*p,a[10];
p=a;
printf("输入10个整数:");
for(i=0;i<10;i++)
{
scanf("%d",p+i);
}
p=a;
sort(p,10);
printf("输出由大到小的10个整数:");
for(p=a,i=0;i<10;i++)
{
printf("%d ",*(p+i));
}
return 0;
}