C程序设计期末练习题答案.doc
一、选择题:1、一个c程序的执行是从()A、 本程序的main函数开始,到本程序文件的最后一个函数结束B、 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C、 本程序的main函数开始,到main函数结束D、 本程序文件的第一个函数开始,到本程序main函数结束2、以下程序的运行结果为() main()int a=100,x=10,y=20,ok1=5,ok2=0; if(x<y) if(y!=10)if(!ok1) a=1;else if(ok2)a=10;a=-1;printf(“%dn”,a);A、1 B、0 C、-1 D、值不确定3、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行c2=A+6-3;后,ascII码值为()无答案A、B B、66 C、不确定的值 D、1144、已知int a=12,语句a+=a=a*=a; 执行后,a的值为()A、 a= 100 B、a= 120 C、a=0 D、 a=125、下面有关for循环的正确描述是()A、 for循环只能用于循环次数已知的循环B、 for循环是先执行循环体语句,后判断表达式C、 在for循环中,不能用break语句跳出循环体D、 for循环的循环体语句中,可以包含多条语句,且必须用花括号括起来6、以下程序段()x= -1;do x=x*x;while(!x);A、是死循环 B、循环执行两次 C、循环执行一次 D、有语法错误6、若有说明:int a34;则对a数组元素的正确引用是()A、a24 B、 a1,3 C、a1+10 D、a(2)(1)7、判断字符串a和b是否相等,应当使用()A、if(a=b) B、if(a=b) C、if(strcpy(a,b) D、if(strcmp(a,b)=1)8、若i 为整型变量,则以下循环执行次数为()for(i=2;i=0; )printf(“%d”,i-);A、无限次 B、0次 C、1次 D、2次9、若用数组名作为函数调用的实参,传递给形参的是()A、 数组第一个元素的值B、 数组中全部元素的值C、 数组元素的个数D、 数组的首地址10、以下叙述中不正确的是()A、 预处理命令行都必须以#号开始B、 在程序中凡是以#号开始的语句行都是预处理命令行C、 C程序在执行过程中对预处理命令行进行处理D、 预处理命令不占用程序的执行时间11、以下程序的运行结果是()#define MIN(x,y) (x)<(y)?(x) : (y)main()int i=10,j=15,k; k=10*MIN(i,j); printf(“%dn”,k);A、10 B、15 C、100 D、15012、以下有关宏替换的叙述不正确的是()A、 宏替换不占用运行时间B、 宏名无类型C、 宏替换只是字符替换D、 宏名必须用大写字母表示13、若有以下宏定义:#define N 2#define Y(n) (N+1)*n)则执行语句z=2*(N+Y(5);后的结果是()A、语句有错误 B、z=34 C、z=70 D、z无定值14、已有定义 int k=2; int *p1, *p2; 且p1、p2均已指向变量k,下面不能正确执行的赋值语句是()A、k=*p1+*p2 B、p2=k C、p1=p2 D、k=*p1 * (*p2)15、若有以下定义,则对a数组元素的正确引用是()int a5, *p=a;A、*&a5 B、a+2 C、*(p+5) D、 *(a+2)17、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方式是()A、(*p)max(a,b);B、*pmax(a,b)C、(*p)(a,b)D、*p(a,b)18、若有以下说明语句,则对pup中sex域的正确引用方式是()struct pupilchar name20; int sex;pup,*p;p=&pup;A、p.pup.sex B、p->pup.sex C、(*p).pup.sex D、(*p).sex19、语句int (*ptr)();的含义是()A、 ptr是指向一维数组的指针变量B、 ptr是指向int型数据的指针变量C、 ptr是指向函数的指针,该函数返回一个int型数据D、 ptr是一个函数名,该函数的返回值是指向int 型数据的指针20、若有以下说明语句:struct studentint age; int num; std, *p;p=&std;则以下对结构体变量std中成员age的引用方式不正确的是()A、std.age B、p->age C、(*p).age D、*p.age二、写出下列程序的运行结果或指明其完成的功能1、写出下面程序的运行结果main()int t=1605,h,m;h=(t/100)%12; if(h=0)h=12; printf(“%d:”,h); m=t%100; if(m<10)printf(“0”); printf(“%d”,m); if(t<1200|t=2400) printf(“AM”); else printf(“PM”);4:05PM2、写出下面程序的运行结果main() int a,b,c; int s,w,t; s=w=t=0; a= -1;b=3;c=3; if(c>0) s=a+b;if(a<=0) if(b>0) if(c<=0)w=a-b; else if(c>0)w=a-b; else t=c;printf(“%d %d %d”,s,w,t);2 0 03、写出下面程序的运行结果main()int i,j,x=0; for(i=0;i<2;i+) x+; for(j=0;j<=3;j+)if(j%2=0)continue; x+;x+;printf(“x=%dn”,x);x=84、写出下面程序的运行结果int a=5; int b=7;main()int a=4,b=5,c; c=plus(a,b); printf(“A+B=5%dn”,c);plus(int x,int y)int z; z=x+y; return(z);A+B=95、写出下面程序的运行结果main()increment(); increment(); increment();increment()static int x=0; x+=1; printf(“%dn”,x);1236、指明下面程序完成的功能int fac(int n)static int f=1; f=f*n; return(f);main()int j; for(j=1;j<=5;j+) printf(“%d!=%dn”,j,fac(j);输出15的阶乘7、写出下面程序的运行结果#include “stdio.h”main()int a10= 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 , *p=a,i ; for(i=0;i<2;i+) printf(“%d ”,*p+); printf(“%d ”,*+p);printf(“%d ”,(*p)+);printf(“n”); 2 6 67 10 10三、完善程序1、下面程序的功能是打印100以内个位数为6且能被3整除的所有数。请完善程序。main()int i,j; for(i=0;_;i+) j=i*10+6; if(_)continue; printf(“%d”,j); i<=9j%3!=02、下面程序的功能是检查一个二维数组是否对称(即对所有的i和j都有aij=aji),请完善程序。main()int a44=1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4; int i,j,found=0; for(j=0;j<4;j+) for(_;i<4;i+)if(aji!=aij _;break; if(found=1)printf(No”); else printf(“Yes”);i=j+1Found=13、下面程序的功能是在任意字符串a中将与字符c相等的所有元素的下标值分别存放到整型数组b中。请完善程序。main()char a80; int j,b80,k=0; gets(a); for(j=0;aj!=0;j+) if(_)bk=j;_; for(j=0;j<k;j+)printf(“%d”,bj);aj=ck+4、下面程序的功能是将两个字符串s1和s2连接起来。请完善程序。main()char s180,s280; gets(s1); gets(s2); conj(s1,s2); puts(s1);conj(char *p1, char *p2)char *p=p1; while(*p1!=0)_; while(*p2!=0)*p1=_;p1+;p2+; _; return(p);p1+*p2*p1=05、下面程序的功能是计算1-3+5-7+-99+101的值,请完善程序。main()int i,t=1,s=0; for(i=1;i<101;i+=2) _;s=s+t;_; printf(“%dn”,s);t=t*it= -t/i6、下面程序的功能是将字符串中的数字字符删除后输出。void delnum(char *s)int i,j; for(i=0,j=0;si!=0;i+) if(si<0_si>9)sj=si;j+ _;main()char *item; gets(item); delnum(item); printf(“n%s”,_);|sj=0item四、编程1、编程求1+3+5+99。2、输入一个正整数,判断是否为素数。