C语言---day04

一、函数

1.参数 函数在使用的时候,一个很明显特征就是使用带括号(),在我们使用的时候,里面可能还会有一些数据或者是变量,这就是参数。参数是函数中需要处理

的数据。

函数在定义的时候,给出的参数就是形式参数,也就是说的形参;函数调用的时候,传递的参数就是实参。在操作中,将实参的值传递过去给形参,就是相 当于一次赋值操作。这里需要注意的就是实参和形参的类型、数目必须要一致。

注意事项:
1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所 以应该提前用赋值、输入等办法使实参获得确定值。

3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。 2.返回值

函数的返回值指的是函数被调用之后,执行完程序代码段后所得到的数值,可以通过return进行返回。 一个函数中,可以出现多个return,但是每次调用的时候,只能有一个return进行执行,返回。
return 的一般形式:

3.函数的定义 3.1无参函数的定义

如果函数不接收用户传递的数据,那么定义时可以不带参数。如下所示:

说明:

返回值类型可以使C语言中的任意数据类型,比如是int,float,char等 函数名是标识符的一种,命名规则和标识符相同。函数名后面的括号不能少。 函数体是我们需要执行的代码。即使是一个语句,也要有{}包围 在函数体内部使用return语句返回数据。

举例:

注意:main 是函数定义,不是函数调用。当可执行文件加载到内存后,系统从 main 函数开始执行,也就是说,系统会调用我们定义的 main 函 数。

return 表达式; 可以是:
return average; return x +y; return (100 + 300);

返回值类型 函数名(){ 函数的片段

}

返回值类型 函数名(){ 函数体

}

int sum(){
int i, sum=0;

for(i=1; i<=100; i++){ sum+=i;

}

return sum; }

3.2无返回值的定义

void print_tedu() {

printf("hello tedu\n"); }

3.3有参函数的定义

返回值类型 函数名(参数列表){ 函数体

}

int max1(int x, int y) {

if (x > y) {

return x; }else

{
return y;

} }

函数的练习: 1.练习:控制台请用户输入头和脚的数量,输出兔子和鸡各有几只。

//鸡兔同笼问题
int rabbit(int heads, int legs) {

int num = 0;
for (num = 0; num < heads; num++) {

if (4 * num + 2 * (heads - num) == legs) {

return num; }

}

return -1; }

void check() {

int heads = 0, legs = 0;
int temp = 0; printf("请输入头和脚的数量:"); scanf_s("%d%d", &heads, &legs);

temp = rabbit(heads, legs); if (temp == -1)
{

printf("不好意思,没兔子。"); }else{

printf("兔子有%d只,鸡有%d只\n", temp, (heads - temp)); }

}

 

2.阶乘求和: sum = 1!+ 2!+ 3! + 4! +...+(n-1)! + n!

long factorial(int n);//求阶乘 long sum(long n);//求和

//阶乘求和:sum = 1!+ 2!+ 3! + 4! +...+(n-1)! + n!

 

long factorial(int n)
{

int i;
long result = 1; for (i = 1; i <= {

result *= i; }

return result; }

//求和
long sum(long n) {

int i;
long result = 0; for (i = 1; i <= {

n; i++)

n; i++)

result = result + factorial(i); }

return result; }

 

3.一只刚出生的奶牛,4年生1只奶牛,以后每一年生1只,现在给你一只刚出生的奶牛,问你30年后又多少奶牛。

#include <stdio.h>

int CalCowsNum(int iYear){ int iCnt =0;

long lCowsNum = 1; //奶牛总数 for(iCnt=1; iCnt<=iYear; iCnt++){

if(iCnt>=4){ //4年以后奶牛数量开始增多
if((iYear-iCnt)>3){ //第2个4年开始后产的奶牛开始生新奶牛

} }

return lCowsNum;

int main(){
int iYear =0;

//返回奶牛总数

}

lCowsNum += CalCowsNum(iYear - iCnt); }else{

lCowsNum++; }

printf("Please input require years:");
scanf ("%d", &iYear); //输入年数
printf("In %d years, There is %d cows.\n", iYear, CalCowsNum(iYear)); //输出结果

return 0; }

 

二、宏定义

一般写法:

#define 宏名 字符串
假如现在要开发一个C语言程序,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢?

#include <stdio.h> //了解

void test() {
#if _WIN32

printf("666"); #elif __linux__

printf("hello"); #else

printf("sdfsd"); #endif

}

五子棋

开发工具:VS2012 头文件:

第一步:画出棋盘。 第二步:黑白双方落子 第三步:判断是不是已经五子连接 第四步:优化 第五步:由一个转变为多文件编程---extern

 

#include<stdio.h> #include<windows.h> #include<conio.h> #include<stdlib.h>

#include <stdlib.h> #include <stdio.h>

#include <conio.h> #include <Windows.h>

///////////////全局变量/////////////////////// char board[20][20];
int x, y;//代表是棋盘的行x和列y一个交点

///////////////函数的声明/////////////////////// void initBoard();//棋盘的初始化
void printBoard();//棋盘的打印
void Pos(int x, int y);//设置光标的位置

void printNum();//设置打印的棋盘数字 void startGame();//开始游戏

void checkWin();//检测游戏胜负

///////////////函数的使用/////////////////////// //设置光标的位置-----了解
void Pos(int x, int y)
{

COORD pos;
HANDLE hOutput;//句柄
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOutput, pos);

}

//设置打印的棋盘数字 void printNum()
{

int i;
Pos(2, 0);
for (i = 0; i < 20; i++) {

printf("%2d", i); }

for (i = 0; i < 20; i++) {

Pos(0, 1 + i);

printf("%2d", i); }

}

//棋盘的初始化 void initBoard() {

int i, j;
for (i = 0; i < 20; i++) {

for(j=0;j <20;j++) {

} }

}

//棋盘的打印
void printBoard() {

int i, j; printNum();//打印 for (i = 0; i < 20; {

} }

void checkWin() {

board[i][j]

= '*';

i++)

//printf("\n");
Pos(2, 1+i);
for(j=0;j <20;j++) {

printf(" %c", board[i][j]); }

}

void startGame() {

initBoard(); printBoard();

while (1) {

} }

int main() {

startGame();

return 0; }

//int temp;//1 2 printf("\n请落白色棋子,输入行,列座标:"); scanf_s("%d%d",&x, &y);

board[x][y] = 'W'; printBoard();

system("cls"); printBoard();

printf("\n请落黑色棋子,输入行,列座标:"); scanf_s("%d%d",&x, &y);

board[x][y] = 'B'; printBoard();

system("cls"); printBoard();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章