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

[复制链接]
发表于 2018-6-14 21:45:29 | 显示全部楼层 |阅读模式
扫码加微信
第3次作业
一、填空题(本大题共20分,共 10 小题,每小题 2 分)
1.
函数reverse的原型为:void reverse(char *s);,其功能是颠倒存放字符串s,函数定义代码已经写入到源程序问文件myfuns.cpp。下面程序利用函数reverse将键盘上输入的字符串进行颠倒并输出。请选择合适选项填空完成程序。
#include <stdio.h>
#include      ①     
int main()
{
    char s[200];
    printf("?s: ");
    gets(s);
    reverse(s);
    puts(s);
    return 0;
}
A  "void reverse(char *s);"
B  void reverse(char *s);
C  myfuns.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;
}
A  a,b,c,d
B  a+b,c+d
C  MOD((x),(y))
D  fmod((x),(y))

3.
下面程序的功能是:随机产生20个实数存放到一维数组a中,并通过指向数组a的指针移动的方式输出所有数组元素值。请选择合适选项填空完成程序。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 20
int main()
{
    double a[N],*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;
}
A  a
B  a+N
C  p
D  *p

4. 下面程序的功能是:输出person数组中年龄最大者的姓名和年龄信息。请选择合适选项填空完成程序。
#include<stdio.h>
struct man
{
char name[20];
    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;
}
A  q->name,q->age
B  *q->name,q->age
C  old<p.age
D  old<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[3];
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;
}
A  struct test
B  test
C  &a,sizeof(struct test),1,f
D  a,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[M][N],*p;
    int i,j;
    srand(time(NULL));
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            a[j]=rand()%100;
    p=     ①        ;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
            printf("%4d",     ②        );
        printf("\n");
    }
    return 0;
}
A  a
B  (p+i*N+j)
C  a[0]
D  *(p+i*N+j)


二、程序阅读题(本大题共40分,共 5 小题,每小题 8 分)
1.
#include <stdio.h>
#include <string.h>
#define N 0
int main()
{
    char s[100]="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[4];
    }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,unsigned  pos,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[10];
    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[10],i,j;
    printf("?n: ");
    scanf("%d",&n);
    nt=n;
    for(j=0;n!=0;j++)//将n分解成数字依次放入数组
    {
        na[j]=n%10;
        n/=10;
    }
    for(i=0,j=j-1;i<j;i++,j--)
        if(na!=na[j])
            break;
    if(i>=j)
        printf("%d是回文数!\n",nt);
    else
        printf("%d不是回文数!\n",nt);
    return 0;
}

解题方案:

评分标准:


快速回复 返回顶部 返回列表