c语言练习题及答案.doc
第1题 (2分)运行以下程序时,输出结果是【1】 9 long fit(int n)if(n>2) return(fit(n-1)+fit(n-2);else return(3);main()printf("%ldn",fit(4);第2题 (2分)以下程序运行后的输出结果是【1】 abcbcc#include <string.h>void main() char ch="abc",x34;int i; for(i=0;i<3;i+) strcpy(xi,ch); for(i=0;i<3;i+)printf("%s",&xii); printf("n"); 第3题 (2分)下列程序的输出结果是【1】 CDABC#include <string.h>main( ) char b30; strcpy(&b0,"CH"); strcpy(&b1,"DEF"); strcpy(&b2,"ABC"); printf("%s n",b); 第4题 (2分)运行以下程序时,输出结果是【1】 6 8#include<stdio.h> int b; int fun (int a) static int c=2; return(+a)+(+b)+(+c); void main( ) int i, a=1; for(i=0;i<2;i+) printf("%5d",fun(a);第5题 (2分)在函数内部声明局部变量时缺省了存储类型,则该变量存储类型是【1】 auto第6题 (2分)有以下定义和语句:struct date int day; int month; int year; union int share1; float share2; share; a; 则sizeof(a)的值是【1】 VC+环境下为16 , Turbo C环境下为10第7题 (2分)以下程序的运行结果是【1】 3 , 4, 5int *swap(int *a,int *b) int *p;p=a;a=b;b=p;return a;main( )int x=3,y=4,z=5;swap(swap(&x,&y),&z);printf("%d,%d,%d",x,y,z);第8题 (2分)以下程序的运行结果是【1】 2, 1 交换的是指针p,q的指向void swap(int *r,int *s) int *t; t=*r; *r=*s; *s=t;main( ) int a=1,b=2,*p,*q; p=&a; q=&b; swap(&p,&q); printf("%d,%dn",*p,*q);第9题 (4分)以下程序运行时, 输出结果的第一行是【1】, 第二行是【2】. 3 2#include <stdio.h>void f (int *x, int y) *x=y+1 ; y=*x+2 ; main( ) int a=2, b=2 ; f(&a, b) ; printf("%d n%d",a,b);第10题 (4分)设有以下main函数main(int argc, char *argv ) while(argc > 1) +argv; printf("%sn", *argv); - -argc; 经过编译、连接后得到可执行文件名为c1.exe,若在系统的命令状态下输入命令行:c1 nanjing xiaozhuang college<回车>,则在第一行输出【1】_,第三行输出【2】_。nanjing college第11题 (4分)请填空以使程序完整。有一个m*n的矩阵,以下程序的功能是求出其中值最大的元素的值,以及相应的行号和列号。#define M 4#define N 3main( )int i,j,row=0,colum=0,max;int aMN=1,23,3,4,8,6,17,6,1,0,11,17;【1】_; / max=a00;for(i=0;i<=3;i+) for(j=0;j<=2;j+) if(【2】_) / max<aij max=aij; row=i; colum=j; printf("max=%d,row%d,colum=%dn",max,row,colum);第12题 (4分)以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数.例如,输入的字符串为:556,则输出十进制整数366.请填空。#include <string.h>main() char s6; int n,i=0; gets(s); n=【1】_ -'0' /si while(【2】_ !='0')n=n*8+si-'0' /s+i printf("%d n",n);第13题 (6分)该程序功能是:将有10个元素的整型数组a中下标值为偶数的元素从大到小排列,其他元素不变。请填空以使程序完整。#define k 10main( ) int ak=1,2,5,7,9,3,4,6,8,10,t;int i,j;for(i=0;i<k;i+)printf("%5d",ai);for(i=0;i<=【1】_;i=i+2) /i<=6for(j=i+2;j<k;j+=2)if(【2】_) /ai<ajt=ai;【3】_;aj=t; /ai=ajfor(i=0;i<k;i+)printf("%5d",ai);printf("n");第14题 (6分)请填空以使程序完整。该程序的功能是把从键盘输入的十进制(long型)以16进制数的形式输出。#include <stdio.h>main( ) char b16='0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' int c64,d,i=0; long n; printf("Enter a number:n");scanf("%ld",&n); do ci=【1】_; /n%16 i+; n=【2】_; /n/16 while(n!=0); printf("Transmite mew base:n"); for(-i;i>=0;-i) 【3】_; /d=ci; printf("%c",bd); 第15题 (6分)阅读以下程序: main( ) char *str3="Fortrain ","Prolog","Pascal " char *p; int i; p=str; for(i=0;i<3;i+,p+) printf("%cn ",(*(*p+3)+1); 该程序第1行、第2行及最后一行的输出分别为【1】_ 、【2】_和【3】_。u, m, d第16题 (6分)以下程序使用递归方法求数组中的最大值及其下标值,请填空:#define M 10void findmax(int *a,int n,int i,int *pk)if(i<n) if(ai>a*pk) 【1】_; /*pk=ifindmax(a,n,i+1,【2】_); /pkmain( ) int aM,i,n=0;printf("nEnter %d data:n",M);for(i=0;i<M;i+)scanf("%d",【3】); /&aifindmax (a,M,0,&n);printf("The maximum is: %dn",an);printf("it's index is: %dn",n);第17题 (4分)阅读以下程序:main( ) char *str3="Basic ","Visual C+","Pascal " char *p; int i; p=str; for(i=0; i<3; i+,p+) printf("%cn ",(*(*p+3)+1); 该程序第1行、第2行及最后一行的输出分别为【1】、【2】和【3】. j v d二、单项选择题(含20小题,共40分)第1题 (2分)以下合法的赋值语句是( ). BA、x=y=100 B、d-; C、x+y; D、c=int(a+b);第2题 (2分)已知字符A的ASCII码为65,则执行下列函数调用语句时,不能输出字符B的是( ). BA、putchar('B'); B、putchar("B");C、putchar(66); D、putchar('x42');第3题 (2分)若以下选项中的变量已正确定义,则正确的赋值语句是( ). CA、x1=86.8%3 B、1+9=x2 C、x3=0x1f D、x4=1+6=7第4题 (2分)若有声明"int x=2, y=1, z=0;",则下列关系表达式中有语法错误的是_. AA、x>y=2 B、z>y>x C、x>y=1 D、x=(x=0, y=1, z=2)第5题 (2分)有声明int x=2;,以下表达式中值不等于8的是_. DA、x+=2,x*2 B、x+=x*=xC、(x+7)/2*(x+1)%2+1) D、x*7.2/x+1第6题 (2分)若有数组A和B的声明"static char A ="ABCDEF", B = 'A', 'B', 'C','D','E', 'F'" 则数组A和数组B的长度分别是_。 AA、7,6 B、6,7 C、6,6 D、7,7第7题 (2分)以下程序运行后的输出结果是_. Bmain( ) char a7= "a00a00" int i,j; i=sizeof(a); j=strlen(a); printf("%d %d",i,j);A、2 2 B、7 2 C、7 5 D、6 2第8题 (2分)以下不正确的说法为( ) AA、在函数内的复合语句中定义的变量在本函数范围内有效B、在不同函数中可以使用相同名字的变量C、在函数内定义的变量只在本函数范围内有效D、形式参数是局部变量第9题 (2分)以下程序运行结果( ) Blong fun(int n)long s;if(n=1|n=2) s=2;else s=n-fun(n-1);return s;main() printf("%dn",fun(3);A、2 B、1 C、0 D、10第10题 (2分)下面程序运行后的输出结果是_。 Amain ( ) char arr24; strcpy(arr0,"you"); strcpy(arr1,"me"); arr03= '&' printf("%sn",arr0); A、you&me B、you C、me D、err第11题 (2分)以下叙述正确的是( )。AA、一个用C语言编写的程序在运行时总是从main函数开始逐条执行B、main函数是系统库函数C、main函数中每行只能出现一条语句D、main函数必须出现在所用其它函数之前第12题 (2分)语句printf("%d",(a=2)&&(b= -2);的输出结果是( ) DA、无输出 B、结果不确定 C、-1 D、1第13题 (2分)若有函数fun的定义为:void fun() static int a=1; 则下列叙述中不正确的是( ). BA、在每次调用fun函数时,变量a的值是上次调用结束时a的值B、在fun函数之外,可以用变量名a直接引用a的值C、在其它函数中,可以出现声明double a=2.5;D、fun函数的形式参数不能取名为a第14题 (2分)以下程序输出结果是( )。 C#include<stdio.h>void main()int i,a10; for(i=9;i>=0;i-) ai=10-i;printf("%d%d%d",a2,a4,a8);A、852 B、741 C、862 D、369第15题 (2分)以下程序的输出结果是( ). C#include <stdio.h>main( ) int i; for(i='A'i<='I'i+) printf("%c",i+32); printf("n"); A、编译不通过,无输出 B、ABCDEFGHC、abcdefghi D、abcdefgh第16题 (2分)以下关于if语句,描述错误的是( )。BA、条件表达式可以是任意的表达式B、条件表达式只能是关系表达式或逻辑表达式C、条件表达式的括号不可以省略D、与else配对的if语句是其之前最近的未配对的if语句第17题 (2分)以下程序段循环执行的次数是( )。 Bint k=0; while(k = 1) k+; whileA、无限次 B、有语法错,不能执行C、一次也不执行 D、执行1次第18题 (2分)以下正确的叙述是( )。AA、在C程序中,语句之间必须要用分号""分隔B、若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型C、在C程序中,无论是整数还是实数,都能准确无误地表示D、在C程序中,%是只能用于整数运算的运算符第19题 (2分)若有以下定义,则对a数组元素的正确引用是( )。Bint a5,*p=a;A、p+5 B、*(a+2) C、a+2 D、&a+1第20题 (2分)以下程序执行后的输出结果是( )。Dmain( ) int i,s=0; for(i=1;i<10;i+=2) s+=i+1; printf("%dn",s);A、自然数19的累加和 B、自然数110的累加和C、自然数19中的奇数之和D、自然数110中的偶数之和