数组名作为函数参数
传递方式:地址调用
虚参要求:必须是数组名(不分配数组空间,只分配指针空间)
实参要求:可为另一数组名
哑实结合:哑实数组具有相同的首地址
c编译对形参数组的大小不做检查,只将实参的首地址传递给形参数组(无法知道实参大小)
形参数组和实参数组可同名也可不同名
部分习题:
题目1:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
#include <stdio.h>
int main()
{
int full;
int i;
int sum;
for(full = 1;full < 1000;full++) //for循环找完数
{
sum = 0; //给每个数一开始的因子初始化
for(i = 1;i < full;i++) //找出每个因子
{
if(full % i == 0)
{
sum = sum + i;
}
}
if(sum == full)
{
printf("%4d",full);
}
}
printf("\n");
return 0;
}
题目2:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
#include <stdio.h>
int main()
{
int i;//循环变量
float a = 2,b = 1;
float t;//中间变量
float sum = 0;
for(i = 0;i < 20;i++)
{
sum = sum + (a / b);
t = a;
a = t + b;
b = t;
}
printf("输出和:");
printf("%g\n",sum);
return 0;
}
题目3:求1+2!+3!+…+10!的和
#include <stdio.h>
#define N 10
int main()
{
int i,j;
int sum = 0;
int mul;
for(i = 1;i <= N;i++) //for循环求阶乘的和
{
mul = 1;
for(j = 1;j <= i;j++)//求阶乘
{
mul = mul * j;
}
sum = sum + mul;
}
printf("结果:%d\n",sum);
return 0;
}
题目4:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
#include <stdio.h>
int main()
{
int n;
int a,b,c;
for(n = 100;n < 1000;n++)
{
a = n / 100;//百位
b = (n % 100) / 10;//十位
c = (n % 100) % 10;//个位
if(n == (a*a*a) + (b*b*b) + (c*c*c))
{
printf("%4d",n);
}
}
printf("\n");
return 0;
}
题目5:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制
#include <stdio.h>
void fun(int a,int n)
{
int i;//循环变量
int s = a;
for(i = 1;i < n;i++)
{
a = a * 10 + a % 10; //得出每一个数
s = s + a;
}
printf("结果:\n");
printf("%d\n",s);
}
int main()
{
int a,n;
printf("输入数字和个数:\n");
scanf("%d%d",&a,&n);
fun(a,n);
return 0;
}
题目6:编程实现输入5个学生的学号、计算他们的期中和期末成绩,然后计算其平均成绩,并输出成绩表。(结构体)
#include <stdio.h>
int main()
{
struct student
{
int number; //学号
float mid; //期中成绩
float final; //期末成绩
};
struct student a[5];
int i;
float sum1 = 0,sum2 = 0;
float avgmid,avgfin;
printf("输入信息:\n");
for(i = 0;i < 5;i++)
{
scanf("%d%f%f",&a[i].number,&a[i].mid,&a[i].final);
printf("\n");
}
for(i = 0;i < 5;i++)
{
sum1 = sum1 + a[i].mid;
sum2 = sum2 + a[i].final;
}
printf("期中平均%g,期末平均%g",sum1/5,sum2/5);
printf("\n");
/* float avgmid,avgfin;
struct student n1,n2,n3,n4,n5;
printf("输入第一个学生信息:\n");
scanf("%d%f%f",&n1.number,&n1.mid,&n1.final);
average(n1.number,n1.mid,n1.final);
printf("\n");
printf("输入第二个学生信息:\n");
scanf("%d%f%f",&n2.number,&n2.mid,n2.final);
average(n2.number,n2.mid,n2.final);
printf("\n");
printf("输入第三个学生信息:\n");
scanf("%d%f%f",&n3.number,&n3.mid,n3.final);
average(n3.number,n3.mid,n3.final);
printf("\n");
printf("输入第四个学生信息:\n");
scanf("%d%f%f",&n4.number,&n4.mid,n4.final);
average(n4.number,n4.mid,n4.final);
printf("\n");
printf("输入第五个学生信息:\n");
scanf("%d%f%f",&n5.number,&n5.mid,n5.final);
average(n5.number,n5.mid,n5.final);
printf("\n");
avgmid = (n1.mid + n2.mid + n3.mid + n4.mid + n5.mid) / 5;
avgfin = (n1.final + n2.final + n3.final + n4.final + n5.final) / 5;
printf("期中平均%g,期末平均%g",avgmid,avgfin);
printf("\n");
*/
return 0;
}