none
新手求解 C语言 RRS feed

  • 问题

  • 1.#include"stdio.h"
    void fun(int a[], int b[], int n)
    {int i;
    for (i=0; i<6; i++) b[i] = 0;
    for (i=0; i<6; i++)
    if (a[i]<60) b[5]+=1;
    else b[(a[i]-60)/10]+=1;
    }
    main()
    {int i, a[100]={ 93, 85, 77, 68, 59, 43, 94, 75, 98}, b[6];
    fun(&a[0],&b[0], 9);
    printf("the result is: ");
    for (i=0; i<6; i++) printf("%d ", b[i]);
    printf("\n");
    }
    给定程序的功能是将n个人员的考试成绩进行分段统计,考试成绩放在a数组中,各分段的人数存到b数组中:成绩为60到69的人数存到b[0]中,成绩70到79的人数存到b[1],成绩为80到89的人数存到b[2],成绩90到99的人数存到b[3],成绩为100的人数存到b[4],成绩为60分以下的人数存到[5]中
      
    运行结果是1 1 1 1 0 2帮忙看下是哪错了 个人认为b[(a[i]-60)/10]+=1这个表达式有问题 这是题目给的 应该怎么写好呢
      
    2.

    #include  <stdio.h>

    main()

    {  int  s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;

    for(i=0;i<12;i++)  c[s[i]]++;

    for(i=1;i<5;i++)  printf("%d",c[i]);

    printf("\n");

    }

     

    程序的运行结果是

        A)1 2 3 4

        B)2 3 4 4

        C)4 3 3 2

        D)1 1 2 3

    答案是C 始终不明白是怎么来的 在我看来应该都是0 第一个FOR语句只是将值给C的下标了并没有对C本身赋值啊

      3。

     #include

      #include

      struct A

      { int a; char b[10]; double c;};

      void f(struct A t);

      main()

      { struct A a={1001,"ZhangDa",1098.0};

      f(a); printf("%d,%s,%6.1f\n",a.a,a.b,a.c);

      }

      void f(struct A t)

      { t.a=1002; strcpy(t.b,"ChangRong");t.c=1202.0;}

      程序运行后的输出结果是

      A)1001,zhangDa,1098.0

      B)1002,changRong,1202.0

      C)1001,ehangRong,1098.O

      D)1002,ZhangDa,1202.0

    答案是A    我明白形参不能改变实参 但函数中第二个形参是数组啊 数组不是可以改变的吗

    4.

    #include<stdio.h>

    main()

    { int a=1,b=2,c=3,d=0;

    if(a==1)

    if(b!=2)

    if(c==3) d=1;

    else d=2;

    else if(c!=3) d=3;

    else d=4;

    else d=5;

    printf("%d",d);

    return 0;}

    为什么是4呢 不是1吗 结果应当是执行到最后一个IF语句的值啊?

     

    5

    #include <stdio.h>
    void swap(int*a,int*b)
    {int *t;
    t=a;a=b;b=t;
    }
    main()
    {int i=3,j=5,*p=&i,*q=&j;
    swap(p,q);
    printf("%d  %d\n",*p,*q);
    }

    为什么结果还是3和5 不是说形参若是指针的话是会改变实参的值吗 这题跟上面那个数组一样 我始终是不明白什么样的情况下实参会改变。。

    6

    #include<stdio.h>
    void main()
    {   int cs;
      while((cs=getchar())!='\n')
      {switch(cs-'2')
      {  case 0 :
    case 1: putchar(cs+4);
    case 2: putchar(cs+4);
    break;
    case 3: putchar(cs+3); default: putchar(cs+2); } } }

     

    这个题是个什么意思 输入252得668766?

    7

    #include "stdio.h"
    main(){
    int i,j,x=0;
    static int a[8][8];
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    a[i][j]=2*i+j;
    for(i=0;i<8;i++)
        x+=a[i][j];
    printf("%d",x);}

    运行结果为0 怎么来的?

     

    问题有点多 楼下的朋友请给出逻辑 一步一步怎么来的 新手 谢谢!

    2011年3月23日 10:55

答案

  • 1.这个fun函数有问题,定义的n根本没用上。你传入n=9没用上。需要修改这里的逻辑
    2.i从0-12分别读取的值是c的下标,然后++,这样理解,就知道答案了。
    3.结构体作为参数传入,并没有改变自身。
    4.注意b!=2这里对应的else在哪里,然后是c!=3的else在哪里,就知道答案了。
    5.如果是参数是引用地址类型的,就可能会改变,否则不会改变传入参数的值。
    6.注意没有break的case会贯穿执行即可。
    7.注意j的值是多少,和之前对2维数组那些地方赋值了,就知道了。

    ps.时间太长没搞c了,可能说的不清楚。


    family as water
    2011年3月23日 14:44