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个随机数,可以定义变量的各种属性。
步骤
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;
笔记
- 65536为2的16次方
- register类型:可以将使用频繁的变量放在CPU的通用寄存器中,这样使用该变量时就不必访问内存,直接从寄存器中读取,大大提高程序的运行效率。
- %u 无符号10进制整数