admin 管理员组

文章数量: 1086019


2024年5月21日发(作者:前端框架设计)

《程序设计基础》期末考试卷 试卷一

一、语言基础(每小题2分,共26分)

1. 设有变量定义:int a=3, b=4, c=5; 表达式 !(a+b)+c-1 && b+c/2的值是多少?

2. 写出与代数式(x+2)e对应的C表达式。

3. 写出执行下列语句后的输出结果。

int x=5;

if(x=3) printf(“%dn”,x);

else printf (“%dn”,x+2);

4. 写出“仅当char类型变量ch是大写英文字母时改变ch为对应小写字母”的C表达式。

5. 若程序中使用了库函数toupper、strcpy,写出在预处理命令中必须包含的头文件名。

6. 写出下列程序段的输出结果:

int i,s=0;

for(i=1;i<10;i=i+2) s=s+i;

printf(“i=%d s=%xn”,i,s);

7. 设有宏定义“#define f(a,b,x) a*x+b”,写出下列语句的输出结果:

printf(“%d %dn”,f(1,2,3),f(f(1,2,3),4,2) );

8.写出下列程序段的输出结果:

int x=010,y=0x10,z=10;

printf(“%d,%d,%dn,x,y,z);

9.写出下列程序段的输出结果:

int k,j=3;

k=j++;

printf(“k=%d j=%dn”,k,j);

10. student 是结构体类型标识符,x是student类型变量,写出计算x字节数的表达式。

11.写出下列程序段的输出结果:

int f(int x)

{ static y=1;

x+=y; y++;

return x;

1

x+2

}

void main( )

{ int k;

k=f(3);

printf(“%d %dn”,k,f(k) );

}

12.自定义函数fact的功能是计算k的阶乘,函数原型可以写作

“float fact(int)”。按照以下各小题的要求写出相应的函数原型。

(1) 自定义函数f1的功能是计算平面上任意两点之间的距离。(2分)

(2) 自定义函数swap的功能是交换调用函数中两个float类型实参变量的值。(2分)

二、程序阅读(每题8分,共32分)

程序1:

#include

void main( )

{ int m=18,s=0;

do { switch(m%7)

{ case 2 : m/=2;s+=2;break;

case 3 : m/=3;s+=3;break;

case 5 : m/=5;s+=5;break;

default : m--;s--;

}

printf(“%dn”,s);

} while (m);

}

程序2:

#include

void main()

2

{ void div(int *,int *);

int a[5]={-5,0,60,45,34}, i=0, j=2;

while(a[i]<=0) i++;

while(a[i]!=1) div(a+i,&j);

}

void div(int *n,int *k)

{ if(*n%*k==0)

{ printf(“%d,%dn”,*n,*k); *n/=*k;}

else (*k)++;

}

程序3:

void main()

{ int s[8],i; char ch=‘B’-1;

printf(“%c %dn”,ch,ch);

for(i=7;i>=0;i--)

{ s[i]=ch&1; ch=ch>>1; }

for( i=0; i<8; i++) printf(“%d”,s[i]);

printf(“n”);

}

程序4:

#include

#include

void f(char *s1)

{ char c;

if (*s1!=’0’)

{ c=*s1;

strcpy(s1,s1+1);

3

f(s1);

putchar(c);

}

}

void main()

{ f(“abcdefg”); }

三、程序填空(每空2分,共20分)

1. 函数sort使用选择法将一维整型数组中各元素按值从大到小排序。

void sort ( (1) )

{ int i,j,k,temp;

for(i=0;i

{ k=i;

for(j=i+1;j

if( (2) ) k=j;

temp=a[k]; (3)

}

}

2. 函数del_node用于从头指针为head的链表中删除数据成员name与字符串str1相等的第一个节点(结构体类型标

识符student定义如下)。

struct student {

char name[9];

int score;

student *next;

};

student *del_node(student *head, char *str1)

{ student *p1,*p2;

if(head==NULL)return head;

4

(4) ;

if(strcmp(head->name,str1)==0)

{ head=head->next;

free p1;

return head;

}

while (p1->next!=NULL)

{ p2=p1->next;

if( (5) )

{ p1->next=p2->next;

free p2; break;

}

else (6) ;

}

return head;

}

3. 本程序将当前目录下的文本文件复制到,要求将中每一个非英文字符后的第一个小写英文字母

改为大写字母写到文件中,其它字符复制时不变。

#include

#include

#include

void main()

{ (7) ;

int flag=1;

char ch;

if((f1=fopen("","r"))==NULL)

{printf("不能打开文件");exit(0);}

5

if((f2=fopen("","w"))==NULL)

{printf("不能打开文件");exit(0);}

while( (8) )

{ if( (9) &&ch>=‘a’&&ch<=‘z’ )

fputc(ch-32,f2);

else (10) ;

if(!isalpha(ch))flag=1;/*isalpha(ch)函数:判ch是否为英文字母,是返回1,否则返回0*/

else flag=0;

}

fclose(f1);fclose(f2);

}

四、程序设计(本题共22分)

1. 编制程序,输入n个整数(n从键盘输入,n>0),输出它们的偶数和(10分)。

2. 从键盘输入n行字符串(n从键盘输入,n>0),要求按字典顺序(即从小到大)排序后输出(12分)。

《程序设计基础》期末考试卷 试卷二

一、语言基础(每小题各3分,共计27分)

1.连续执行以下(1)~(4)语句后,i,j的值分别为多少?

int i=2,j=3;

(1)i=(i++>j)?i:j;

(2)j^=i+j;

(3)i*=2%j+3;

(4)j=j>2||j;

i+=j;

2.对于以下程序段,运行后i的值为多少?

int i=0,a=1;

switch(a)

{

case 1: i+=1;

case 2: i+=2;

default : i+=3;

6

}

3.下列while循环,将执行多少次?

int i=4;

while (--i) printf(“%d”,i);

4.定义“char ch”,写出判断ch是否为大写字母的表达式。

5.计算表达式“4/5*(float)3+(float)3*4/5”的值

6.写出语句“printf(“%x,%o”,16,10);”的输出结果

b

b

2

4ac

2a

7.定以“float a,b,c”,其中:a≠0,b-4ac≥0,写出下列数学式的C表达式

8.若x的当前值为5,执行语句“if(x=3)x=x+5;”后,x的值为多少?

9. 执行下列语句后,a,b的值分别为多少

int a=12,b=7;

#define M(x,y)(x+=y-=x+=y)

M(a,b);

二、程序阅读(每个小题8分,共计32分)

程序1:

#include "stdio.h"

void main()

{

}

程序2:

#include "stdio.h"

7

static a[5]={1,3,5,7,9};

static int *num[5]={&a[2],&a[1],&a[0],&a[3],&a[4]};

int **p,i;

p=num;

for(i=0;i<5;i++)

{

}

printf("%dt",**p);p++;

2

#include "string.h"

f(char c,char *s)

{

int m,n,h;

for(n=0,h=strlen(s);n<=h;)

{

m=(n+h)/2;

if(c

h=m-1;

else if(c>s[m])

n=m+1;

else

return m;

}

return -1;

}

void main()

{

printf("%dn",f('g',"abdgkmxy"));

printf("%dn",f('T',"BQMAXYZOTF"));

}

程序3:

#include "stdio.h"

inv(int *x,int n)

{

int *p,t,*i,*j,m=(n-1)/2;

i=x;j=x+n-1;p=x+m;

for(;i<=p;i++,j--)

{

t=*i;

*i=*j;

*j=t;

}

8

}

return 0;

void main()

{

}

程序4:

#include "stdio.h"

void main()

{

}

三、程序填空(每空各2分,共22分)

1.[程序说明]下述程序对一篇100行,80列的文章,分别统计文中大写字母、小写字母、数字、空格以及其它字符的

个数。

[程序]

main()

{

int i,j,upper,lower,digit,space,others;

char text[100][80];

upper=lower=digit=space=others=0;

for( (1) )

{

9

static char a[]="ABCDEFGH",b[]="abCDefGh";

char *p1,*p2;

int k;

p1=a;p2=b;

for(k=0;k<7;k++)

if(*(p1+k)==*(p2+k))

printf("%c",*(p1+k));

static int i,a[]={1,3,5,7,9,11,13,15};

inv(a,5);

for(i=1;i<=5;i++)

printf("%d,",*(a+i));

printf("n");

printf(”n请输入第%d行:n”,i);

gets(text[i]);

for( (2) )

if( (3) )

upper++;

else if( (4) )

lower++;

else if( (5) )

digit++;

else if( (6) )

others++;

}

printf(”大写英文字母数=%dn”,upper);

printf(”小写英文字母数=%dn”,lower);

printf(”数字个数=%dn”,digit);

printf(”空格个数=%dn”,space);

printf(”其它字符个数=%dn”,others);

}

2.[程序说明]下述递归函数将整型数据转换成字符输出。

[程序]

#include "stdio.h"

void prn(int x)

{

if(x<0)

{

(7) ;

x=-x;

}

if(x/10)

prn( (8) );

else space++;

putchar( (9) );

}

10

3.[程序说明]下列函数将字符串s逆序输出,如字符串为“abcd”,则输出“dcba”

[程序]

void f( (10) )

{

}

四、程序设计(共19分)

1. [程序说明]

从键盘上输入某班50位学生的姓名及数学、英语二门课成绩,输出平均成绩低于60分的学生姓名及各门课成绩。

(10分)

2. [程序说明]

求1!+2!+3!+„+20!并把结果在屏幕上显示出来。(9分)

int i=0;

while(s[i])i++;

for( (11) )printf(”%c”,s[i]);

《程序设计基础》期末考试卷 试卷三

一、语言基础(共25分)

(一) 判断题(每题1分,共10分)

[说明]:在以下提供的若干陈述中,逐一判断其正确与否,正确选择A,错误选择B。

1.

2.

3.

4.

5.

6.

7.

8.

9.

在C源程序中将语句“if(x==5)y++;”误写作“if(x=5)y++;”将导致编译错误。

C的double类型数据可以精确表示任何实数。

若表达式sizeof(int)的值为4,则int类型数据可以表示的最大整数为2

-1。

在所有的关系运算符(>=、>、==、!=、<=、<)中,优先级最低的运算符是“==、!=”。

标准输入函数scanf的返回值为所输入数据的个数或EOF。

若x的当前值为5,执行语句“if(x=3)x=x+5;”后,x的值依然是5。

执行循环语句“for(i=1;i<10;i=i+2)s+=i;”后,i的当前值为11。

a是一维数组名,数组元素a[1]还可以写作“*(a++)”。

函数原型为“void sort(float a[],int n)”,调用该函数时,形参数组a被创建,实参数组各元素的值被复

制到a数组各元素中。

10. 若打开文件的方式为“w”而该文件已经存在,则文件中原有数据被清空。

31

(二) 单选题(每题1分,共15分)

1.执行语句“k=x++&&y++||z++;”(各变量当前值均为1)后,变量k、x、y、z值依次为 。

A、1、2、2、1 B、1、2、2、2 C、0、2、2、1 D、0、2、2、2

2.计算变量x(x大于1)整数部分位数的表达式,可以写作 。

11

A、(int)log10(x) B、log10(x) C、log10(x)+1 D、(int)log10(x)+1

3.判断变量x、y中有且只有1个值为0 的表达式为 。

A、!(x*y)&&x+y B、(x*y)&&x+y C、x*y==0 D、x==0&&y!=0

4.若k、s的当前值分别为4、0,执行语句“while(--k)s+=k;”,k、s值分别为 。

A、10、0 B、0、10 C、6、0 D、0、6

5.执行语句“for(s=0,k=1;s<20 || k<10;k=k+2)s=s+2; ”s、k的值为 。

A、25、9 B、25、11 C、36、11 D、36、9

6.执行语句“for(float x=0,s=0;x!=60;x=x+0.3)s=s+x;”后x的值为 。

A、不可能大于60 B、不可能大于60.3 C、一定小于60 D、可以远大于60

7.声明语句为“char a[10]”,执行下列语句后的输出结果为 。

printf(“%d,%dn”,sizeof(a),strlen(strcpy(a, “Windows”)));

A、7,7 B、7,8 C、10,7 D、10,8

8.函数strcmp(“Int”, “int”)的返回值为 。

A、0 B、-32 C、1 D、-1

9.函数f定义如下,执行语句“m=f(5);”后,m的值应为 。

int f(int k)

{ if(k==0||k==1)return 1;

else return f(k-1)+f(k-2);

}

A、3 B、8 C、5 D、13

10.函数f定义如下,执行语句“sum=f(5)+f(3);”,sum的值应为 。

int f(int m)

{ static int i=0;int s=0;

for(;i<=m;i++)s+=i; return s;

}

A、21 B、16 C、15 D、8

11.下列语句定义x为指向int类型变量a的指针,其中哪一个是正确的 。

A、int a,*x=a; B、int a,*x=&a; C、int *x=&a,a; D、int a,x=a;

12.声明语句为“int a[3][4];”,下列表达式中与数组元素a[2][1]等价的是 。

A、*(a[2]+1) B、a[9] C、*(a[1]+2) D、*(*(a+2))+1

13.执行语句“a=b=3;printf(“%d,%dn”,a<<2,b>>2);”后的输出结果为 。

A、12,0 B、12,3 C、false,true D、true,false

14.若a是32 位int类型变量,判断其32个2进位中末两位均为1的表达式为 。

12

A、a&3==3 B、a&3==1 C、a&&11==3 D、a&11==11

15.以“只读”方式打开文本文件c:,下列语句中哪一个是正确的 。

A、fp=fopen(“c:”, “a”); B、fp=fopen(“c:”, “r”);

C、fp=fopen(“c:”, “wb”); D、fp=fopen(“c:”, “rb”);

二、程序填空(除“程序1”每空3分外,其它每空2分,共26分)

程序1:

#include

int p(int k,int a[ ])

{ int m,i,c=0;

for (m=2;m<=k;m++)

{ for (i=2;i<=m;i++)

if(!(m% i) ) break;

if (i==m) a[c++]=m;

}

return c;

}

#define MAXN 15

main ( )

{ int i, m,s[MAXN];

m= p(11,s);

for (i=0;i

printf(“n”);

}

该程序的输出结果是 ⑴ ;函数 int p(int k,int a[ ])的功能是 ⑵ 。

程序2:

[程序说明]输入x、n后输出下列算式的值。

x-x

2

/2!+x

3

/3!-x

4

/4!+...+(-1)

n-1

x

n

/n!

[程序]

void main()

{ float s,t,x; int i,n;

scanf(“%f%d”,&x,&n);

(3)

for(i=1;i<=n;i++){ (4) s+=t;}

13

(5)

}

(3)A、s=0;t=0; B、s=0;t=-1; C、s=x;t=1 D、s=x;t=-1;

(4)A、t=-t*x/i; B、t=pow(x,i)/i; C、t=-pow(x,i)/i; D、t=t*x/i;

(5)A、printf(“%fn”,s); B、printf(“%fn”,s); C、printf(“%sn”,s); D、printf(“%c”,s);

程序3:

[程序说明]运行时输入1个文本文件的文件名,删除该文件中所有空格符。

[程序]

#include

#include

void main()

{ FILE *f1,*f2; char ch,filename[46];

(6)

if((f1=fopen(filename,“r”))==NULL){printf(“%s不能打开!n”,filename);exit(0);}

f2=fopen(“”, “w”);

while((ch=fgetc(f1))!=EOF) if(ch!= ‘ ’) (7)

fclose(f1);fclose(f2);

(8) rename(“”, “filename”);

}

(6)A、gets(&filename); B、fgets(filename); C、fgets(&filename) D、gets(filename);

(7)A、fputc(f2,ch); B、fputc(ch,f2); C、fputc(f2,&ch); D、fputc(&ch,f2);

(8)A、remove(“filename”); B、delete “”; C、remove(filename); D、free filename;

程序4:

[程序说明]下列程序运行时,输入n个学生的姓名和3门课成绩,然后根据3门课的平均成绩从高分到低分显示每个学

生的姓名、3门课成绩以及平均成绩。

[程序]

#include

(9)

void main()

{ struct student { char name[9];int a[3];float v;}temp, *s;

int i,j,k;

scanf(“%d”,&n); s=(student *)malloc(n *sizeof(student));

for((10) )

14

{ scanf(“%s”,s[i].name); s[i].v=0;

for(j=0;j<3;j++){scanf(“%d”,&s[i].a[j]); (11) ;}

}

for(i=0;i

{ k=i;

for((12) )if(s[j].v>s[k].v)k=j;

temp=s[i];s[i]=s[k];s[k]=temp;

}

for(i=0;i

}

(9)A、#include B、#include C、#include D、#include

(10)A、i=1;i<=n;i++ B、i=1;i0;--i

(11)A、s[i].v=s[i].v+s[i].a[j] B、s[i].v+=s[i].a[j]/3

C、s+i->v=s+i->v+s+i->a[j]/3 D、s+i->v+=s+i->a[j]/3

(12)A、j=i-1;j

三、程序阅读(共24分)

程序1:(6分)

#include

#include

void main()

{ char c,*a=“Office”; int i;

for(i=0;i

{ c=*a; strcpy(a,a+1);

a[strlen(a)]=c;

puts(a);

}

}

程序2:(8分)

#include

void main()

{ float a[4][3]={{3,2,5},{-3,2,1},{4,3,2},{5,1,3}}; int i,j; float v;

for(i=0;i<4;i++)

{ v=a[i][0];for(j=1;j<3;j++) v+=a[i][j];

15

v/=3; for(j=0;j<3;j++)a[i][j]-=v;

}

for(i=0;i<4;i++)

{ for(j=0;j<3;j++)printf(“%6.1f”,a[i][j]);

printf(“n”);

}

}

程序3:(9分)

#include

#include

void main()

{ struct node {int x; struct node *next ;} *p1,*p2=NULL;

int a[5]={7,6,-5,28,1},i,j,s;

for(i=0;i<5;i++)

{ s=0; for(j=1;j<=a[i]/2;j++) if(a[i]%j==0)s+=j;

if(a[i]!=s)

{p1=(struct node *)malloc(sizeof(struct node));

p1->x=a[i];p1->next=p2;p2=p1;

}

}

while(p1!=NULL) {printf(“%dn”,p1->x);p1=p1->next;}

}

四、程序设计(共25分)

1. 编制函数,其功能是在float 类型1维数组中查找最大值、最小值并将它们返回到调用程序;编制main()函数

测试该函数。(10分)

2.由命令行输入两个正整数,编写一程序;打印输出其间所有的素数。

例如,若程序编译后产生的可执行文件名为xuprime,则运行命令行

c>xuprime 2 100

就能输出其间所有素数 2,3,5,97。(15分)

《程序设计基础》期末考试卷 试卷四

一、语言基础(每题2分,共26分)

8. 设有如下程序段:

int *p,*q, i,j;

16

i=5;j=6;p=&i;q=p;p=&j;

求(*p), (*q)的值分别是多少?

2.定义“char ch;”,写出判断ch是否为大写字母的表达式。

3.计算表达式“4/5*(float)3+(float)3*4/5”的值。

4.计算表达式“(7<<1)&~(1<<2)”的值。

5.在C语言程序中,若对函数类型未加显式说明,则函数的隐含类型是:

6.写出语句“printf("%x,%o",16,10);”的输出结果。

7.写出下列程序段的输出结果。

#define T 16

#define S (T+10)-7

printf("%dn",S*2);

8.写出下列程序段的输出结果。

#include

printf("%d,%dn",NULL,EOF);

9.写出下列程序段的输出结果。

static char s[]="student";

printf("%d,%cn",sizeof(s),*(s+2));

10.写出下列程序段的输出结果。

char *st[]={"one","two","three","four"};

printf("%sn",*(st+3)+1);

11.写出下列程序段的输出结果。

char c,k;

c='b';k=4;

switch(c){

case 'a':k=1;

case 'b':k=2;

case 'c':k=3;

}

printf("%dn",k);

17

12.对于以下递归函数f,计算f(3)的值。

int f(int k)

{return((k<0)?1:f(k-2)+2);}

13.对于以下函数f,计算f(f(2))的值。

int f(int x)

{static int k=0;

x+=k++;

return x;

}

二、程序阅读(共28分)

程序1:(6分)

#include

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

void main()

{int s,k;

for(s=0,k=0;k<3;k++)

s+=a[k][k];

printf("%d--",s);

for(s=0,k=0;k<3;k++)

s+=a[k][3-k];

printf("%d--",s);

for(s=0,k=0;k<4;k++)

s+=*(a[1]+k);

printf("%dn",s);

}

程序2:(9分)

#include

int x,y,z;

void p(int *x,int y)

{++*x;

y--;

z=*x+y;

18

printf("%d,%d,%d--",*x,y,z);

}

void main()

{x=2;y=3;z=4;

p(&x,y);

printf("%d,%d,%d--",x,y,z);

p(&y,x);

printf("%d,%d,%dn",x,y,z);

}

程序3:(7分)

struct node{

};

int fun(struct node *h)

{int k=0;

struct node *p=h,*q=NULL;

while(p){

}

return k;

}

写出执行语句"printf("%dn",fun(head));"的输出结果。

其中,head是node类型的全程量;在执行上述printf语句前,以head为头指针的链表各节点的当前值如下所示:

if ((q!=NULL)&&(p->next)) k+=p->num;

q=p;

p=p->next;

int num;

struct node *next;

Head 4 3 5 6 7 NULL

程序4:(6分)

int d=1;

fun(int p)

{static int d=5;

19

d+=p;

printf("%d ",d);

return(d);

}

main()

{int a=3; printf("%d n",fun(a+fun(d))); }

程序5:(3分)

#define f(x) x*x

main()

{int a=6,b=2,c;

c=f(a)/f(b);

printf("%d n",c);

}

三、程序填空(每空2分,共26分)

1.[程序说明]输入某班50位学生的姓名及数学、英语成绩,计算每位学生的平均分;然后输出平均分最高的学生的姓

名及其数学和英语成绩。

[程序]

#include

#define SIZE 50

struct student{

};

void main()

{struct student s[SIZE];

int k,maxsub=0;

for(k=0;k

scanf("%s%d%d",s[k].name,&s[k].math,&s[k].eng);

(1) =(s[k].math+s[k].eng)/2.0

}

char name[10];int math,eng;float aver;

for(k=1;k

if( (2) ) (3) ;

printf("%10s%3d%3dn",s[maxsub].name,s[maxsub].math,s[maxsub].eng);

20

}

2.[程序说明]函数f(v,x,&n)将x插入到已从小到大排序好的数组v中,插入x后数组中的元素仍然有序。n表示

数组v中已排序好的元素个数。

[程序]

void f(int v[],int x, (4) )

{int k;

for(k=*m-1; (5) ;k--)

}

3.[程序说明]函数atoi的功能是将字符串转换成整数,如“atoi(“-123”)”将返回-123。

[程序]

atoi( (7) )

{int k,sign,digit;

for(k=0;s[k]==''||s[k]=='t';k++);

sign=1;

if(s[k]=='-') { (8) }

(9) ;

while(s[k]>='0'&&s[k]<='9'){

(10) ;

k++;

}

return sign *digit;

}

4.[程序说明]下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。请填空。

#include

#include

main()

{char a[]="clanguage",t;

int i,j,k;

k= (11) ;

21

v[k+1]=v[k];

(6) =x;

(*m)++;

for(i=0;i<=k-2;i+=2)

for(j=i+2;j<=k; (12) )

if( (13) )

{t=a[i];a[i]=a[j];a[j]=t;}

puts(a);

printf("n");

}

四、综合编程(每题10分,共20分)

1.输入m和n(m≥n≥0)后,计算下列表达式的值并输出。

m!

n!(m

n)!

要求将计算阶乘的运算写成函数fact(n),函数返回值的类型为float。

2.统计当前目录下文本文件中字符‘$’出现的次数,并将统计结果写入当前目录下的文本文件。

《程序设计基础》期末考试卷 试卷五

一、语言基础(每题2分,本题共20分)

1.#define f(x) x*x

main()

{int a=6,b=2,c;

c=f(a)/f(b);

printf(“%d”,c);

}

此程序的输出结果是多少?

2.main()

{int n=4;

while(n--) printf(“%d”,--n);

}

此程序的输出结果是多少?

3.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是( )

A. p+1 B. a+1 C. a++ D. ++p

4.下面程序执行时( )

22

main()

{int x=3,y=0,z=0;

if(x=y+z) printf(“****”);

else printf(“####”);

}

A. 有语法错误不能通过编译 B. 输出****

C. 可以通过编译,但是不能通过连接,因而不能运行 D. 输出####

5.main()

{char *p1,*p2,str[50]=”xyz”;

p1=”abcd”;p2=”ABCD”;

strcpy(str+2,strcat(p1+2,p2+1));

printf(“%s”,str);

}

此程序的运行结果是什么?

6.设有以下定义:int x=1,y=-1;

则语句:printf(“%dn”,(x--&++y));的输出结果是什么?

7.以下选项中,不能正确赋值的是( )

A. char s1[10];s1=”Ctest”; B. char s2[]={‘C’,’t’,’e’,’s’,’t’};

C. char s3[20]=”Ctest”; D. char *s4=”Ctestn”

8.设有说明int a[2]={0,1},*p=a;泽下列错误的C语句是( )

A. a+=1; B. p+=1; C. *p++; D.(*p)++;

9.main()

{int a=-1,b=1,k;

if((++a<0)&&!(b--<=0)) printf(“%d %dn”,a,b);

else printf(“%d %dn”,b,a);}

此程序的运行结果是什么?

10.以下选项中,能定义s为合法的结构体变量的是( )

A. typedef struct abc B. struct ABC f ABC

{double a; {double ; {double a; {double a;

char b[10]; char b[10]; char b[10]; char b[10];

}s; }s; }ABC s; }ABC s;

二、程序阅读(共计39分)

程序1:(7分)

23

#include

void main()

{

int a,b,sum;

char *format;

format="a=%d,b=%d,sum=%dn";

a=5;

b=6;

sum=a+b;

printf(format,a,b,sum);

sum=a+++b;

printf(format,a,b,sum);

sum=++a+b;

printf(format,a,b,sum);

}

程序2:(8分)

#include "stdio.h"

void main()

{

int a[3][4]={0};

int i=1,j=2,*p=a[0];

for(i=0;i<10;i++)

*p++=*p+i+j++;

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

printf("%3d",a[i][j]);

printf("n");

}

}

程序3:(7分)

#include "stdio.h"

void main(int argc,char *argv[])

24

{

char c;

int d=0,l=0,t=0;

while(--argc)

{

}

while(c=*argv[argc]++)

{

}

if(c<='9'&&c>=0)

d++;

else if(c<='z'&&c>='a'||c<='Z'&&c>='A')

l++;

else

t++;

printf("d=%dnl=%dnt=%d",d,l,t);

}

编译后生成,求运行t ab2d3f $x4y5jfab 1234#后输出的结果。

程序4:(8分)

#include "stdio.h"

void main()

{

}

void div(int *n,int *k)

{

if(*n%*k==0)

{

25

void div(int*,int*);

int a[5]={-5,0,60,71,29},i=0,j=2;

while (a[i]<=0)

i++;

while(a[i]!=1)

div(a+i,&j);

printf("%d,%dn",*n,*k);

*n/=*k;

}

else (*k)++;

}

程序5:(9分)

#include

int i=1;

main()

{auto int i,j;

i=reset();

for(j=1;j<=3;j++)

{printf(“i=%d j=%dn”,i,j);

printf(“next(i)=%dn”,next(i));

printf(“last(i)=%dn”,last(i));

printf(“new(i+j)==%dnn”,new(i+j));

}

}

int reset()

{return(i);

}

int next(int j)

{return(j=i++);

}

int last(int j)

{static int i=10;

return(j=i--);

}

int new(int i)

{auto int j=10;

return(i=j+=i);

}

三、程序填空题(每空2分,共20分)

26

1.[程序说明]

以下程序实现将array中10个数按输入的相反顺序存放,其中数组array由键盘输入。

[程序]

#include "stdio.h"

void invert(int *x,int n)

{

int *p,m,t,*i,*j;

(1)

i=x;j=x+n-1;p=x+m;

for(;i<=p; (2) ,j--)

{

}

t=*i;*i=*j;*j=t;

return;

}

void main()

{

}

2.[程序说明]

head为指向以下结构的链表指针,inf域值非负,程序将判断链表是否按inf域值从小到大排列的。

[程序]

struct nlist

{

int inf;

struct nlist *next;

};

27

int i,array[10],*p=array;

for(i=0;i<10;i++, (3) )

scanf("%d,",p);

(4) ;

invert(p,10);

for(p=array;p< (5) ;p++)

printf("%d",*p);

int f(struct nlist *head)

{

}

3.[程序说明]下列函数判断字符串是否为回文(即正读与反读一样,如:"abcdcba"),若是,返回1,否则返回0。

[程序]

#include "string.h"

f(char *s)

{

}

四、程序设计(共21分)

3. [程序说明](11分)

已知有一个已经按升序排好序的数组,现在输入一个数,试编写一个程序把输入的这个数插入到此数组中,要求

插入后,数组仍为升序排序。

4. [程序说明](10分)

有一个文件,请编写一程序,将中的所有小写字母转换成大写字母。

int i,j;

for(i=0;j=strlen(s)-1; (8) ;i++,j--)

if( (9) )

return 0;

struct nlist *p;

int n=0;

for(p=head; (6) p->next)

if( (7) )break;

else n=p->inf;

return(!p);

(10) ;

《程序设计基础》期末考试卷 试卷六

一、 语言基础题(每题2分,共20分)

1.表达式10/3和10%3的结果分别是什么?

2.定义int x,y;执行y=(x=1,++x,x+2);语句后,y的值是多少?

3.以下for循环执行的次数为多少?

for(x=0,y=0;(y!=123)&&(x<4);x++);

28

4.若有以下定义: char a;int b;float c;double d;

则表达式a*b+d-c*b的值的类型为什么?

5.若有int x=3,y=5;则表达式x*=x+y%x+y的值为多少?

6.以下程序的输出结果是什么?

main()

{char c=’z’;

printf(“%c”,c-25);

}

7.C语言程序的基本结构包括哪些?

8.C语言程序的基本单位是什么?

9.以下函数调用语句中含有几个实参。

proc((expl,exp2),(exp3,exp4,exp5));

10.定义int x,y,z; x=y=z=1; 执行语句z=--x&&y++;后,x,y,z的值分别是多少?

二、 程序阅读题(每题8分,共32分)

1.执行以下程序,输入-10的结果是 ,输入5的结果是 ,输入10的结果是 ,输入

30的结果是 。

#include

main()

{

int x,c,m;

float y;

scanf(“%d”,&x);

if(x<0) c=-1;

else c=x/10;

switch(c)

{

case -1:y=0; break;

29

case 0:y=x; break;

case 1:y=10; break;

case 2:

case 3:y=-0.5*x+20; break;

default:y=-2;

}

if(y!=-2) printf(“y=%dn”,y);

else printf(“errorn”);

}

2.写出下面程序的输出结果

main()

{

char *s=”12134211”;

int v[4]={0,0,0,0},k,i;

for(k=0;s[k];k++)

{

switch(s[k])

{

case ‘1’:i=0;

case ‘2’:i=1;

case ‘3’:i=2;

case ‘4’:i=3;

}

v[i]++;

}

for(k=0;k<4;k++) printf(“%d”,v[k]);

}

30


本文标签: 程序 输出 下列 函数 写出