C语言的第二个程序

例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(" Input the seed and the max random[1-65536]:");

scanf("%ld%ld",&k,&n);

if(n<=0)

printf(" wrong seed!");

if(k<=0 || k>65536)

printf(" wrong max random!");

}

startnum(n); /*错误3*/ //无法得到函数的返回值

for(i=0;i<N;i++)

printf("%6u",randnum(n));

return 0;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

这个代码太多错误了,可能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(" Input the seed and the max random[1-65536]:");

scanf("%ld%ld",&k,&n);

if(n<=0)

printf(" wrong seed!");

if(k<=0 || k>65536)

printf(" wrong max random!");

}

n=startnum(n); //程序在执行函数sternum后,把值赋给变量n

for(i=0;i<N;i++)

printf("%6u",randnum(n));

return 0;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

实例目的

程序运行后,显示10个随机数,可以定义变量的各种属性。

C语言的第二个程序

步骤

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进制整数

相关推荐