同济大学C B卷答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5. #include<stdio.h> void main( ) { int a,b,c,d; a=0;b=1,c=2,d=3; if(++a&&b++||++c&&d++) if(!a||b>d) b++; else if(!c&&++d) c++; else a+=6; d--; printf(“%d,%d,%d,%d\n”,a,b,c,d); } 7,2,2,2 6. #include "stdio.h" int x=1; void fun(int *p) { static int x=2; *p *=x-1; x += 2; } void main( ) { int i; for(i=1;i<4;i++) { fun(&x); printf("%d\n",x); } } 1 3 15 7. #include <stdio.h> void swap1(int x[]) { int t; t=x[0];x[0]=x[1];x[1]=t; } void swap2(int x0,int x1) { int t; t=x0;x0=x1;x1=t; } void main( ) { int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]); printf("%d,%d,%d,%d\n", a[0],a[1],b[0],b[1]); } 5,3,3,5
8. #include<stdio.h> void f(int x,int *p, float &y) { x=(int)y;*p=10;y+=*p*x;} void main( ) { int a=0,b=0;float c=10.5; f(a,&b,c); printf(“%d,%d,%f\n”,a,b,c); } 0,10,110.5000 9. #include "stdio.h" #define NULL 0 struct Tpoint { int x; int y; struct Tpoint *next; }; void main( ) { struct Tpoint a,b,c,*head,*p; a.x=10;a.y=10; b.x=20;b.y=30; c.x=30;c.y=50; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do { printf("%d,%d\n",p->x,p->y); p=p->next; }while(p!=NULL); } 10,10 20,30 30,50
同济大学课程考核试卷(B 卷答案)
命题教师签名: 课号: 审核教师签名: 考试考查:考查
姓名 得分
课名:C++语言
此卷选为:期中考试( )、期终考试(√)、重考( )试卷 年级 专业 学号
一、选择填空 (30 分) 1) 已定义 c 为字符型变量,则下列语句中正确的 是( C ) 。 A、c=’65’; B、c="65"; C、c=65; D、c="A"; 2) 若有以下定义: int n=10; typedef int array[10]; 则下列语句中不能正确定义数组的是( B ) 。 A、 int a[10]; B、 int b[n]; C、 array c; D、 float d[5*2]; 3) 若有以下定义: int *p; int x[3][4]; 则下列赋值语句中错误的是( A ) 。 A、p=x; B、p=&x[0][0]; C、p=x[0]; D、p=*(x+1); 4) 有以下程序段: x=1200; if(x>1000) y=0.5; else if(x>800) y=0.4; else if(x>600) y=0.3; else y=0.2; 则程序段执行完毕时,y 的值为( A A、0.5 B、0.4 C、0.3 D、0.2
7) 有下列定义:int b[10]; int *p=b; 以下表达式中不能使数组 b 中元素 b[1]的值为 1 的是( C ) 。 A、*(b+1)=1 B、*(p+1)=1 C、* ++b =1 D、* ++p =1
8) 给出以下定义: char str1[ ]="abcde"; char str2[ ]={'a','b','c','d','e'}; 则以下叙述中正确的是( C ) 。 A、数组 str1 和数组 str2 等价 B、数组 str1 和数组 str2 的长度相同 C、数组 str1 的长度大于数组 str2 的长度 D、数组 str1 的长度小于数组 str2 的长度
6) 若有定义:int *p[5]; 则以下叙述中正确的是( B ) 。 A、定义了一个名为*p 的整型数组,该数组含有五 个整型元素; B、定义了一个指针数组 p,该数组含有五个元素, 每个元素都是整型指针; C、定义了一个指向整型数据的指针变量 p,该变 量具有五个指针; D、定义了一个可指向一维数组的指针变量 p,所 指一维数组有五个整型元素;
#include <stdio.h> #include <math.h> void turn(double *p,double *p1,double sita); //函数声明 void main( ) { int i,j; double coord [2]; double coord1[2]={20.0,10.0}; double sita; sita = 30.0*3.14159/180; printf("%lf,%lf\n",coord1[0],coord1[1]); turn(coord,coord1,sita); printf("the turned coordinate is:\n”); printf("%lf,%lf\n",coord [0],coord [1]); } // 函数程序写在下面空白处
void turn(double *p, double *p1,double sita) { double c,s; c=cos(sita); s=sin(sita); *p=*(p1+0)*c-*(p1+1)*s; *(p+1)=*(p1+0)*s+*(p1+1)*c; }
2)根据函数原型定义, 写出将若干个字符串按字母 顺序由小到大进行排序的函数程序 #include "stdio.h" #include "string.h" void main( ) { void sort(char str[][32],int n); void print(char str[][32],int n); char str[5][32]={"Beijing","Shanghai", "Chongqing", "Tianjin","Guangzhou"}; int n=5; sort(str,n); print(str,n); } void print(char str[][32],int n) { int i; for(i=0;i<n;i++) printf("%s\n",str[i]); } // 函数程序写在下面空白处 void sort(char str[][32],int n) { char temp[32]; int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(strcmp(str[k],str[j])>0) k=j; if(k!=i) { strcpy(temp,str[i]); strcpy(str[i],str[k]); strcpy(str[k],temp); } } }
三、编程 (20 分) 1) 根据函数原型定义, 写出实现坐标变换的函数 程序。 坐标系 X OY 由坐标系 XOY 转动 角而成, 已知点 P 在坐标系 X OY 下为 x1 坐标系 XOY 下的坐标 x 。 y (见下图 1)
y1 , 求点 P 在
图 1 坐标变换关系式为:
x
cos y x1 y1 sin
10) 有如下定义: struct st{int x, float y} s,*p; 若 p=&s;则以下对 s 中成员 y 的使用中不正确的使 用是( D ) 。 A、(*p).y B、s.y C、p->y D、p.y
二、写出下列各程序运行时的输出结果 (50 分) 1. #include <stdio.h> void main( ) { int x=3,y=4,z=8; int t; t=x>y?(y<z?++y/--z:++x/--y):x++,y--; printf("%d,%d,%d,%d\n",x,y,z,t); t=x>y?(y<z?++y/--z:++x/--y):(x++,y--); printf("%d,%d,%d,%d\n",x,y,z,t); } 4,3,8,3 4,4,7,0 2. #include <stdio.h> void main( ) { int a=5,b=6,i=0,j=0; switch(a) {case 5: switch(b) {case 5:i++; case 6:j++; default:i++;j++; } case 6: i++; j++; break; default:i++;j++; } printf("%d,%d\n",i,j); } 2,3 3. #include "stdio.h" void f(int *p,int n) { int i; for(i=0;i<n;i++)printf("%d\n",*(p+i)); } void main( ) { int x[]={1,2,3,4,5,6,7,8,9,10}; f(x+4,5); } 5 6 7 8 9 4. #include “stdio.h” void main( ) { int i=10; while(--i) { if(i==1) break; if(i%3!=2)continue; printf(“%d\n”,i); } } 8 5 2
) 。
5) 以下表达式中能够被正确执行的是( B A、a/(x-x++) B、a=b=c+10 C、int 21.09%3 D、x=y+2=z-5
) 。
9) ຫໍສະໝຸດ Baidu列关于函数的传值调用的描述中, ( D )是 错误的: A、使用传值调用时,要求形参和实参对应的类型 一致,个数相等。 B、使用传值调用时,调用函数的实参可以是常量、 变量值、表达式、数组元素。 C、传值调用的机制是系统将实参拷贝一个副本给 形参。 D、在被调函数中,形参可以被改变,但这会影响 调用函数的实参值。
sin cos
10. #include "stdio.h" void main( ) { int a[4][4]; int *p1[4], (*p2)[4], **p; int i,j; for(i=0;i<4;i++) {**(a+i)=1; *(*(a+i)+i)=1; for(j=1;j<i;j++) *(*(a+i)+j)=*(*(a+i-1)+j-1)+*(*(a+i-1)+j); p1[i]=&a[3][i]; } p=p1; p2=a+3; for(i=0;i<4;i++,p++) printf("%d,%d\n",**p,(*p2)[i]); } 1,1 3,3 3,3 1,1