阅读程序题(共13分)
6.以下程序运行时输出结果是(6 ) 。
#include<stdio.h>
#define M 3
#defme N M+1
#define NN N*N/2
main()    .
{printf("%d\n",NN);}
7.以下程序运行时输出结果是(7)  。
#include <stdio.h>
main()
{char a=256:
int d=a;
prinff("%d",d+1);
}    、
8•;有如下程序,假定所用编译系统用两个字节存储一个int型操作数,已知输出结果第一行是FFD2,则第二行应当是( 8)
main()
{int a[10]={1,2,3,4,5,6,7,8,9,0},*p;
P=&a[5];
printf("%X\n",p);printf("%X\n",p-1);
9•;以下程序运行时输出结果的第一行是(9)  ,第二行是(10)。
int C:
void fl(int x,int *sum)
{static int y;
x++;y++;c=c+y;
*sum=(x+y)/c;
}
main()
{int a,b=100:
for(a=O;a<2;a++)
{f1(a,&b);printf("%d%d%d\n",a,b,c)}  ,
10.以下程序运行时输出结果的第一行是___(11)_______,第三行是
______(12)__________
#include<stdio.h>
void mat_change(int b[4][4])
{int i,j,m,n,k,c[6][6];
for(i=0;i<6;i++)
for(j=0;j<6;j++) c[i][j]=1;
for(i=1;i<5;i++)
for(j=1;j<5;j++)  c[i][j]=b[i-1][j-1];
for(i=1;i<5;i++)
for(j=1;j<5;j++)
{if(c[i][j]==0)
{k=0;
for(m=-1;m<=1;m++)
for(n=-1;n<=1;n++)
if(!(m==O&&n==O))k=k+c[i+m][j+n];
if(k==8)c[i][j]=1;
}
}
for(i=1;i<5;i++)
for(j=1;j<5;j++)
b[i-1][j-1]=c[i][j];
}
main()
{int i,j,a[4][4]={{0,1},{1,1,1,l},{0,1,0,1},{0,1,1,1}};
mat_change(a);
for(i=0;i<4;i++)    .
{for(j=0;j<4;j++)printf("%d",a[i][j]);
printf("\n");
}
}
11.以下程序运行时输出结果是(13)  。
#include<stdio.h>
void f(int a[],int n,int x,int *c);
main()
{int a[10]={1,3,5,2,3,5,3,7,4,1},t=0;
f(a,10,5,&t);printf("%d",t);
}
void f(int a[],int n,int X,int *c)
{if(n==0)return;
if(a[O]>=x)(*c)++;
f(a+1,n-1,x,c);
}
12.以下程序运行时输出结果的第一行是(14)  ,第二行是(15)  ,第三行是(16) #include<stdio.h>
typedef struct s
{
int index;
int value;
}M;
main()
{static int i,j,k,c[4][4];
M a[10]={{0,1},{3,2},{5,3},{6,4},{9,5},{15,6},{-l,0}},*p=a,
b[10]={{1,1},{3,2},{4,3},{6,4},{lO,5},{13,6},{-1,0}},*q=b;
while(p->index!=-1)
{
i=p->index/4;
j=p->index%4;
c[i][j]=P->value;
p++;
}
while(q->index!=-1)
{
i=q->index/4;
j=q->index%;
c[i][j]+=q->value;
q++;
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d",c[i][j]);
printf("\n");
}
}
13.以下程守运行时输出结果的第一行是__(17)______ ,第二行是
____(18)________  。
void q(char *s,int left, int right)
{ int i,j;
char x,y;
i=left; j=right;
x=s[(1eft+right)/2];
do
{while(s[i]>x&&i<right)i++:
while(s[j]<x&&j>left)j--;
if(i<=j)
{ y=s[i];
s[i]=s[j];
s[j]=y;
i++;j--;
}
}while(i<=j);
}
main()
{char strl[6]="abcde",str2[7]="25134";
q(strl,0,4);puts(strl);
q(str2,1,4);puts(str2);
}
●完善程序题(共12分)    7
14.如果一个两位整数是质数,将组成它的两个数字交换位置后形成的整数仍为质数,则称这
样的数为绝对质数。例如,13就是一个绝对质数。以下程序用于出所有两位绝对质数。
#include<stdio.h>
int a_prime(int n)
{int j,k,m[2];
m[O]=n;
m[1]= _____(19)_______ ;
for(j=0;j<2;j++)
for(k=m[j]/2;k>1;k--)
if(    (20)    )return 0;
return 1;
}
main()
{int i;
for(i=10;i<100;i++)
if(a_prime(i))printf("%d",i);
}
20  i
15.计算∑∑n!的值,即求(1!)+(1!+2!)+(1!+2!+3!)+…+(1!+2!+3!+…+20!) i=1 n=1
main()
{int i,n;double s=0,t;
for(i=1;i<=20;i++)
{  ________(21)__________ ;
for(n=1;_____(22)___________  ;n++)
{  t=t*n;s=s+t;}
}
printf("1!+(1!+2!)+…+(1!+2!+…+20 !)=%e\n",s);
}    .
16.以下程序中函数strmerge的功能是:合并a和b两个有序的字母字符串(字典序)而产生一
个新的字符串,在合并的过程中删除重复出现的字符,合并后的字符串仍然保持原序并保
存到c指向的数组中,函数返回在合并过程中删除的字符个数。main函数中输出合并后
的字符串“copy”以及在合并过程中删除的字符个数3。c语言编程软件是系统软件吗
include<stdio.h>
int strmerge(char *a,char *b,char *c)
{int i=0,j=0,k=O;char t;
while(a[i]!='\0' &&  (    22      )
{if(a[i]==b[j])
{t=a[i];i++;
(  24        );
}
else
if(a[i]<b[j])
t=a[i++];
else
t=b[j++];
if(t!=c[k-1])
(      25      )    =t;。
}
while(a[i])
if(a[i]!=c[k-1])
.c[k++]=a[i++];
else
i++:
while(b[j])
if(b[j]!=c[k-1])
c[k++]=b[j++];
else
j++;
e[k]='\0';
return    (      26      )  ;
}
main()
{static char s1[10]="ccp",s2[10]="oppy",s3[20];int n;
n=strmerge(sl,s2,s3);
puts(s3);
printf("%d",n);
}
17.设某链表上每个结点的数据结构为
typedef struct node
{int d;
struct node *next;
}NODE;
函数NODE *invert(NODE *head)的功能是:将head指向的单链表逆置,即原链表最后一
个结点变为第一个结点,原来倒数第二个结点变成第二个结点,以此类推。在逆置过程中不建
立新的链表。
NODE *invert(NODE *head)
{NODE *P,*q,*r;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。