1. 直传递(单向传递):#include<stdio.h>
int max(int a,int b)
{
int c;
if(a>b) c=a;
else c=b;
a++;
printf("a=%d\nb=%d\n",a,b);
return c;
}
void main()
{
int x,y,m;
scanf("%d%d",&x,&y);
m=max(x,y);
printf("x=%d\n",x);
printf("max=%d\n",m);
}
2. 条件编译
#include<stdio.h>
#define R 1
void main()
{
float c,r,s;
printf("input a number:\n");
scanf("%d",&c);
# if R
r=c;s=3.14159*r*r;
printf("%d",s);
# else
s=c*c;
printf("%d",s);
# endif
}
3.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用
#include<stdio.h>
int fmax(int a,int b)
{
int c,i;
if(a<b) c=a;
else c=b;
for(i=c;i!=0;i--)
if(a%i==0&&b%i==0)
return i;
}
int fmin(int a,int b)
{
int c,j;
if(a>b) c=a;
else c=b;
for(j=c;j!=0;j++)
if(j%a==0&&j%b==0)
return j;
}
void main()
{
int x,y,max,min;
scanf("%d%d",&x,&y);
max=fmax(x,y);
min=fmin(x,y);
printf("max%d\nmin%d\n",max,min);
}
4.主调函数在上,被调函数的声明:
#include<stdio.h>
void main()
{
float add(float x,float y);
float a,b,c;
scanf("%f%f",&a,&b);
c=add(a,b);
printf("c=%f",c);
}
float add(float x,float y)
{
float z;
z=x+y;3
return z;
}
5.输入五个数把小于零的数变为零再输出:
#include<stdio.h>
int nzp(int v)
{
if(v>0) return v;
else return 0;
}
void main()
{
int a[5],i,x;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
{x=nzp(a[i]);
printf("%d",x);
}
}
6.求a的起始地址(与a[i]作比较):(结果与a[5]首先出现的位置有关)
#include<stdio.h>
void main()
{
int a[5],i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("%d\n",a);
printf("%d\n",a+1);
printf("%d\n",a[0]);
printf("%d\n",a[1]);
}
7.#include<stdio.h>
float aver(float a[5])
{
int i;
float av,s=a[0];
for(i=0;i<5;i++)
s=s+a[i];
av=s/5;
return av;
}
void main()
{
float sco[5],av;
int i;
printf("input 5 scores");
for(i=0;i<5;i++)
scanf("%d",&sco[i]);
av=aver(sco);
printf("%d",av);
}
8.无参的宏的形式:
#include<stdio.h>
#define M y*y+3*y
void main()
{
int s,y;
printf("please input a number:");
scanf("%d",&y);
s=3*M+4*M+5*M;
printf("%d\n",s);
}
9.有参的宏的形式:
#include<stdio.h>
#define PI 3.1415926
#define s(r)PI*r*r
void main()
{
float a,area;
a=3.6;
area=s(a);
printf("%f\n""%f\n",a,area);
}
10.有参的宏中字符串的变量最好用括号之错题:
#include<stdio.h>
#define PI 3.1415926
#define s(r) PI*r*r
void main()
{
float area;
area=s(1+2);//area=PI*1+2*1+2;
printf("%f\n",area);
}1.求a的首地址
#include<stdio.h>
void main()
{
int a,b;
a=100;
b=100;
printf("a=%-6d",a);
printf("b=%-6d",b);
printf("a=%-6d\n",&a);
//&a求出的是a的首地址
}
2.定义一个指针变量
#include<stdio.h>
void main()
{
int a,b;
int*p,*q;
a=100;
b=100;
p=&a;q=&b;
printf("a=%-6d",a);//*&a相当于a
printf("b=%-6d",b);
printf("&a=%-6d",p);//&*p相当于p
//若为printf("&a=%-6d",*p);则会求出a的值
printf("&b=%-6d\n",q);
}
3.通过指针变量访问整形变量
#include<stdio.h>
void main()
{
int a,b;
int*p,*q;
a=100;
b=10;
p=&a;q=&b;
printf("a=%-6d",a);
printf("b=%-6d",b);
printf("*p=%-6d",*p);
printf("*q=%-6d\n",*q);
}
4.输入两个整数,按从大到小的顺序输出
#include<stdio.h>
void main()
{
int a,b;
int*p1,*p2,*P;
scanf("%d%d",&a,&b);
p=&a;q=&b;
if(a<b)
{
P=p1;
p1=p2;
p2=P;
}
printf("a=%-6d",a);
printf("b=%-6d",b);
printf("p=%-6d",*p1);
printf("q=%-6d\n",*p2);
}
5.利用指针作为函数参数实现交换两个变量的值(1)
#include<stdio.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
void main()
{
int a,b;
int*p1,*p2;
scanf("%d%d",&a,&b);
p1=&a;p2=&b;
if(a<b)
swap(p1,p2);
printf("a=%-6d",a);
printf("b=%-6d",b);
}
6.利用指针作为函数参数实现交换两个变量的值(2)
#include<stdio.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
void main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a<b)
swap(&a,&b);
printf("a=%-6d",a);
printf("b=%-6d",b);
}
7.指针与数组的联系 组合(1)
#include<stdio.h>
void main()
{
int a[5],i;
int*p;
p=a;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
printf("%4d",*(p+i));
}
8.指针与数组的联系 组合(2)
#include<stdio.h>
void main()
{
int a[5],i;
int*p;
for(i=0;i<5;i++)
{scanf("%d",&a[i]);
p=&a[i];
printf("%8d",*p);}
}
9.指针与数组的联系 组合(3)
#include<stdio.h>
void main()
{
int a[5],i;
int*p;
p=a;
for(i=0;i<5;i++)
{scanf("%d",&a[i]);
}
for(p=a;p<a+5;p++)
printf("%4d",*p);
}
10.输出二维数组的全部元素
#include<stdio.h>
void main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},i,j;
int(*p)[4];
p=a;//相当于p=&a[0];
for(i=0;i<3;i++)
{ for(j=0;j<4;j++)
printf("%-4d",*(*(p+i)+j));
printf("\n");}
}
C语言函数指针习题(10道)
猜你喜欢
转载自blog.csdn.net/helo_world01/article/details/104234524
今日推荐
周排行