上海工程技术大学2009-2010(1)C语言试卷A
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.读程序,写结果(第1题题5分;第2题每题7分;第3、4、5题10分;共计31分)1. 该程序的输出是
main()
{
int k =7,n=0;
do
{
switch(k)
{
case 1:
case 3:n+=1; k--; break;
case 5:
case 6: n++;k--;break;
default:n=0;k--;
case 2:
case 4:n+=2; k--;break;
}
printf("%d",n);
}while(k>0&&n<=7);
}
2.该程序的输出是
#include
void main()
{
char a[]="programming",b[]="language";
char *p1;*p2;
int i;
p1=a;p2=b;
for(i=0;i<8;i++)
if(*(p1+i)==*(p2+i)) printf("%c",*(p1+i));
}
3.设本题输入的数n=2,m=2,该程序的输出是
#include "stdio.h"
int Ack(int m,int n)
{
int ackmn;
if(m==0)
{
ackmn=n+1;
return ackmn;
}
else if(n==0)
{
ackmn=Ack(m-1,1);
return ackmn;
}
{
ackmn=Ack(m-1,Ack(m,n-1));
printf("ackmn=%d\n",ackmn);
return ackmn;
}
}
main()
{
int m,n,sum;
printf("input m and n:");
scanf("%d,%d",&m,&n);
sum=Ack(m,n);
printf("\n%d\n",sum); /
}
4. 输入自然数n=5时, 该程序的输出是#include "stdio.h"
main()
{
int n,a,i,j,k;
printf("Please inpt a Number:");
scanf("%d",&n);
printf("\n");
a=1;
for (i=1;i<=n;i++)
{ k=a;
for (j=1;j<=n+1-i;j++)
{printf("%4d",k);
k=k+(n-j+1);
}
printf("\n");
a=a+1;
}
}
5. 输入自然数n=5时, 该程序的输出是#include
main()
{
char c=96;
int i,j,n,k;
printf("Input a number n=");
scanf("%d",&n);
printf("\n");
k=(n+1)/2;
for(i=1;i<=k;i++)
{
for(j=1;j<=k-i;j++) printf(" ");
for(j=1;j<=i*2-1;j++) printf("%c",c+i);
printf("\n");
for(i=k-1;i>=1;i--)
{
for(j=1;j<=k-i;j++) printf(" ");
for(j=1;j<=i*2-1;j++) printf("%c",c+i);
printf("\n");
}
}
二.(16分)下列程序是要完成验证卡布列克运算,即任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数。
读完程序后,补全标有分值的程序段,使程序具有验证卡布列克运算的功能。
int count=0;
main()
{
int n;
printf("Enter a number:");
scanf("%d", &n); /*输入任意正整数*/
vr6174(n); /*调用函数进行验证*/
}
int vr6174(int num)
{
int each[4],max,min ;
while (num!=6174&&num) /*若不等于6174且不等于0则进行卡布列克运算*/
{
parse_sort(num,each); /*将整数分解,数字存入each数组中*/
max_min(each,&max,&min); /*求数字组成的最大值和最小值*/
num=max-min; /*求最大值和最小值的差*/
printf("[%d]: %d-%d=%d\n",++count,max,min,num); /*输出该步计算过程*/
}
}
int parse_sort(int num,int *each)
{
int i,*j,*k,temp;
for(i=0;i<=4;i++) /*将NUM分解为数字(3分)*/