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 (10)A、i=1;i<=n;i++ B、i=1;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
版权声明:本文标题:《程序设计基础》期末考试卷 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1716273711a692649.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论