张老师 发表于 2018-6-14 21:45:29

重庆大学网院2018年C语言程序设计 ( 第3次 )答案参考

第3次作业
一、填空题(本大题共20分,共 10 小题,每小题 2 分)
1.
函数reverse的原型为:void reverse(char *s);,其功能是颠倒存放字符串s,函数定义代码已经写入到源程序问文件myfuns.cpp。下面程序利用函数reverse将键盘上输入的字符串进行颠倒并输出。请选择合适选项填空完成程序。
#include <stdio.h>
#include      ①   
int main()
{
    char s;
    printf("?s: ");
    gets(s);
    reverse(s);
    puts(s);
    return 0;
}
A"void reverse(char *s);"
Bvoid reverse(char *s);
Cmyfuns.cpp
D"myfuns.cpp"

2.
下面程序的功能是:通过宏定义MOD求4个实型数据a+b与c+d的余数。请选择合适选项填空完成程序。
#include <stdio.h>
#include <math.h>
#define MOD(x,y)      ①   
int main()
{   
    double a,b,c,d,e;
    printf("?a&b:");
    scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d);
    e=MOD(   ②   );
    printf("e=%lf\n",e);
    return 0;
}
Aa,b,c,d
Ba+b,c+d
CMOD((x),(y))
Dfmod((x),(y))

3.
下面程序的功能是:随机产生20个实数存放到一维数组a中,并通过指向数组a的指针移动的方式输出所有数组元素值。请选择合适选项填空完成程序。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 20
int main()
{
    double a,*p;
    int i;
    srand(time(NULL));
    for(i=0;i<N;i++)
      a=rand()%100+rand()%100*1e-2;
    p=a;
    while(p<   ①   )
    {
      printf("%7.2lf",   ②   );
      p++;
    }
    printf("\n");
    return 0;
}
Aa
Ba+N
Cp
D*p

4. 下面程序的功能是:输出person数组中年龄最大者的姓名和年龄信息。请选择合适选项填空完成程序。
#include<stdio.h>
struct man
{
char name;
    int age;
}person[]={"li=ming",18,"wang-hua",19,"zhang-ping",20};
int main()
{
struct man *p,*q;
int old=0;
p=person;
while(p<person+3)
{
if(   ①         )
{
q=p;
old=p->age;
}
p++;
}
   printf("%s %d\n",   ②      );
   return 0;
}
Aq->name,q->age
B*q->name,q->age
Cold<p.age
Dold<p->age
5.
下面程序的功能是:求实型变量b的小数部分,请选择合适选项填空完成程序。
#include <stdio.h>
int main()
{   
    double b;
    scanf("%lf",&b);
    printf("%lf\n",         );
    return 0;
}
A b%(int)b
B (int)b/b
C (int)b-b
D b-(int)b

6. 下面程序的功能是:求从键盘输入的3个整数之和。请选择合适选项填空完成程序。
#include <stdio.h>
int add(   ①    );
int main()
{
int a,b,c,sum;
printf("?a,b,c: ");
scanf("%d,%d,%d",&a,&b,&c);
sum=add(   ②      );
printf("sum=%d\n",sum);
return 0;
}
int add(int a,int b)
{
return a+b;
}
A add(a,b),c
B a,b,c
C int a;int b
D int,int
7.
下面程序运行时,若输入数据为:123456789,则输出结果为:a=123,b=89,请选择合适选项填空完成程序。
#include <stdio.h>
int main()
{   
    int a,b;
    scanf("         ",&a,&b);
    printf("a=%d,b=%d\n",a,b);
    return 0;
}
A %3d%2d
B %3d%*d%2d
C %3d%*4d%2d
D %3d%4d%2d

8.
#include <stdio.h>
#include <math.h>
double sincos(double x,double *co);
int main()
{
    double x,sinv,cosv;
    printf("?x: ");
    scanf("%lf",&x);
    sinv=sincos(   ①   );
    printf("sinv=%lf,cosv=%lf\n",sinv,cosv);
    return 0;
}
double sincos(double x,double *co)
{
    x=x*3.1415926/180;
         ②    =cos(x);
    return sin(x);
}
A x,cosv
B x,&cosv
C *co
D co

9. 下面程序的功能是:从文件mydata.txt中读出3个结构体变量到数组a中,然后将数组a的内容输出到屏幕上。请选择合适选项填空完成程序。
#include <stdio.h>
struct test
{
double x;
int y;
};
int main()
{
FILE *f;
   ①       a;
int i;
f=fopen("mydata.txt","rb");
if(f==NULL)
{
printf("Can't create file.\n");
return -1;
}
for(i=0;i<3;i++)
fread(   ②       );
fclose(f);
for(i=0;i<3;i++)
printf("%lf,%d\n",a.x,a.y);
return 0;
}
Astruct test
Btest
C&a,sizeof(struct test),1,f
Da,sizeof(struct test),1,f
10.
下面程序的功能是:随机产生15个整实数存放到二维数组a中,并通过指向数组a的指针输出所有数组元素值。请选择合适选项填空完成程序。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 3
#define N 5
int main()
{
    int a,*p;
    int i,j;
    srand(time(NULL));
    for(i=0;i<M;i++)
      for(j=0;j<N;j++)
            a=rand()%100;
    p=   ①      ;
    for(i=0;i<M;i++)
    {
      for(j=0;j<N;j++)
            printf("%4d",   ②      );
      printf("\n");
    }
    return 0;
}
Aa
B(p+i*N+j)
Ca
D*(p+i*N+j)


二、程序阅读题(本大题共40分,共 5 小题,每小题 8 分)
1.
#include <stdio.h>
#include <string.h>
#define N 0
int main()
{
    char s="abcdefg";
#if N
    printf("字符串s的长度为:%d\n",strlen(s));
#else
    printf("字符串s占据的空间长度为:%d\n",sizeof(s));
#endif
    return 0;
}

2. (写出下面程序执行的结果)
#include <stdio.h>
int main()
{
int x,b1,b2,b3;
    x=300;
b3=x/100;
b2=(x-b3)/100;
b1=x%10;
x=b1+b2+b3;
printf("%d\n",x);
return 0;
}
3. (写出下面程序执行的结果)
#include <stdio.h>
int main()
{
int i,j,k;char ch='1';
   for(i=0;i<=3;i++)
   { for(j=0;j<=3-i;j++)
   printf(" ");
for(k=0;k<=2*i;k++)
printf("%c",ch);
printf("\n");
ch=ch+1;
}
for(i=0;i<=2;i++)
{ for(j=0;j<=i+(3-2);j++)
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("%c",ch);
printf("\n");
    ch=ch-1;
}
return 0;
}
4.
#include<stdio.h>
int main()
{   
    union
    {   
      int a;
      char c;
    }s;
    s.a=0x46474849;
    for(int i=0;i<4;i++)
      printf("%c",s.c);
    printf("\n");
    return 0;
}

5. (写出下面程序执行的结果)
#include <stdio.h>
int main()
{
int i,j,m=3;
for(i=0;i<m;i+=2)
    for(j=m-1;j>=0;j--)
       printf("%1d%c", i+j,j ? 'H' : '$' );
printf("\n");
return 0;
}

三、程序设计题(本大题共40分,共 4 小题,每小题 10 分)
1. 从键盘输入一个指定金额(单位:元,例如345),然后存储显示支付该金额需要的各种面额钞票的数目。
2. 编程序求出100~1000之间的每一个整数各自的各位数字之和,要求求每个整数各位数字之和的函数单独编写。
3. 函数r_getbits的原型为:int r_getbits(unsigned x,unsignedpos,unsigned n);,其功能是返回变量x从pos位置开始从右向左计数的n位值。请编制函数r_getbits并用相应的主函数进行测试。
4. 编程序实现功能:利用一维数组,判定从键盘输入的任意正整数是否“回文数”,所谓“回文数”是指正读反读都相同的数,如:123454321。



答案:


一、填空题(20分,共 10 题,每小题 2 分)

1.
参考答案:
D
解题方案:

评分标准:

2.
参考答案:
①D
②B

解题方案:

评分标准:

3.
参考答案:
①B
②D

解题方案:

评分标准:

4.
参考答案:
①D
②A

解题方案:

评分标准:

5.
参考答案:
D
解题方案:

评分标准:

6.
参考答案:
①D
②A

解题方案:

评分标准:

7.
参考答案:
C
解题方案:

评分标准:

8.
参考答案:
①B
②C

解题方案:

评分标准:

9.
参考答案:
①A
②C

解题方案:

评分标准:

10.
参考答案:
①C
②D

解题方案:

评分标准:


二、程序阅读题(40分,共 5 题,每小题 8 分)

1.
参考答案:
字符串s占据的空间长度为:100

解题方案:

评分标准:

2.
参考答案:
5
解题方案:

评分标准:

3.
参考答案:
1
   222
33333
4444444
55555
   444
    3   

解题方案:

评分标准:

4.
参考答案:
IHGF

解题方案:

评分标准:

5.
参考答案:
2H1H0$4H3H2$
解题方案:

评分标准:


三、程序设计题(40分,共 4 题,每小题 10 分)

1.
参考答案:
#include<stdio.h>
typedef struct Currency
{
    char Denomination;
    int Value;
    int Num;
}CUR;
int main()
{
    CUR Currencys[]={"佰元",100,0,"伍拾元",50,0,"贰拾元",20,0,"拾元",10,0,
                  "伍元",5,0,"贰元",2,0,"壹元",1,0};
    int Money;
    scanf("%d",&Money);
    for(int i=0;i<7;i++)
    {   Currencys.Num=Money/Currencys.Value;
      Money%=Currencys.Value;
    }
    for( i=0;i<7;i++)
            printf("%s:%d张\n",Currencys.Denomination,Currencys.Num);
    return 0;
}

解题方案:

评分标准:

2.
参考答案:
#include <stdio.h>
#define N 1000
int main()
{   
    int sum(int x);
    int n;
    for(n=100;n<=N;n++)
      printf("%4d",sum(n));
    printf("\n");
    return 0;
}
int sum(int x)
{   
    int s=0;
    while(x)
    {   s+=x%10;
      x/=10;
    }
    return s;
}

解题方案:

评分标准:

3.
参考答案:
#include <stdio.h>
int main()
{
    int r_getbits(unsigned x,unsigned pos,unsigned n);
    unsigned num,pos,n;
    printf("Input num,pos and n: ");
    scanf("%u,%u,%u",&num,&pos,&n);
    printf("%d\n",r_getbits(num,pos,n));
    return 0;
}
int r_getbits(unsigned x,unsigned pos,unsigned n)
{
    int len;
    len=(x>>(pos+1-n))&~(~0<<n);
    return len;
}

解题方案:

评分标准:

4.
参考答案:
#include <stdio.h>
int main()
{
    int n,nt,na,i,j;
    printf("?n: ");
    scanf("%d",&n);
    nt=n;
    for(j=0;n!=0;j++)//将n分解成数字依次放入数组
    {
      na=n%10;
      n/=10;
    }
    for(i=0,j=j-1;i<j;i++,j--)
      if(na!=na)
            break;
    if(i>=j)
      printf("%d是回文数!\n",nt);
    else
      printf("%d不是回文数!\n",nt);
    return 0;
}

解题方案:

评分标准:


页: [1]
查看完整版本: 重庆大学网院2018年C语言程序设计 ( 第3次 )答案参考