logo资料库

西北工业大学2008年C语言考试试题.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
诚信保证 本人知晓我校考场规则和违纪处分条例的有关规定,保证遵守考场 规则,诚实做人。 本人签字: 编号: 西北工业大学考试试题(卷) 2007-2008 学年第 2 学期 成 绩 开课学院 计算机学院 课程 C 程序设计语言 考试日期 考试时间 2 小时 考试形式( 学时 48 开 A B )( )卷 闭 考生班级 学 号 姓 名 注意:所有答案必须写在答题纸上,否则不予计分! 一、选择题(每小题 2 分,共 20 分) 1. 若 int a[2][3]={0,2,4,6,8,10};以下描述不正确的是( )。 A、*(a+1)为元素 6 的地址 B、*(a[1]+1)的值为 2 C、**(a+1)+2 的值为 8 D、a[0]与 a 相同 2. 下列描述不正确的是( )。 A、由 main 函数及其参数 argc 和* argv[]可以实现命令行方式 B、使用 fclose 时,先写缓冲区数据到文件,再释放文件指针 C、字符数组并不要求它的最后一个字符是‘\0’ D、‘A’和“A”都是字符串常量 3. 关于 c 表达式 5||(a=b+c)==3 的值,正确的说法为( )。 A、值为 1 C、值为 0 B、值为 5 D、不能确定 4. 若整型变量 a 的值为 50,则 c 表达式 a>>2 的值为( )。 A、50 C、12.5 5. 以下程序的输出结果是( B、25 D、12 )。 main( ){ int a=011;printf(“%d\n”,++a);} A、12 B、11 C、10 D、9 注:1. 命题纸上一般不留答题位置,试题请用小四、宋体打印且不出框。 2. 命题教师和审题教师姓名应在试卷存档时填写。 共 9 页 第 1 页
西北工业大学命题专用纸 6. 以下程序的输出结果是( )。 #define ADD(x) (x)+(x) main(){int a=4,b=6,c=7,d=ADD(a+b)*c;printf(“d=%d”,d);} A、d=70 B、d=140 C、d=280 D、d=80 7. 如果有 char a[5],*p=a;则下面正确的赋值语句是( )。 A、p=“abcd”; C、*p=“abcd”; B、a=“abcd”; D、*a=“abcd”; 8. 若有以下程序段,则值为 6 的表达式是( )。 struct st{ int n;struct st *next;}; static struct st a[3]={5,&a[1],7,&a[2],9,‘\0’},*p; p=&a[0]; A、p++->n B、p->n++ C、(*p).n++ D、++p->n 9. 下列对字符串的定义中,错误的是( )。 A、char str[]="FORTRAN"; B、char str[7]="FORTRAN"; C、char *str="FORTRAN"; D、char str[]={’F’,’O’,’R’,’T’,’R’,’A’,’N’,0}; 10. 在下面的语句中:只有一个在功能上与其他三个语句不等价(其中 s1 和 s2 表示某个 C 语句),这个不等价的语句是( )。 A、if (a) s1; else s2; B、if (!a) s2; else s1; C、if (a==0) s1; else s2; D、if (a!=0) s1; else s2; 二、写出下列表达运算后 a 的值,设 a,b 均为 int ,每个表达式运算前均有 a=2,b=3。 (10 分) (1) a+=b*5 (2) a=b++ (3) a%=(a%=b) (4) a=a>b&&b>a||a (5) a=!b<a&&!a<b 三、阅读程序,并完成题目要求(共 20 分,每题 5 分)。 1. 写出下列程序的运行结果。 教务处印制 共 9 页 第 2 页
西北工业大学命题专用纸 #include void invert(int *s,int i,int j); void main( ) { int a[6]={10,6,23,-90,0,3},i; invert(a,0,5); for(i=0;i<6;i++) printf("%d,",a[i]); printf("\n"); } void invert(int *s,int i,int j) { int t; if(i #include int f1(int a) { int b=0; static int c=3; b+=1; c++; return(a+b+c); } void main() { int a=1,i; char s1[10]="java",s2[10]="basic",s[10]; for(i=0;i<3;i++) printf("%d ",f1(a)); printf("\n"); if(strcmp(s1,s2)) { strcpy(s,s1); puts(s); } 教务处印制 共 9 页 第 3 页
printf("%d,%s\n",strlen(s2),strcat(s2,s1)); 西北工业大学命题专用纸 } 3.写出下列程序的运行结果。 #include #define MAX 100 void main() for(i=0;i<=m;i++) for(i=k;i<=m;i++) for(j=i-k;j<=i-1;j++) f[i]+=f[j]; printf("%d%5d%5d\n",k,m,f[m]); { int f[MAX],i,j,k=2,m=5; f[i]=1; f[k-1]=2; } 4、下面的程序构造一个有向图,请画出其示意图。 #include struct node { int key; struct node *left,*right,*up,*down; }; int main (int argc ,char * argv []) { int i; struct node nodes[5]; for( i=0;i<5;i++) { nodes[i].key=i; nodes[i].left=NULL; nodes[i].right=NULL; nodes[i].up=NULL; nodes[i].down=NULL; } nodes[0].left=nodes+1; nodes[1].left=nodes; nodes[1].up=nodes+2; nodes[2].down=nodes+3; nodes[3].right=nodes+4; nodes[4].up=nodes; nodes[4].down=nodes+1; return 0; } 四、在下面 4 个程序中,共有 16 处错误(包括语法错误和逻辑错误),只要找出其 中的 15 处错误并改正之即可,多找不多加分。(30 分,每找对 1 个错误,加 1 分, 每修改正确 1 个错误,再加 1 分。) 1.下面程序的功能是从键盘输入一行字符,统计其中有多少单词。假设单词之间以空格分 开。[提示:判断是否有新单词出现的方法是------当前被检验的字符不是空格,而前一被检验 字符是空格,则表示有新单词出现。] 教务处印制 共 9 页 第 4 页
西北工业大学命题专用纸 #include #define ARR_SIZE 80; void main() { char str[ARR_SIZE]; int i, num; gets(str); if (str[0] != ' ') else for(i = 1 ; str[i] != '\0'; i++) num = 0; num = 1; if(str[i]!=' ' && str[i-1]=' ') num++; printf("num=%d\n", num); } 2.在一个 3x4 矩阵中找出最大数及最大数所在元素的下标。 #include #define M 3 #define N 4 int FindMax(int (*)[N], int, int,int *, int *) void main() { int score[M][N], i, j, maxScore, row, col; for ( i=0; i max ) { max = *(*(p+i)+j) ; *pRow = i; 教务处印制 共 9 页 第 5 页
西北工业大学命题专用纸 *pCol = j; } } } } 3.以下程序用于打印输出结构体数组的所有元素。 #include struct s { char name[10]; int age; } void main() { struct s a[3] = {"John",19,"Paul",17,"Marry",18}; int *p; for(p = a; p < 3; p++) printf("%s,%d\n", p->name, p->age ); } 4.该程序的作用是将一个字符串 str2 连接到字符串 str1 后,然后输出连接后的字符串 str1。 #include void Link(char s[],char c[]); void main() { char str1[80], str2[80]; gets(str1); gets(str2); Link(str1, str2); printf("输出连接后的字符串:"); puts(str1); } void Link(char s[], char c[]); { int i, j; for(i = 0; s[i] !='\0'; i++); while(c[j] != '\0' ); { s[ j ] = c[ i ]; i++; j++; } } 教务处印制 共 9 页 第 6 页
西北工业大学命题专用纸 五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符 合题目要求。(20 分,每空 2 分) 1.求 100~200 间的全部素数。 #include (1) void main() { int m,k,i,n=0; for(m=101;m<=200;m+=2) { if(n%10==0) printf("\n"); k=sqrt(m); for(i=2;i<=k;i++) if(i== { if(m%i==0) (2) ; (3) ) printf("%d ",m); n++; } } } 2. 从键盘输入任一学生的学号,查找该学号是否存在,存在就打印其学号,否则打印没找 到。(注:学号是按升序排列的,班级最多 30 人) #include #define ARR_SIZE 30 void Input(long num[], int n ); int Binsearch( long a[ ], int n, long x ); void main() { long num[ARR_SIZE], x; int n, pos; printf("输入班级实际人数:"); scanf("%d", &n); Input(num, n); printf("输入待查找学号:"); scanf("%ld", &x ); pos = Binsearch(num, n, x); if(pos + 1) else printf("NUM=%ld\n ", num[ pos ] ); printf(" Not find!\n "); } 教务处印制 共 9 页 第 7 页
西北工业大学命题专用纸 void Input(long num[], int n ) { int i; for(i=0; i a[mid] ) low = mid + 1; else if ( (4) else return mid; ); (5) ) }while( return -1; high = mid - 1; } 3. 下面的程序完成字符串的解码处理。解码规则说明如下: 特殊字符串由 A,C,G,U 四个字符组成,如 ACUGCCCAUGAAAAACUUUUGACAC 其有效信息子串从第一次出现“AUG”后开始,遇到“UGA”结束(不包括“AUG”和“UGA”。) 如上面的编码串需解码的有效子串为:AAAAACUUU 有效子串中每 3 个字符(如“AAA”,“CGA”)作为一个密码子(可以保证,有效子串的 长度一定为 3 的整数倍。)可能的密码子(62 种)及相应码值以如下形式放在编码文件 code.txt 中(按密码子字典序排列); AAA K AAC N ………… UUU F 程序对存放在文件中的特殊字符串解码,在屏幕输出解码串。假定: 1、编码文件 code.txt 放在 c 盘根目录下; 2、要解码的特殊字符串以文件形式存放,其串长不超过 1024 字符。 #include #include struct { char name[4]; char code; }table[62]; 教务处印制 共 9 页 第 8 页
分享到:
收藏