C语言的第二个程序

本文通过一个修改后的代码示例,讲解了如何生成10个随机数,并探讨了C语言中变量的属性,包括静态全局变量和register类型的使用,以提升程序效率。

例2 变量属性

#include <stdio.h>
#define N 10
static unsigned long k=-1;

void unsigned startnum(unsigned int seed)   /*错误1*/  //void 使函数无返回值
{
    k=seed;                                 /*错误2*/  //应该返回k;
}

unsigned randnum(long n)
{
    k=((k*159+23)%n)+1;
    return k;
}

int main()
{
    register unsigned int i;
    long n=0;
    while(!(n>0&&(k<=65536)))
    {
        printf("\n Input the seed and the max random[1-65536]:\n");
        scanf("%ld%ld",&k,&n);
        if(n<=0)
            printf("\n wrong seed!");
                    if(k<=0 || k>65536)
                    printf("\n wrong max random!");
    }
    startnum(n);                            /*错误3*/  //无法得到函数的返回值
    for(i=0;i<N;i++)
        printf("%6u",randnum(n));
    return 0;
}

这个代码太多错误了,可能15年前会有前辈跌入这本书里语义的坑了。
修改后:

#include <stdio.h>
#define N 10
static unsigned long k=-1;

long unsigned startnum(unsigned long seed)         //更改函数类型
{
    k=seed;
    return k;                                      //让函数返回一个数值
}

unsigned randnum(long n)
{
    k=((k*159+23)%n)+1;
    return k;
}

int main()
{
    register unsigned int i;
    long n=0;
    while(!(n>0&&(k<=65536)))
    {
        printf("\n Input the seed and the max random[1-65536]:\n");
        scanf("%ld%ld",&k,&n);
        if(n<=0)
            printf("\n wrong seed!");
                    if(k<=0 || k>65536)
                    printf("\n wrong max random!");
    }
    n=startnum(n);                                 //程序在执行函数sternum后,把值赋给变量n
    for(i=0;i<N;i++)
        printf("%6u",randnum(n));
    return 0;
}

实例目的
程序运行后,显示10个随机数,可以定义变量的各种属性。
这里写图片描述
步骤
1.公式的确定:

k=((k*159+23)%n)+1;

2.得到初始值:

n=startnum(n);

3.产生随机数:

randnum(n);

4.定义K为静态全局变量:

static unsigned long k=-1;

5.设置循环变量i为register类型,实现连续得到随机数:

register unsigned int i;

笔记

  1. 65536为2的16次方
  2. register类型:可以将使用频繁的变量放在CPU的通用寄存器中,这样使用该变量时就不必访问内存,直接从寄存器中读取,大大提高程序的运行效率。
  3. %u 无符号10进制整数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值