[C++系列] C语言基础 day08 数组,函数
in C/C++ with 0 comment

[C++系列] C语言基础 day08 数组,函数

in C/C++ with 0 comment

#练习

#扫雷游戏:

在屏幕上打印出10x10的矩阵,用0和X代替,用X代表雷,其它用0代替:如
OOOOXOOOOO
OOOOXOOOOO
OOOOOOOOOO
OOOOOOOXOO
OOOOOOOXOO
OXOOOOOOOO
OOOOXOOOOO
XOOOOOOOOO
OOOOXXOOXO
OOOOOOOOOO

程序:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int map[10][10]={0};
int row=0,col=0,cnt=0;
srand(time(0));
do{
row = rand() % 10;
col = rand() % 10;
if(!map[row][col]){
    map[row][col]=-1;
    cnt++;
}
}while(cnt<=9);

for(row = 0;row<=9;row++){
    for(col=0;col<=9;col++)
        if(!map[row][col]){
                printf("O");
        }
        else{
        printf("X");
        }
   printf("\n");
}
return 0;
}

#在以上基础上显示一个点附近地雷数量

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int map[10][10]={0};
int row=0,col=0,cnt=0;
srand(time(0));
int delta [][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};
do{
row = rand() % 10;
col = rand() % 10;
if(!map[row][col]){
    map[row][col]=-1;
    cnt++;
}
}while(cnt<=9);

for(int i =0;i<=9;i++){
    for(int j =0;j<=9;j++){
        if(map[i][j]==-1){
         continue;
        }else{
        for(int num =0;num <= 7;num++){
          int tmp_row = i+delta[num][0];
          int tmp_col = j+delta[num][1];
          if(tmp_row < 0 || tmp_row >9){
                  continue;
             }
          if(map[tmp_row][tmp_col]== -1){
                map[i][j]+=1;
          }
        }
        }

    }
}


for(row = 0;row<=9;row++){
    for(col=0;col<=9;col++){
        if(map[row][col]==0){
                printf("O");
        }
        else if(map[row][col]== -1){
        printf("X");
        }
        else{
         printf("%d",map[row][col]);
        }
        //printf("%d",map[row][col]);
        }
   printf("\n”);
}
return 0;    
}

#函数

C语言可以使用分组的方式管理语句。
每个分组叫做一个函数。
多函数程序执行的时间分配情况必须遵守以下规则。
1,整个程序的执行时间被分成几段,每段被分配给一个函数使用。
2,任何两个时间段不能互相重叠并且所有的时间段必须连续。
3, 如果函数A把自己的时间分配给函数B使用,则函数B完成工作之后必须把后面的时间还给主函数A
4,如果函数A把自己的时间分给函数B,则它们之间存在调用关系。在这个函数调用关系里函数A叫做调用函数,函数B叫做被调用函数。只有被调用函数工作的时候函数调用关系才存在。
不可以跨函数使用变量
不同函数里的结果是可以重名的。
如果函数多次执行则每次执行的时候函数里面的变量对应的存储区有可能不同。
声明变量的时候可以使用volatile关键字
这种变量内容可以被其它程序改变。
Volatile int num =0;
函数调用过程中通常伴随着两个函数之间的数据传递。

函数之间的数据传输存在两个完全相反的方向,既可以从调用函数传递给被被调用函数也可以从被调用函数传递给调用函数。无论从哪个方向的数据传递使用的都是被调用函数提供的存储区。

从被调用函数只能向调用函数传递一个数据,这个数据叫做被调用函数的返回值。
返回值只能在被调用函数结束的时候才能传递
函数的返回值需要记录在被调用函数提供的一个存储区里。
需要把这个存储区的类型名称写在函数名称前面。
被调用函数里使用return关键字把返回值放到这个存储区里。
调用函数里把函数调用语句当作数字使用就可以得到函数的返回值。

练习

编写函数从键盘得到两个整数,把它们的和作为返回值传递给调用函数。

如果函数里没有使用return关键字设置返回值,则函数的返回值数值是随机的。
调用函数只有一次获得返回值的机会 ,在得到返回值以后必须立即使用或转存到其它存储区里。
如果一个函数不提供返回值,就应该在函数名称前使用void
如果函数名称前什么都没写则在c89规范里表示函数有一个整数类型存储区用来存放返回值,在c99规范里不允许这样。
被调用函数不可以使用数组存放返回值。
可以从调用函数向被调用函数传递任意数量的数据,这些数据的类型可以不同。
被调用函数需要为每个传递过来的数据提供一个对应的存储区。
在被调用函数名称后的小括号里写一组变量声明语句,它们用来代表前边提到的存储区。
这些变量叫做被调用函数的形式参数,小括号里的所有内容叫做形式参数列表。
每个形式参数的类型名称不可以省略。
相邻形式参数声明之间使用逗号分开。
被调用函数里可以使像使用变量一样使用形式参数。
在函数调用语句的小括号里为每个形式参数提供一个对应的数字,这些数字通过形式参数传递给被调用函数。
这些数字叫做实际参数。
只要能当作数字使用的内容都可以作为实际参数使用。
如果函数不提供形式参数就应该在函数名称后面的小括号里写void
如果小括号里什么都没写表示被调用函数,可以提供任意多个任意类型的形式参数。

练习

编写一个函数从调用函数得到两个整数,计算它们的和并把结果传递回调用函数。

编写函数解决鸡兔同笼问题

从调用函数得到头和脚的数量然后计算出兔子的数量并传递回调用函数。

#include<stdio.h>
int rabbit(int heads,int legs){
    for(int num=0;num <= heads;num++){
        if(4*num+2*(heads-num)==legs){
        return num;
    }

    }
        return -1;
}
int main(){
printf("鸡和兔分别有:%d只,和%d只\n",40-rabbit(40,100),rabbit(40,100));


}

#练习

1 x 9 =9
2 x 8 =16
3 x 7 =21
4 x 6 =24
5 x 5 =25

每行用一条函数调用语句显示

#include<stdio.h>
void print(int num,int num1){
printf("%d x %d = %d\n",num,num1,num*num1);
}
int main(){
int num=1,num1=9;
for(int i=1;i<=5;i++){
print(num,num1);
num++;
num1--;
}

}

预习:

1,函数
2,递归函数
3,生命周期和作用域。
4,全局变量和局部变量。

Responses