首页
社区
课程
招聘
几道C语言的题目,求教
发表于: 2010-6-5 13:56 4903

几道C语言的题目,求教

2010-6-5 13:56
4903
过几天就要考试了.我C语言才开始学都不懂.

四、程序分析,给出下列各程序的执行结果(输出)

1、#include <stdio.h>
       int f(n)
       int n;
{
static int s=1;
    while(n) s*=n--;
    return s;
}                                               ''这个看懂了大概上面的是函数.就是不知道那几个命令是什么意思
    main()
{   int i,j;
    i=f(3); j=f(5);
    printf("\nThe output of 5.1. is:\n\n");
        printf("i=%d j=%d \n",i,j);
}

2、#include <stdio.h>
    trans(m,n)
    int m,n;
    {int i;
    if (m>n){
    i=m%n;trans(m/n,/);
    }
    else i=m;
    if (i<10) printf("%d",i);
    else printf("%c",'A'+i-10);
    }
    main( )
    {int i;
    printf("\nThe output of 5.3 is:\n\n");
    printf("\n%d->-",-23);
    trans(21,3);
    printf("\n%d->",123);
    trans(123,16);
    }

3、#include <stdio.h>
    #include <malloc.h>

    typedef struct node
    {
    int d;
    struct node *next;
    }t_node;

    create(h)
    t_node **h;
    {
    int i,m=0;t_node *p,*q;
    scanf("%d",&i);
    while(i)
    {
    p=(t_node*)malloc(sizeof(t_node));
    p->d=i>m?i:m;m=i;p->next=NULL;
    if(*h)
    {
    q->next=p;
    q=p;
    }   
    else
    {
    *h=p;
    q=p;
    }
    scanf("%d",&i);
    }
    }

    void main()
    {   
    t_node *h=NULL,*p;
    create(&h);p=h;printf("\nThe output of 4.3 is:\n\n");
    while(p)
    {printf("%d",p->d);
    p=p->next;
    }
    }

4、#include <stdio.h>
    main()
    { int m,n,sign,t;
    scanf("%d%d",&m,&n);
    while(m*n){
    if (m>=0&&n>=0||m<=0&&n<=0) sign=0;
    else sign=1;
    m=m>0?m:-m; n=n>0?n:-n;
    t=0;
    while(n--) t+=m;
    printf("\nThe result is:");
    if (sign) printf("-");
    printf("%d\n",t);
    scanf("%d%d",&m,&n);
    }
    }

5、#include <stdio.h>
    int a[10]={1,2,3,4,5,6,7};
    rev (m,n)
    int *m,n;
    {int t;
    if(n>1)
    {t=*m;*m=*(m+n-1);*(m+n-1)=t;
    rev(m+1,n-2);
    }
    }

    main()
    {int i;
    printf("\nThe output of 5.5 is:\n\n");
    rev(a+2,6);
    for(i=0;i<10;i++)
    printf("%d",a[i]);
    printf("\n");
    rev(a,5);
    for(i=0;i<10;i++)
    printf("%d",a[i]);
    printf("\n");
    }

另外求下  十六进到十进制  的互转方法....

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 145
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
贝尔C语法
2010-6-5 15:08
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qml
3
帮帮忙解说一下呀....
2010-6-5 15:44
0
雪    币: 79
活跃值: (35)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
4
第一个是阶乘,后面的代码格式太难看了

十进制和十六进制互转是计算机的基本知识,你可以用计算器
2010-6-5 15:51
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qml
5
.....考试能带个计算器去????
2010-6-5 17:35
0
雪    币: 32
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
第一题是阶乘 i = 3*2*1

因为S是静态变量,所以j = (3*2*1)*5*4*3*2*1

16转10的话,设N为第N位,就是对应位乘以16的N-1次方的和
例:5B4F = 5*16^(4-1)+11(B)*16^(3-1)+4*16^(2-1)+15(F)*16^(1-1)

10转16的话,就是除余除余的问题了
例:385  385/16 = 24  385%16 = 1 最高位
              24/16 = 1最低位      24%16 = 8中间位
      181
2010-6-5 18:08
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看上去挺难得,这东西,不学习啊就荒废哦
2010-6-5 20:42
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
1.  前面好几位都提到了是阶乘,也提到要注意的s是静态变量。
   所以,结果输出为  i=6, j=720;

2. 不知道这里是什么意思,没能理解。  i=m%n;trans(m/n,/);

3.  函数的功能是从键盘得到输入,然后实现一个队列。但是这个队列有一个特点,就是后面的数字不小于前面的值,且都是大于0的正数。如你输入的数字为 4 7 1 7 3 0,那么得到的结果为
4 7 7 7 7 0

4.  通过+来实现两个整数的乘积。
   scanf("%d%d",&m,&n);  这里从键盘得到两个数 如m=-43, n=4
   while循环就是当输入的两个数的乘积不等于0 的时候一直计算。
    它首先去得到结果的符号,正或负。然后将m自加n次得到乘积。
  如这里结果为-172

5.  rev (m,n) 应该是实现前n个数倒序的功能。
    int a[10]={1,2,3,4,5,6,7};  只是定义了数组的前7位,所以后面的3位为000
    rev(a+2,6);  是将数组中从3 开始的6个数字倒序,所以结果为
         1207654300
    rev(a,5);  是将前面的数组中从1 开始的5个数字倒序,所以结果为
         6702154300
2010-6-5 22:31
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qml
9
这下完了,都看不大懂..大概套路知道具体的C语言用法一点都不知道,这次我考试绝对挂。考试完结贴
2010-6-6 12:54
0
雪    币: 360
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rol
10
挂了不可怕,一直挂才可怕
2010-6-6 12:56
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
c都快忘光了,好怀念以前学c的时光啊
2010-6-6 17:02
0
雪    币: 459
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
好老的语法格式
2010-6-6 22:46
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
看的头晕, 麻烦哥们书写的规范点!
2010-6-7 23:41
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
14
我了个擦...格式太恶心了.!!!!  严重误导人啊
2010-6-8 07:10
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好的编码习惯和风格是很重要的,楼主发布的求助代码,可否注意代码的格式

可读性差,影响心情的。

下面分别给出答案:
第1题的答案:
The output of 5.1. is:

i=6 j=720

第2题代码错误,有三处错误:第一处是函数trans中()的调用语句trans(m/n, /)中第二个参数错误;第二处和第三处错误分别是函数main()中的两个printf()语句中的参数错误。

第3题,creat函数的功能是从键盘输入数据(以零作为截止符号),创建一个链表,该链表的数据的特点是:后面的数值不小于前面的值、且这些数值都是大于0的正数。
依次输入数据:11 36 16 5000 626 0(截止符号)

The output of 4.3 is:

11 36 36 5000 5000

第4题,实现的功能是从循环地键盘连续输入两个整数,通过连续相加来实现这两个整数的乘积;直到两个整数的成绩为0退出循环。分别输入数据5 9、-55 21、-3 200和110 0,结果如下:
5 9
The result is:45

-55 21
The result is:-1155

-3 -200
The result is:600

110 0
程序结束运行,正常退出。

第5题的结果如下:

The output of 5.5 is:

1207654300
6702154300

以第5题为例,正确的代码格式可参照下述代码:
#include <stdio.h>

int a[10]={1,2,3,4,5,6,7};

void rev (int *m, int n)
{
    int t;
    if(n>1) {
          t=*m;
          *m = *(m+n-1);
          *(m+n-1) = t;
          rev(m+1, n-2);
    }
}

void main(void)
{
      int i;
      printf("\nThe output of 5.5 is:\n\n");
      rev(a+2, 6);
      for(i=0; i<10; i++)
           printf("%d", a[i]);
      printf("\n");
      rev(a, 5);
      for(i=0; i<10; i++)
          printf("%d", a[i]);
      printf("\n");
}
2010-6-8 13:33
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主不厚道,好像销声匿迹了

上当受骗的感觉,不好受
2010-6-29 16:47
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
楼主啊 程序你自己运行成功了吗
2010-6-29 19:39
0
游客
登录 | 注册 方可回帖
返回
//