今天讲了指针数组,用*p[ ]表示。
今日练习如下:
1.十进制转换成八进制输出,八进制转换成十进制输出
十进制转八进制:
#include<stdio.h>
int fun(int a);
int main()
{
int a;
scanf("%d",&a);
printf("%d",fun(a));
}
int fun(int a)
{
int i;
int m=0;
int d=1;
int b=a,c;
int sum=0;
while(b!=0)
{
m++;
c=b%8;
for(i=1;i<m;i++)
{
d*=10;
}
sum=sum+c*d;
d=1;
b=b/8;
}
return sum;
}
八进制转十进制:
#include<stdio.h>
int fun(int a);
int main()
{
int a;
scanf("%d",&a);
printf("%d",fun(a));
}
int fun(int a)
{
int i;
int m=0;
int d=1;
int b=a,c;
int sum=0;
while(b!=0)
{
m++;
c=b%10;
for(i=1;i<m;i++)
{
d*=8;
}
sum+=c*d;
d=1;
b=b/10;
}
return sum;
}
2.编写一段代码,求出数组s中的所有奇数的和,和所有偶数的和,奇数和用指针add返回,偶数和用指针even返回,在主函数内做输入输出,子函数做数据处理
#include<stdio.h>
#include<string.h>
int* fun(int *p,int len,int f);
int main()
{
printf("请输入数组,输入0结束:");
int s[100]={0};
int i=0;
while(scanf("%d",&s[i])&&s[i]!=0)
{
i++;
}
printf("奇数和为:%d\n",*fun(s,i,1));
printf("偶数和为:%d\n",*fun(s,i,0));
}
int* fun(int *p,int len,int f)
{
int sum1=0,sum2=0;
int *add,*even;
int i;
if(f==1)
{
for(i=0;i<len;i++)
{
if((*(p+i))%2==1)
{
sum1+=(*(p+i));
}
}
add=&sum1;
return add;
}
if(f==0)
{
for(i=0;i<len;i++)
{
if((*(p+i))%2==0)
{
sum2+=(*(p+i));
}
}
even=&sum2;
return even;
}
}
3.输入10个整数,将其中最小的数与第一个数对换,最大的数与最后一个数对换,要求用指针法分别写三个函数;输入10个整数;按要求对数进行交换;输出10个数
#include<stdio.h>
int scan(int *p);
int prin(int *p);
int change(int *p);
int main()
{
int a[10]={0};
scan(a);
change(a);
prin(a);
}
int scan(int *p)
{
int i;
for(i=0;i<10;i++)
{
scanf("%d",&(*(p+i)));
}
}
int prin(int *p)
{
int i;
for(i=0;i<10;i++)
{
printf("%d ",*(p+i));
}
}
int change(int *p)
{
int i;
int max=*p;
int temp;
for(i=0;i<10;i++)
{
if(*(p+i)>max)
{
max=*(p+i);
}
}
for(i=0;i<10;i++)
{
if(max==*(p+i))
{
temp=*(p+i);
*(p+i)=*(p+9);
*(p+9)=temp;
}
}
int min=*p;
for(i=0;i<10;i++)
{
if(*(p+i)<min)
{
min=*(p+i);
}
}
for(i=0;i<10;i++)
{
if(min==*(p+i))
{
temp=*(p+i);
*(p+i)=*p;
*p=temp;
}
}
}
4.写一个函数intdigit(int n,int k),返回n的从右向左的第k个十进制数字位值;例如:digit(1357,2),将返回5
#include<stdio.h>
int digit(int n,int k);
int main()
{
int n,k;
scanf("%d%d",&n,&k);
printf("%d",digit(n,k));
}
int digit(int n,int k)
{
int m;
while(k>0)
{
m=n%10;
n=n/10;
k--;
}
return m;
}
5.给一个不多于9位的正整数, 13657 75631 要求:
1) 求它是几位数 2) 逆序打印出各位数字(拼成一个整型数字)
#include<stdio.h>
int wei(int a);
int change(int a,int b);
int main()
{
int a,b;
scanf("%d",&a);
b=wei(a);
printf("该数字是:%d位数\n",b);
printf("调换后的数字是:%d\n",change(a,b));
}
int wei(int a)
{
int m=0;
while(a!=0)
{
m++;
a=a/10;
}
return m;
}
int change(int a,int b)
{
int sum=0;
int n=1;
int i;
while(b!=0)
{
for(i=1;i<b;i++)
{
n=n*10;
}
sum=sum+a%10*n;
a=a/10;
b--;
n=1;
}
return sum;
}