重庆大学网院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]