标C的学习史—重温基础【3】——函数

1.随机发牌程序:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    char suit[4] = {'S','H','F','C',};//定义花色字符数组
    char rank[13] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};//定义牌面大小数组
    srand((unsigned)time(0));//设置一个算法种子
    int cout = 0;//定义一个整形张数
    printf("请输入你要的张数:");
    scanf("%d",&cout);
    char oldS[cout],oldR[cout];//定义一对数组用于存储已经存在的花色和大小
    for(int i = 0;i < cout;i++)//随机选出cout个数的牌
        {
        int s = rand()%4;//随机花色
        int r = rand()%13;//随机大小
        int j = 0,k = i;
        for(j = 0;j<i;j++)//去掉重复的牌
            {
            if(oldS[j]==suit[s]&&oldR[j]==rank[r])//判断随机数是否已经存在
                {i--;
                break;//如果存在,则跳出当前循环
                }
            }
            if(k ==j)    
                {
                oldS[j]=suit[s];//如果不存在,则把新的随机数储存起来
                oldR[j]=rank[r];
                printf("%c%c\t",suit[s],rank[r]);//打印牌的花色和大小
                }
        }    
    return 0;
}

2.求200以内所有质数程序:
#include <stdio.h>
int main()
{
    int i;
    for(i=1;i<=200;i++)
    {
    int j;
    for(j=2;j<i;j++)

        if(i%j==0)
        break;
        if(j==i)
        printf("%d是质数\n",i);

}
return 0;

3.计算输入整数中每个数出现的次数:
#include <stdio.h>
int main()
{
    int n;
    printf("请输入一个整数");
    scanf("%d",&n);
    int num[10] = {};
    do
    {
        num[n%10]++
        n/=10;
    }while(n);
    printf("找个整数");
    int i = 0;
    for(i = 0;i<10;i++)
    {
        if(num[i])
        {
            printf("有%d个%d\t",num[i].i);
        }
    }
    return 0;
}

4.33选7的彩票
#inlcude <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    srand((unsigned)time(0));
    int a[7];
    int i = 0;
    for(i = o;i<7;i++)
    {
        a[i] = rand()%33+1;
        int j = 0;
        for(j = 0;j<i;j++)
        {
            if(a[j] ==a[i])
            {
              i--;
              braek;
            }
        }
        if(j ==i)
            {
                printf("%D\t",a[i]);
            }
    }
     return 0;
}



在函数定义和使用当中,如果把数组作为实参代入,数组名代表的是数组首地址常量,是固定不变的,代入的是数组名也就是数组首地址常量,而函数内对首地址进行的操作,就不是只是对形参操作,而是确确实实的对地址里的内容进行的操作。

C语言中可以采取分组方式管理程序中的语句。我们把每个分组叫做一个函数

多函数的程序执行模式如下:1.整个程序的执行时间被划分成几段,不同段被分配给不同的时间使用。2.所有时间段不能重叠,且必须连续。3.若果函数a在工作过程中把一段时间分配给函数b,那函数b在完成工作后必须把时间还给函数a。如果函数a在工作过程中把时间分给函数b,则他们之间存在调用关系,在这个关系中,函数a叫做调用函数,函数b叫做被调用函数。函数调用是存在时间范围的,只要被调用函数开始了还没有结束,则调用关系存在。函数调用语句可以在程序执行过程中产生函数调用关系
一般情况下,一个函数是不能使用其他函数的存储区的,如果函数被分配了多段时间,则不同时间段内使用不同的存储区。不同函数内部的变量可以重名。
函数调用过程中,通常伴随着函数之间的数据传递。函数传递存在两个完全相反的方向,既可以从被调用函数,向调用函数传递,也可以从调用函数向被调用函数传递。无论哪个方向数据传递,都需要记录在被调函数的存储区里。从被调函数只能向调用函数传一个数据,这个数据叫被调函数的返回值。函数的返回值必须记录在被调函数的一个存储区,这个存储区的类型,应该写在函数名称的前面。若果函数名称前什么都没写,则c89规范中表示函数提供一个整数类型的存储区,c99不允许。
被调函数用关键字return向存储区放返回值数据。调用函数可以把函数语句当数字使用,从而得到存储区的返回值,存储区的数字无法长期保存,得到以后,立即使用,或转存到其他存储区。如果被调用函数没有使用return关键字想存储区里放数字,则里面的数字式随机的。
被调函数不可以使用数组来记录返回值。
为了从调用函数向被调用函数传递数据,需要被调用函数提供一组存储区,这些存储区的类型,个数任意。可以在函数名称后面的小括号里声明一组变量,这组变量就用来表示,上面提到的存储区,这些变量叫函数的形式参数,小括号里的整体就叫做形参列表,每个形参的类型和名称都不可以省略,不同形参声明之间用逗号分开,调用函数首先需要提供一组数字,这组数字,叫实际参数,只要能当做数字使用的内容都可以做实际参数,计算机把实际参数记录在形式参数的存储区里,被调用函数就可以像使用普通变量一样使用形式参数。函数可以不提供存储区(void);如果函数名称后面的小括号里什么都没写则表示函数可以提供任意多个任意类型的形式参数。
exit()函数退出程序.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值