您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > C语言部分测试试题答案60
凌阳教育——全国唯一原厂嵌入式培训凌阳教育——全国唯一学员就业双100%品牌:100%就业,100%满意就业免费咨询:400-705-9680嵌入式培训C语言部分测试试题姓名:班级:1-10道题每道4分,11-16每道10分C1用变量a给出下面的定义1)一个有10个指针的数组,该指针是指向一个整型数的2)一个指向有10个整型数数组的指针3)一个指向函数的指针,该函数有一个整型参数并返回一个整型数4)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型1)int*a[10]2)int(*a)[10]3)int(*a)(int)4)Int(*a[10])(int)C2有以下宏定义,A等于多少?:#defineADD(x,y)(x+y)#defineSUB(x,y)(x)-(y)#defineMUL(x,y)(x*y)unsignedintA;A=MUL(ADD(9,2),SUB(6,3))答:63C3已知一个函数原型:intfoo(structtype_t1a,structtype_t2*b),请用typedef定义一个指向该原型函数的指针,并用这个新定义的类型声明一个元素个数为SIZE的指针数组int*(*s[10])(int*,int(*foo)(int))代表什么?答:1)typedefint(*FOO)(structtype_t1a,structtype_t2*b);FOOa[SIZE];2)s是个函数指针数组s有10个指针,每个指针可以指向一个函数。函数的类型必须为返回值类型为int类型的,第一个参数为int*类型的,第二个参数为函数指针类型的(该函数指针指向的函数必须有int的返回值,有个整型的参数)C4请举例说明字符串数组与字符串指针的差异charstr[100]=”helloworld”;Char*p=”ILOVESUNPLUSAPP”;字符数组本身是个数组,由多个字符型变量构成,可以存放多个字符串。字符串指针,本身是个指针只能存放一个地址,ILOVESUNPLUSAPP字符串存放在文字常量区。C5解释局部变量、全局变量和静态变量的含义。三:变量的存储类别普通局部变量在函数里或复合语句中定义的变量被称为普通的局部变量voidfun(){inta=3;a++;printf(a=%d\n,a);}intmain(){凌阳教育——全国唯一原厂嵌入式培训凌阳教育——全国唯一学员就业双100%品牌:100%就业,100%满意就业免费咨询:400-705-9680fun();fun();fun();}此程序执行的结果:a=4a=4a=4静态局部变量在定义局部变量的时候前边加static,这样的变量被称为静态局部变量,静态局部变量的特点:第一次调用函数的时候分配空间初始化,函数调用完毕后不会释放,以后调用的时候不会重新分配空间,用的第一次开辟的空间,并且变量的值会保留。voidfun(){staticinta=3;a++;printf(a=%d\n,a);}intmain(){fun();fun();fun();}运行结果a=4a=5a=6也就说static改变了静态局部变量的声明周期,静态的局部变量在程序运行的整个过程都存在。普通全局变量在函数外边定义的变量,普通的全局变量,全局变量的声明周期是整个程序的运行过程,它的作用范围在程序的任何地方都可以使用,在使用之前要进行声明。注意全局变量定义必须放在c文件中,声明放在头文件中,定义的时候可以赋初值,声明的时候一定不要赋值。全局变量不初始化,值默认为0全局变量和局部变量可以重名,因为作用范围不一样,在局部变量所在的范围,全局变量不起作用inta=5;intmain(){inta=10;printf(a=%d\n,a);}凌阳教育——全国唯一原厂嵌入式培训凌阳教育——全国唯一学员就业双100%品牌:100%就业,100%满意就业免费咨询:400-705-9680此程序的运行结果是a=10静态全局变量在定义全局变量的时候在最前边加一个static,这样定义的变量是静态全局变量。静态全局变量的特点,作用范围被限定在它所在的.c中,其他.c中的函数没法使用,也就说static限定了静态全局变量的作用范围普通全局变量和静态全局变量可以重名,因为作用范围不一样。在静态全局变量的作用范围内,全局变量不起作用。C6解释程序有何错误char*GetMemory(void){charp[]=helloworld;returnp;}voidTest(void){Char*str=NULL;Str=GetMemory();printf(str);}答:GetMemory函数中返回局部数组的地址,局部数组的生命周期为函数调用到函数执行完毕,函数调用完毕后局部数组被释放,里面的内容就不可预知了,在Test函数中得到数组的首地址打印的内容不可预知。C7判断一下程序输出结果,并解释为什么main(){char*p1=“name”;char*p2;p2=(char*)malloc(20);memset(p2,0,20);while(*p2++=*p1++);printf(“%s\n”,p2);}答:打印的结果不可预知,因为p2已经自加到’\0’的后面,由于后面的内容已经memset变成’\0’了,故什么都不打印。C8#includestdio.hintfunc(inta,int*p);voidmain(){inta=4,b=5,c=0;凌阳教育——全国唯一原厂嵌入式培训凌阳教育——全国唯一学员就业双100%品牌:100%就业,100%满意就业免费咨询:400-705-9680c=func(a,&b);b=func(c,&a);a=func(b,&c);printf(a=%d,b=%d,c=%d,a,b,c);}intfunc(inta,int*p){a++;*p=a+3;return(*p+a);}答案:673135C9C语言的从编辑到生辰可执行程序的四个步骤是什么答:预编译、编译、汇编、链接C10静态库与动态库有什么区别在编译可执行程序的时候,静态库会被全部编译到可执行程序中去,程序执行的时候不需要其他东西,不依赖静态库。动态库只是编译库函数的链接关系,在程序执行的时候再去加载动态库,即程序执行时依赖动态库。C11已知strcpy函数的函数原型是:char*strcpy(char*strDest,constchar*strSrc)。不调用C++/C的字符串库函数,请编写函数strcpychar*strcpy(char*strDest,constchar*strSrc){Char*temp=strDest;While((*strDest++=*strSrc++)!=’\0’);*strDest=’\0’;returntemp;}C12请写一个函数,将字符串”123456”转换成变量123456。intmy_atoi(char*str){char*temp=str;intnum=0;while(*temp!='\0'){凌阳教育——全国唯一原厂嵌入式培训凌阳教育——全国唯一学员就业双100%品牌:100%就业,100%满意就业免费咨询:400-705-9680num=num*10+(*temp-'0');temp++;}returnnum;}C13使用指针,将字符串“ABCD1234efgh”前后对调并显示。fun(char*w,intn){chart,*s1,*s2;s1=w;s2=w+n-1;while(s1s2){t=*s1;*s1=*s2;*s2=t;s1++;s2--;}}intmain(void){Charstr[100]=”1234567”;fun(str,strlen(str));puts(str);return0;}C14编程对如下数组进行排序,排序方法不限intary[10]={152,223,24,335,77,898,35,72,99,353};冒泡法排序voidbubble(int*a,intn){for(i=0;in-1;i++){for(j=0;jn-1-i;j++){if(a[j]a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}凌阳教育——全国唯一原厂嵌入式培训凌阳教育——全国唯一学员就业双100%品牌:100%就业,100%满意就业免费咨询:400-705-9680}选择法排序:voidchoice(int*a,intn){for(i=0;in-1;i++){for(j=i+1;jn;j++){if(a[i]a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}}}C15给定一个字符串,把其中的大写转换为小写,小写转换为大写,过滤掉非字母的字符。如:输入“aBcdEf”输出“AbCDrF”voidtoChangeChar(char*str,char*des){while(*str!='\0'){if((*str='a'&&*str='z')||(*str='A'&&*str='Z')){if(*str='a'&&*str='z'){*des=*str-('a'-'A');}else{*des=*str+('a'-'A');}des++;}str++;}}C16由终端输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志。intmain(intargc,char*argv[])凌阳教育——全国唯一原厂嵌入式培训凌阳教育——全国唯一学员就业双100%品牌:100%就业,100%满意就业免费咨询:400-705-9680{FILE*fp=NULL;charfile_name[30]=;charch=0;printf(请输入文件的名字:);/*scanf函数不能过去空格,所以利用gets或者fgets;stdin,代表键盘*/fgets(file_name,30,stdin);*(file_name+strlen(file_name)-1)='\0';//去掉fgets获取的字符串后面的'\n'fp=fopen(file_name,w);if(fp==NULL){perror(fopen);//打印出错信息return0;}printf(请输入数据,以#结束:);while((ch=getch())!='#'){printf(%c,ch);putc(ch,fp);}fclose(fp);printf(数据已经成功保存到指定的文件%s中.\n,file_name);return0;}附加题(10分):一个人买东西花钱买东西,他有100,50,10,5,1这5种面值的钞票,怎么样付款才能使付出去的钞票数量最少。要付的钱数为整数,不考虑找零,返回付出货币的数量。例如:要付的钱数为151元,那最少的付发是100,50,1元的面值各一张。返回3,如果是153就返回5函数原型:intGetMoneyCount(intimoneyInput)答:#includestdio.hintGetMoneyCount(intimoneyInput)凌阳教育——全国唯一原厂嵌入式培训凌阳教育——全国唯一学员就业双100%品牌:100%就业,100%满意就业免费咨询:400-705-9680{returnimoneyInput/100+imoneyInput%100/50+imoneyInput%50/10+imoneyInput%10/5+imoneyInput%5;}intmain(){printf(moneys=%d\n,GetMoneyCount(151))
本文标题:C语言部分测试试题答案60
链接地址:https://www.777doc.com/doc-2909227 .html