C Primer+Plus(十二)编程练习

本文探讨了如何使用C语言生成指定范围内的随机数,并通过多次试验统计每个数出现的频率,强调了种子值对随机数生成的影响及改进方法。

6、编写一个产生1000个1到10范围内的随机数的程序。不必保存或打印数字,仅打印每个数被产生了多少次。让程序对10个不同的种子值进行计算。

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

int sides=10;
static int a[10];
void f1(int times);
int main(void)
{
  int times;
  int i;
  extern int a[10];    //可选的引用声明
  
  printf("please input the numbers for times:\n");
  scanf("%d",&times);

  f1(times);
  
  for(i=1;i<11;i++)
    printf("the number %d\'s times is:%d.\n",i,a[i-1]);
  getch();
  return 0;
}

void f1(int x)
{
  extern int sides;
  extern int a[];  //可选的引用声明
  int i,b;
  for(i=0;i<x;i++)
    {
       srand((int)time(NULL)); 
       b=rand()%sides+1;
       switch(b)
         { case 1:a[0]++;break;
           case 2:a[1]++;break;
           case 3:a[2]++;break;
           case 4:a[3]++;break;
           case 5:a[4]++;break;
           case 6:a[5]++;break;
           case 7:a[6]++;break;
           case 8:a[7]++;break;
           case 9:a[8]++;break;
           case 10:a[9]++;break;
         }
      }
}

上面程序的输出很奇怪,除了某一个数组元素为1000之外,其他都为0;这是什么原因?原因在于程序运行时间非常短,一秒都不要,所以每次通过srand()给rand()函数传递的参数都是相同的。有什么方法改进呢?方法是把srand()语句放置在rand()代码块的外部,如下例是放在main()函数中,这就不会使得每一次rand()都通过srand()获得几近相同的参数了。

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

int sides=10;
static int a[10];
void f1(int times);
int main(void)
{
  int times;
  int i;

  printf("please input the numbers for times:\n");
  scanf("%d",&times);
  srand((int)time(NULL)); 

  f1(times);
  
  for(i=1;i<11;i++)
    printf("the number %d\'s times is:%d.\n",i,a[i-1]);
  getch();
  return 0;
}
//

void f1(int x)
{
  int i,b;
  for(i=0;i<x;i++)
    {
       b=rand()%sides+1;
       switch(b)
         { case 1:a[0]++;break;
           case 2:a[1]++;break;
           case 3:a[2]++;break;
           case 4:a[3]++;break;
           case 5:a[4]++;break;
           case 6:a[5]++;break;
           case 7:a[6]++;break;
           case 8:a[7]++;break;
           case 9:a[8]++;break;
           case 10:a[9]++;break;
         }
      }
} 
  
//同时省略了外部变量的引用声明  
  

 8、下面是某程序的一部分:

//pe12-8.C
#include<stdio.h>
int *make_array(int elem,int val);
void show_arry(const int ar[],int n);
int main(void)
{
  int *pa;
  int size;
  int value;

  printf("Enter the number of elements:");
  scanf("%d",&sizes);
  while(size>0)
   {
      printf("Enter the initialization value:");
      scanf("%d",&value);
      pa=make_arryay(size,value);
      if(pa)
      {
           show_arry(pa,size);
           free(pa);
       }
       printf("Enter the number of elements(<1 to quit):");
       scanf("%d",&size);
     }
     printf("Done.\n");
     return 0;
}

给出函数make_arry()和show_array()的定义使得程序完整。函数make_array()接受两个参数。第一个是int数组的元素个数,第二个是要赋给每个元素的值。函数使用malloc()来创建一个适当大小的数组,把每个元素设定为指定的值,并返回一个数组指针。函数show_array() 以8个数一行的格式显示数组内容。
如下:

int *make_array(int elem,int val)
{
  int *p;
  int i;
  p=(int *)malloc(elem*sizeof(int));
  for(i=0;i<elem;i++)
    p[i]=val;
  return p;
}
void show_array(const int p[],int n)
{ 
  int i;
  printf("-----the array begins-----\n");
  for(i=0;i<n;i++)
  {if(i%8==0)
     printf("\n");   
   printf("  %d  ",*(p+i));
  } 
  printf("\n-----the array finish-----\n");
}

 

 

转载于:https://www.cnblogs.com/tsembrace/p/3147872.html

多角色体系 支持管理员、商家、消费者三种角色,权限分级管控: 管理员:负责平台整体配置、用户审核、数据监控等全局操作。 商家:管理店铺信息、发布商品、处理订单、回复评价等。 消费者:浏览商品、加入购物车、下单支付、评价商品等。 实现用户注册(手机号 / 邮箱验证)、登录(支持密码 / 验证码 / 第三方登录)、个人信息管理(头像、收货地址、密码修改)。 权限精细化控制 商家仅能管理自家店铺及商品,消费者仅能查看和购买商品,管理员拥有全平台数据访问权限。 二、商品管理功能 商品信息维护 商家可发布商品:填写名称、分类(如服饰、电子产品)、子类别(如手机、笔记本)、规格(尺寸、颜色、型号)、价格、库存、详情描述(图文)、物流信息(运费、发货地)等。 支持商品上下架、库存调整、信息编辑,系统自动记录商品状态变更日志。 商品分类与搜索 按多级分类展示商品(如 “数码产品→手机→智能手机”),支持自定义分类体系。 提供智能搜索功能:按关键词(名称、品牌)搜索,支持模糊匹配和搜索联想;结合用户浏览历史对搜索结果排序(优先展示高相关度商品)。 商品推荐 基于用户浏览、收藏、购买记录,推荐相似商品(如 “浏览过该商品的用户还买了…”)。 首页展示热门商品(销量 TOP10)、新品上架、限时折扣等推荐列表。 三、订单与交易管理 购物车与下单 消费者可将商品加入购物车,支持修改数量、选择规格、移除商品,系统自动计算总价(含运费、折扣)。 下单流程:确认收货地址→选择支付方式(在线支付、货到付款)→提交订单→系统生成唯一订单号。 订单处理流程 订单状态跟踪:待支付→已支付→商家发货→物流运输→消费者收货→订单完成,各状态变更实时通知用户。 商家端功能:查看新订单提醒、确认发货(填写物流单号)、处理退款申请(需审核理由)。 消费者端功能:查看订单详情、追踪物流、申请退款 / 退货、确认收货。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值