1. 关于函数的一些小总结(50.5.7)
- demo_ex_warning.c 被调用函数应在主函数之前,否则会warning警告,但也不用怕,可以先定义(被调用)函数就好
- 被调函数中没有输出时,直接进入主函数,按先后函数顺序输出对应执行结果
#include
int getMaxDataFromTwo(int x, int y);
int main()
{
int data1;
int data2;
int max;
puts("请输入两个数:");
scanf("%d%d",&data1,&data2);
max = getMaxDataFromTwo(data1, data2);
printf("两个数据是%d,%d,大数是:%d\n",data1,data2,max);
return 0;
}
int getMaxDataFromTwo(int x, int y)
{
return x>y?x:y;
}
2. 函数嵌套及编码实战(51.5.8)
- demo_ex_nested.c 先写主调函数,再写被调函数,再写被调的被调即嵌套函数
#include
int getTheBiggerFromTwo(int data1, int data2)
{
int bigger;
bigger = data1>data2 ? data1:data2;
return bigger;
}
int getMaxDataFromFour(int a, int b, int c, int d)
{
int max;
max = getTheBiggerFromTwo(a,b);
max = getTheBiggerFromTwo(max,c);
max = getTheBiggerFromTwo(max,d);
return max;
}
int main()
{
int data1;
int data2;
int data3;
int data4;
int max;
puts("Please Input Four nums:");
scanf("%d%d%d%d",&data1,&data2,&data3,&data4);
max = getMaxDataFromFour(data1,data2,data3,data4);
printf("The biggest num is %d.\n",max);
return 0;
}
3. 递归函数编码实战(52.5.9)
不推荐在工作中使用,除非算法或以下特定场景或计算!n n的阶乘时,否则工作中开会会被批斗
#include
int getAge(int currPersonNum)
{
int age;
if(currPersonNum == 1){
age = 10;
}else{
age = getAge(currPersonNum - 1) + 2;
}
return age;
}
int main()
{
int age;
int num;
printf("你要知道第几个学生的年龄:\n");
scanf("%d",&num);
age = getAge(num);
printf("第%d个学生的年龄是%d\n",num,age);
return 0;
}
4. 求阶乘案例(53.5.10)
面试中的笔试题,现场写代码
- demo_ex_recursion2.c 输出(16以下的)阶乘
#include
#include
unsigned long int getFactorial(int num)
{
long int result;
if(num >= 17){
printf("越界\n");
exit(-1);
}
if(num == 1){
result = 1;
}else{
result = getFactorial(num-1) * num;
}
return result;
}
int main()
{
int num;
unsigned long int ret;
puts("请输入要求的阶乘数:");
scanf("%d",&num);
ret = getFactorial(num);
printf("%d阶乘是:%ld\n",num,ret);
printf("%d\n",sizeof(long int));
return 0;
}
5. 数组和函数开发初见(55.5.11)
- demo_arrayfunc.c 数组名当做函数实际参数:调用函数输出数组内的数值
#include
void printfData(int data[5])
{
int i;
for(i=0;i<5;i++){
printf("%d ",data[i]);
}
printf("\n");
}
int main()
{
int array[5]={10,2,30,4,50};
printfData(array);
return 0;
}
6. 数组传参中关于形式参数的秘密(56.5.12)
- demo_arrayfunc2.c 形参中传递的是数组的首地址
#include
void printArray(int array[], int len)
{
printf("printArr: array(首地址)的内存大小是:%d\n",sizeof(array));
int i;
for(i=0;i<len;i++){
printf("%d ",array[i]);
}
putchar('\n');
}
int main()
{
int len;
int array[5] = {3,4,5,6};
len = sizeof(array)/sizeof(array[0]);
printf("main中array的内存大小是:%d\n",sizeof(array));
printArray(&array[0],len);
return 0;
}
7. 数组实参很有意思的问题启发(57.5.13)
- demo_changedata.c 局部变量传递的是数值,内存空间是不同的
#include
void changeData(int data)
{
data = data + 100;
printf("address: %p,dataInfunc = %d\n",&data,data);
}
int main()
{
int data = 10;
changeData(data);
printf("address: %p,data = %d\n",&data,data);
}
- demo_changedata2.c 数组名传递的是内存空间地址,所以其数值也相等
#include
void changeData(int data[])
{
data[0] = data[0] + 100;
printf("address: %p,dataInFunc = %d\n",&data[0],data[0]);
data[1] = data[1] + 102;
printf("address: %p,dataInFunc = %d\n",&data[1],data[1]);
}
int main()
{
int data[2] = {10,20};
changeData(data);
printf("address: %p,data = %d\n",&data[0],data[0]);
printf("address: %p,data = %d\n",&data[1],data[1]);
}
8. 数组实战之计算不同班级学生的平均分(58.5.14)
- demo_ex_aver.c 把初始化和打印写一起了:
#include
void initArray(int array[], int len)
{
int i;
for(i = 0;i<len; i++){
printf("请输入第%d个学生的成绩:\n",i+1);
scanf("%d",&array[i]);
}
puts("done\n");
printf("总人数%d个\n该班分数为:\n",len);
for(i = 0;i<len; i++){
printf("%d ",array[i]);
}
puts("\ndone\n");
}
float getAverage(int array[], int len)
{
int i;
float aver = 0.0;
int sum = 0;
for(i = 0;i<len; i++){
sum += array[i];
}
aver = (float)sum/len;
return aver;
}
int main()
{
int classOne[5];
int classTwo[8];
float averOfClassOne;
float averOfClassTwo;
int lenOne = sizeof(classOne)/sizeof(classOne[0]);
int lenTwo = sizeof(classTwo)/sizeof(classTwo[0]);
puts("请输入一班的成绩:");
initArray(classOne,lenOne);
puts("请输入二班的成绩:");
initArray(classTwo,lenTwo);
averOfClassOne = getAverage(classOne,lenOne);
averOfClassTwo = getAverage(classTwo,lenTwo);
printf("一班的平均分:%.2f\n",averOfClassOne);
printf("二班的平均分:%.2f\n",averOfClassTwo);
return 0;
}
- demo_ex_aver_.c 把初始化和打印写分开了:
#include
void initArray(int array[], int len)
{
int i;
for(i = 0;i<len; i++){
printf("请输入第%d个学生的成绩:\n",i+1);
scanf("%d",&array[i]);
}
puts("done\n");
}
void printArray(int array[],int len)
{
int i;
printf("总人数%d个\n该班分数为:\n",len);
for(i = 0;i<len; i++){
printf("%d ",array[i]);
}
puts("\n done\n");
}
float getAverage(int array[], int len)
{
int i;
float aver = 0.0;
int sum = 0;
for(i = 0;i<len; i++){
sum += array[i];
}
aver = (float)sum/len;
return aver;
}
int main()
{
int classOne[5];
int classTwo[8];
float averOfClassOne;
float averOfClassTwo;
int lenOne = sizeof(classOne)/sizeof(classOne[0]);
int lenTwo = sizeof(classTwo)/sizeof(classTwo[0]);
puts("请输入一班的成绩:");
initArray(classOne,lenOne);
puts("请输入二班的成绩:");
initArray(classTwo,lenTwo);
printf("一班的");
printArray(classOne,lenOne);
printf("二班的");
printArray(classTwo,lenTwo);
averOfClassOne = getAverage(classOne,lenOne);
averOfClassTwo = getAverage(classTwo,lenTwo);
printf("一班的平均分:%.2f\n",averOfClassOne);
printf("二班的平均分:%.2f\n",averOfClassTwo);
return 0;
}