版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章C语言概述课后习题1.单选题(1)计算机能直接执行的是()。A.高级语言编写的源程序B.汇编语言编写的源程序C.CPU机器指令编写的程序D.C语言编写的源程序(2)C语言被执行时的入口是()。A.程序中的第一条语句B.main函数C.第一条注释D.第一个变量定义语句(3)C语言编写的源程序,需要经过()翻译成计算机可以直接执行的机器码。A.C语言编译器B.C语言解释器C.操作系统D.程序员(4)下列关于计算思维的说法,正确的是()。A.计算思维是只有程序员才需要具备的编程思维B.计算思维是快速口算的一种思维能力C.计算思维只能应用在计算机科学与工程中D.计算思维是使用分解、迭代、抽象等计算机科学的思维模型来解决各种问题的能力模型填空题高级语言编写的源程序,经过编译或者,变成计算机硬件可以直接执行的机器码。计算机程序一般包含3部分:输入数据、数据计算与处理、。相比于汇编语言和机器语言,C语言的可读性更,可移植性更。一个完整的C语言程序由若干个函数构成,但是只有一个,也是C语言执行时唯一的入口。简答题C语言70年代就已经在贝尔实验室被发明了,为什么经过这么多年,C语言依然经久不衰?请从可读性、性能、可移植性这3个角度,来比较机器语言、汇编语言和C语言。嵌入式开发为什么主流采用C语言?使用C语言编写程序时,在代码书写上有什么要求?为什么代码的书写格式非常重要?论述题小张是一个C语言的程序员,他平时书写代码比较随意,不注重格式的美观与规范。项目经理老王希望他能够按照公司指定的编程规范进行代码编写,但小张理直气壮地说:“长的好看能当饭吃吗?我只要能实现客户要求的功能,就能帮公司赚钱了。程序员重要的是算法,是创新性,没必要搞那么多条条框框吧?”如果你是老王,你将如何说服小张呢?C语言是用来编程程序,让计算机执行特定任务的高级编程语言。请问与人类的自然语言相比,计算机的高级语言有哪些相似点和不同点?有人说:C语言改变了世界。如何来理解这句话?第2章程序设计基础知识课后习题一、单选题1.对于变量定义:inta,b=0;下列叙述中正确的是()A.a的初始值是0,b的初始值不确定B.a的初始值不确定,b的初始值是0C.a和b的初始值都是0D.a和b的初始值都不确定2.以下选项,()不是合法的常量。A.38B.038C.3E8D."\38"3.以下选项,()是合法的标识符。A.TOMB.charC.1stD.You&Me4.以下运算符中,优先级最高的是()。A.<=B.!C.%D.&&5.C语言中,要求运算对象只能为整数的运算符是()。A.*B./C.!D.%6.用逻辑表达式表示“大于10且小于20的数”,正确的是()。A.10<x<20B.x>10||x<20C.x>10&x<20D.!(x<=10||x>=20)7.阅读以下程序,当输入数据的形式为25,13,10<回车键>时,正确的输出结果为()。intmain(){ intx,y,z; scanf("%d%d%d",&x,&y,&z);printf("x+y+z=%d\n",x+y+z);}A.x+y+z=48B.x+y+z=35C.48D.不确定的值8.已知ch是字符型变量,下面不正确的赋值语句是()。A.ch='a+b'B.ch='\0'C.ch='7'+'9'D.ch=7+99.判断char型变量ch是否为大写字母的正确表达式是()。A.'A'<=ch<='Z’B.(ch>='A’)&(ch<='Z’)C.(ch>='A’)&&(ch<='Z’)D.(‘A’<=ch)AND(‘Z’>=ch)10.程序运行后的输出结果是()。#include<stdio.h>
main()
{
inta=3;
printf(“%d\n”,a+=a-=a*a);
}
A.9B.-12C.0D.3二、程序填空题1.求解两个整数的最大值。#include<stdio.h>intmain(){intnum1,num2;//输入两个整数scanf("%d",&num1);scanf("%d",&num2);intmax=_______________________________;//使用条件表达式判断最大值并输出printf("%d",max);return0;}2.将数字字符转换成数字:要求填入一个表达式,可将输入的数字字符转换成对应的数字输出。例如:输入数字字符3,输出数字3。#include<stdio.h>intmain(){charch; intvalue; scanf("%c",&ch);—————————;printf("%d",value); return0;}3.分离正整数:完善程序,实现从键盘输入一个四位正整数,分离出它的每一位数字并输出。#include<stdio.h>intmain(){intn,d4,d3,d2,d1;//变量n用于存储输入的正整数 scanf("%d",&n); d1=—————————;//分离出的个位数存入变量d1 d2=n/10%10; d3=—————————;//分离出的百位数存入变量d3 d4=—————————;//分离出的千位数存入变量d4 printf("%d%d%d%d\n",d4,d3,d2,d1);//按照千位百位十位个位的顺序输出 return0;}4.将秒数转换成时分秒:从键盘输入一个以秒为单位的时间值整数,将其转换成时、分、秒的形式输出。#include<stdio.h>intmain(void){intt,h,m,s;//变量t用于存储输入的总秒数 scanf("%d",&t); s=—————————;//秒m=—————————;//分h=—————————;//时 printf("%d:%d:%d\n",h,m,s);//时分秒之间用英文冒号间隔 return0;}5.今年最后一天是星期几:用整数1表示”星期一“……整数6表示”星期六“,整数0表示”星期天“,下列程序根据用户输入的年份和该年1月1日所属的”星期几“,输出该年12月31日所属”星期几“。请完成补充下列程序。#include<stdio.h>intmain(){intyear,firstWeekday;scanf("%d%d",&year,&firstWeekday);intlastWeekday=—————————?(firstWeekday+365)%7:———————;printf("31,Decemberin%disWeekdayNo.%d\n",year,lastWeekday);return0;}三、编程题1.定期存款:客户到银行存1年期的定期存款。请编写程序,输入存款金额和1年期定期存款利率(百分数),计算并输出本金、到期利息和本息合计金额。注:存款金额小于100万元,利率为百分数,低于10%。2.三角形面积:如图所示,请编写程序,输入三角形的底b和高h,计算并输出三角形的面积a。3.华氏温度转摄氏温度:编写一个程序,提示用户输入一个浮点数表示华氏温度值,然后计算并输出对应的摄氏温度值。4.求圆柱体的周长、面积和体积:输入一个圆柱体的半径和高度,求圆柱体底面的圆周长、圆面积和圆柱体的体积,请按照周长、面积和体积的顺序输出,每个结果都取小数点后2位。π=3.14。5.汽车在有里程标志的公路上行驶,从键盘输入开始里程L1和结束的里程L2,及时间(以小时H、分钟M、秒S输入),计算并输出其平均速度V(公里数/每小时)。6.今年高考,小明顺利地考入了自己心仪的大学。妈妈给他发了n个红包,每个红包的大小是m元。小明为了鼓励弟弟和妹妹努力学习,分别给每人发了一个红包,大小是p元。请问小明现在还剩多少钱。7.在计算机内部,英文字母依ASCII码分别由连续的整数来表示。比如,大写的英文字母A的ASCII码值为65,B的码值为66,然后依次递增,Z的码值为90。请编程计算:从键盘读取大写字母Q(代号,其值由具体输入确定),请问Q所代表的大写字母是字母表中的第几个字母(从1开始计数,即A为第1个字母)?第3章控制结构习题1.单选题(1)结构化程序设计的3种结构是()。A.顺序结构,选择结构,循环结构B.分支结构,数组结构,循环结构C.顺序结构,分支结构,跳转结构D.分支结构,选择结构,循环结构(2)为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。A.缩排位置相同的ifB.在其之前未配对的ifC.在其之前未配对的最近的ifD.同一行上的if(3)若有定义:inta=1,b=2,c=3;则执行以下程序段后a,b,c的值分别为()。if(a<b){c=a;a=b;b=c;}A.a=1,b=2,c=3B.a=2,b=3,c=1C.a=2,b=3,c=3D.a=2,b=1,c=1(4)下列选项中,能求出x和y中最小值,并赋值给min的是()。A.if(x>y)min=x;elsemin=y;B.min=x<y?x:y;C.if(x<y)min=x;D.min=x>y?x:y;(5)下列程序段的输出结果是()。inta=3,b=5;if(a=b){printf("%d=%d",a,b);}else{printf("%d!=%d",a,b);}A.5=5B.3=3C.3!=5D.5!=3(6)for循环的三个表达式分别是()。A.初始化表达式、条件表达式、更新表达式B.初始化表达式、循环体、更新表达式C.判断表达式、循环体、更新表达式D.判断表达式、更新表达式、循环体(7)下面程序的运行结果是()。#include<stdio.h>main(){intnum=0;while(num<=2){num++;printf(“%d”,num);}}A.1B.12C.123D.1234(8)以下程序段的循环次数是()。for(i=2;i==0;)printf(“%d”,i--)A.无限次B.1次C.0次D.2次(9)要求通过whlie循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,下列正确的程序段是()。A.while((ch=getchar())!='N')printf("%c",ch);B.while(ch=getchar()!='N')printf("%c",ch);C.while(ch=getchar()=='N')printf("%c",ch);D.while((ch=getchar())=='N')printf("%c",ch);(10)以下程序段中,说法正确的是()。s=0;i=1;while(i<=10){s=s+i;if(s>20){break;}i++;}A.当i大于10或者s大于20时,while循环体执行break语句结束循环。B.当i小于等于10或者s大于20时,while循环体执行break语句结束循环。C.当i小于等于10并且s大于20时,while循环体执行break语句结束循环。D.当i大于10并且s大于20时,while循环体执行break语句结束循环。(11)语句while(!E);中的表达式!E等价于()。A.E==0B.E!=1C.E!=0D.E==1(12)以下程序执行结果是()。a=1;b=2;c=2;while(a<b<c){t=a;a=b;b=t;c--;}printf("%d,%d,%d",a,b,c);A.1,2,0 B.2,1,0 C.1,2,1D.2,1,1(13)运行以下程序段,输入6514<回车>,则输出结果为()。intm,n;scanf("%d%d",&m,&n);while(m!=n){while(m>n){m=m-n;}while(n>m){n=n-m;}}printf("m=%d\n",m);A.m=3B.m=2C.m=1D.m=0(14)下列程序段运行后m的值是()。inti,j,m=0;for(i=1;i<=3;i++)for(j=2;j<=4;j++)m=m+i+j;A.33B.30C.45D.27程序填空题(1)输入3个整数,输出其中最大的数。#include<stdio.h>intmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);max=0;if(a>b){if(a>c){ }else{max=c;}}else{if( ){max=b;}else{ }}printf("%d\n",max);return0;}(2)输入一个整数,输出其逆序数。要求定义并调用函数reverse(intnumber),它的功能是返回number的逆序数。例如reverse(-12345)的返回值是-54321,reverse(120)的返回值是21。intreverse(intnumber){intdigit,flag,res; flag=number<0?-1:1;if( ){number=-number;}do{digit=number%10;res= number/=10;}while(number!=0);returnflag*res;}(3)输入一个非负整数,求1+1/2!+...+1/n!。假设变量已正确定义,要求使用嵌套循环编程。scanf("%d",&n);sum= for(i=1;i<=n;i++){factor= for(j=1;j<=i;j++){factor=factor*j;}sum=sum+ }printf("%.8f\n",sum);(4)输入一个正整数n(1<=n<=9),计算并输出s=1+12+123+1234+12...n(n位数)的值。假设变量已正确定义。scanf("%d",&n);s=0; for(i=1; ;i++){ s=s+t;}printf("%d\n",s);(5)本程序的功能是输出3位数中的所有完数。如果一个整数n等于其所有因子(不含n本身)之和,则n为完数。例如,6和28都是完数,因为6=1+2+3,28=1+2+4+7+14。#include<stdio.h>intmain(){intn,i,sum;for(n=100;n<1000; ){sum=0;/*用来保存n的因子(不含n本身)之和*/for(i=1; ;i++)if(n%i==0)sum+=i;if( )printf("%5d",n);}return0;}编程题编写一个程序,接受用户输入的整数,然后判断这个整数是奇数还是偶数,并输出相应的结果。珍惜粮食,拒绝浪费。本题要求根据某自助餐厅的收费标准计算餐费。具体标准如下:1)6岁(含6岁)以下人群收费10元;2)6-12岁(含12岁)半价收费;3)超过12岁收全价78元;4)为杜绝浪费,吃剩食材每250克收取10元(不足250克不收费)。输入年龄与吃剩食材重量(整数,单位为克),输出应付餐费。输出平年中月份的天数。编写一个程序,输入一个整数表示月份(1-12),然后输出该月份在平年中的天数。输入的月份范围为1到12之间的整数,若输入无效,则输出输入错误输入三个整数,并以非递增序输出结果。从键盘输入两个正整数a和b,计算并输出a到b之间所有奇数的和。某次比赛中有7位评委进行评分,评分规则按照百分制整数进行打分。请设计一个程序,输入7位评委的评分,计算其中的最高分并进行输出。已知不等式:1!+2!+3!+...+m!<n,请编程对用户指定的正整数n值计算并输出满足该不等式的m的整数解。本题目要求读入2个正整数A和B,然后输出它们的最大公约数和最小公倍数。冰雹猜想。冰雹猜想的内容是:任何一个大于1的整数n,按照n为偶数则除等2,n为奇数则乘3后再加1的规则不断变化,最终都可以变化为1。例如,n等于20,变化过程为:20、10、5、16、8、4、2、1。编写程序,用户输入n,输出变化过程以及变化的次数。古代《张丘建算经》中有一道百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。请用穷举法编程计算,若用100元买100只鸡,则公鸡、母鸡和小鸡各能买多少只。哥德巴赫猜想。自然科学的皇后是数学,数学的皇冠是数论;哥德巴赫猜想,则是皇冠上的明珠。一七四二年,德国数学家哥德巴赫发现,每一个大偶数都可以写成两个素数的和,有些偶数可以分解成多对素数的和。例如:10=3+7,10=5+5,即10可以分解为2对不同素数的和,但他和欧拉有生之年都不能够证明它。从此,这成了一道难题,吸引了成千上万数学家的注意。两百多年来,多少数学家企图给这个猜想作出证明,都没有成功。我国著名数学家陈景润先生毕生投身到数学研究中,为中国乃至世界数学的研究做出了杰出的贡献,尤其对哥德巴赫猜想的证明做了有效的推动。下面让我们编程来测试一下哥德巴赫猜想吧。输入一个大于6的正整数n,编程统计偶数n可以分解为多少对不同的素数之和,并输出对应的分解式。第4章函数课后习题一、单选题1.在C语言中,函数的返回类型可以是下列哪种?A.intB.voidC.charD.以上都可以2.下面哪个语句可以用来调用一个函数?A.return函数名;B.函数名;C.int函数名;D.调用函数名;3.下面哪种方式可以传递参数给函数?A.通过值传递B.通过引用传递C.通过指针传递D.以上都可以4.在C语言中,函数的定义通常包括以下部分:A.函数名、返回类型和参数列表B.函数名、参数列表和函数体C.参数列表、函数名和函数体D.返回类型、参数列表和函数体5.在C语言中,下面哪个关键字用于定义函数?A.funcB.defC.functionD.以上都不是6.某个函数的形参列表为"inta,floatb",下面哪个选项中的函数调用是正确的?A.funcName()B.funcName(10,3.14)C.funcName(10,"string")D.funcName("abc",3.14)7.在C语言中,函数的声明通常包括以下哪些部分?A.返回类型、函数名和参数列表B.返回类型、参数列表和函数体C.参数列表、函数名和函数体D.参数列表、返回类型和函数体8.在函数定义中,下面哪个关键字用于指定函数返回的值?A.returnB.breakC.continueD.sizeof9.在C语言中,下列哪个选项用于在程序中调用标准库函数时提供定义?A.#defineB.#pragmaC.#includeD.#ifdef10.在C语言中,下列哪个选项用于在函数中提前结束循环或返回?A.returnB.breakC.continueD.exit()二、程序填空题(补全程序)1、#include<stdio.h>//填空处(1):声明函数原型intmain(){intnum=5;//填空处(2):调用函数并打印返回值return0;}//填空处(3):定义函数{//填空处(4):函数实现}2、#include<stdio.h>//填空处(1):声明函数原型intcube(int);intmain(){intnum=5;//填空处(2):调用函数并打印返回值printf("Thecubeof%dis%d\n",num,cube(num));return0;}//填空处(3):定义函数intcube(intx){//填空处(4):函数实现returnx*x*x;}3、#include<stdio.h>//填空处(1):声明函数原型intadd(intx,inty);intmain(){intresult;inta=6,b=3;//填空处(2):调用函数并保存返回值至resultresult=add(a,b);printf("Theresultis:%d\n",result);return0;}//填空处(3):定义函数intadd(intx,inty){//填空处(4):函数实现returnx+y;}4、#include<stdio.h>//在此处声明函数原型,函数名为addition,参数为两个整数intmain(){intresult;intx=8,y=5;//调用函数并将返回值赋给resultprintf("Thesumis:%d\n",result);return0;}//在此处定义函数addition,接收两个整数参数,返回它们的和{//在此处补充函数体}5、#include<stdio.h>//在此处声明函数原型,函数名为absoluteValue,参数为一个整数intmain(){intnum,result;num=-10;//调用函数并将返回值赋给resultprintf("Theabsolutevalueis:%d\n",result);return0;}//在此处定义函数absoluteValue,接收一个整数参数,返回其绝对值{//在此处补充函数体}
三、编程题1、将26个英文字母分别正序和逆序打印输出,正序时小写输出,逆序是大写输出。2、写出一个函数返回输入正整数对应二进制中1的个数。3、检查整数是否为素数4、编写一个递归函数,计算斐波那契数列的第n个数。5、写一个判断是否是质数的子函数,在主函数输入一个整数,输出是否为质数的信息。6、写两个子函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。7、编写一个函数,计算一个整数n的平方根(保留整数部分)。8、编写一个函数实现n的k次方,使用递归实现。9、编写一个函数,计算n的阶乘的尾部零的个数。10、编写一个函数,验证哥德巴赫猜想:任何一个大于2的偶数都可以分解为两个素数的和。第4章数组课后习题一、单选题1.若有定义:inta[5]={1,2,3,4,5};则语句a[1]=a[3]+a[2+2]-a[3-1];运行后a[1]的值为A.6B.5C.1D.22.给出以下定义:charx[]="abcdefg";chary[]={'a','b','c','d','e','f','g'};则正确的叙述为()。A.数组x和数组y等价B.数组x和数组y的长度相同C.数组x的长度大于数组y的长度D.数组x的长度小于数组y的长度3.以下对一维数组a的正确说明是()A.chara(10);B.inta[];C.intk=5,a[k];D.chara[3]={‘a’,’b’,’c’};4.若有定义inta[2][3];则对数组元素的非法引用是()。A.a[0][1/2]B.a[1][1]C.a[4-4][0]D.a[0][3]5.以下程序段给数组所有的元素输入数据,请选择正确答案填入:#include<stdio.h>intmain(){inta[10]={0},i=0;while(i<10)scanf("%d",_?_);return0;}A.a+(i++)B.&a&a[i+1][i+1]C.a+iD.&a[++i]6.以下哪一种对于str的定义不恰当,有可能使strlen(str)(strlen是定义在C标准库中的函数)获得非预期的结果:A.charstr[]="helloworld!";B.charstr[100]="X";C.charstr[4]="abcd";D.charstr[6]={65,66,67,68,69,0};7.定义如下变量和数组:inti;inta[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是()for(i=0;i<3;i++)printf("%d",a[2-i][i]);A.159B.753C.123D.7898.若有说明“inta[3][4];”,则对a数组元素的正确引用是:A.a[2][4]B.a[1,2]C.a[1+1][0]D.a(2)(1)9.数组定义为inta[3][2]={1,2,3,4,5,6},数组元素____的值为6。A.a[3][2]B.a[2][1]C.a[1][2]D.a[2][3]10.以下对二维数组a的正确说明是()。
A.inta[3][];B.floatfa(3,4);C.doublea[1][4];D.floata(3)(4);二、程序填空题1.本题目实现了求M×M方阵的对角线元素之和#include<stdio.h>#defineM5intmain(void){ inta[M][M];inti,j;intsum=0;for(i=0;i<M;i++){ for(j=0;j<M;j++){ scanf("%d",&a[i][j]);if(________________){___________________}}}printf("sum=%d\n",sum);}2.请完善程序,实现以下功能:将具有n个元素的一维数组的内容前后倒置。
输入样例1:
10
11121314151617181920输出样例1:20191817161514131211输入样例2:
5
1232344565输出样例2:
6545343212#include<stdio.h>intmain(void){intn,i,j,t;scanf("%d",__________);inta[n];for(i=0;i<=_______;i++) scanf("%d",______________);for(i=0,j=_________;____________;i++,j--){t=a[i];a[i]=a[j];a[j]=t;}}for(i=0;i<n;i++)printf("%d",a[i]);return0;}3.输出字符数组。#include<stdio.h>intmain(){charc1[]={"Howareyou?"};printf("%s",————);return0;
}4.请完善程序,实现以下程序功能:从键盘输入n个0~9的整数,统计其中每个整数出现的次数。输入样例1:101357912345输出样例1:0的出现次数=01的出现次数=22的出现次数=13的出现次数=24的出现次数=15的出现次数=26的出现次数=07的出现次数=18的出现次数=09的出现次数=1#include<stdio.h>intmain(void){intx,n,i,c[10]={————};scanf("%d",————);for(i=0;——;i++){ scanf("%d",&x);_____++;}for(i=0;i<10;i++)//输出统计结果printf("%d的出现次数=%d\n",i,_____);return0;}5.编写一个函数,使给定的一个二维数组(3X3)转置,即行列互换#include<stdio.h>#defineN3voidconvert(intarray[3][3]);voidmain(){intarr[N][N]={{1,2,3},{4,5,6},{7,8,9}}; inti,j;convert(arr);for(i=0;i<N;i++){for(j=0;j<N;j++) printf("%3d",arr[i][j]); printf("\n"); }}voidconvert(intarray[3][3]){inti,j,t;for(i=0;i<N;i++)for(j=i+1;j<N;j++){t=array[i][j];array[i][j]=array[j][i]; _____________ }}三、编程题1.设一个二维数组a[3][6]存储3门课程6个人的成绩。然后再设一个一维数组v[3]存储每门课的平均分,设一个一维数组w[6]存储每个人的平均分。成绩都写在程序里面,数组也都在程序里静态定义。然后打印每门课的平均分。打印每个同学的平均分。2.将一个字符串通过换行符,来将字符串内容分成两行用puts()输出。3.使用for循环逆向(从最高的数组下标一直到最低的数组下标)输出一个一维数组,初始的数组成员值写在程序里4.两个矩阵相加:使用多维数组将两个矩阵相加。每个矩阵大小由scanf()输入决定。程序中先静态定义比较大的两个矩阵,然后用户输入的大小的矩阵使用静态定义矩阵的一部分空间。矩阵的全部成员的值由scanf()输入。相加完成后,要将两个矩阵的成员的值用printf()输出。5.有个初始的一维数组,数组的初始成员值写在代码里面。另外定义了两个一维数组:奇数数组、偶数数组。遍历初始的数组,遇到成员是奇数的,就把这个奇数写到奇数数组里。遇到成员是偶数的,就把这个偶数写到偶数数组里。最后把这三个数组的内容打印出来。6.矩阵转换。首先在程序里静态定义两个矩阵。一个是有原始数据的矩阵,数据值由scanf()输入。输入结束后,将矩阵打印出来。然后虚拟从矩阵的左上角划一根线到矩阵的右下角。以这条线作为一根对称线,线两边的成员彼此交换位置。最后把位置交换后的矩阵打印出来。7.静态定义一个较大的一维数组,其空间供后面使用。用scanf()输入矩阵的大小,然后输入该一维数组的成员值。最后,查找这个一维数组中最大的元素,打印出来。8.数组拷贝:将一个数组复制给另外一个数组。静态定义好两个相同大小的一维数组。其中一个数组在程序里赋好值。复制到另一个数组的工作做完后,分别把两个数组的成员打印出来。指针课后习题单选题设变量定义为inta[2]={1,3},*p=&a[0]+1;,则*p的值是______。234&a[0]+1若定义pf为指向float类型变量f的指针,下列语句中_______是正确的。floatf,*pf=f;floatf,*pf=&f;float*pf=&f,f;floatf,*pf=0.0;存在定义inta[10],x,*pa;,若pa=&a[0],下列的哪个选项和其他3个选项不是等价的是_________?x=*pa;x=*(a+1);x=*(pa+1);x=a[1];程序运行后的输出结果是____。#include<stdio.h>intmain(){inta[]={1,2,3,4,5,6,7,8,9,0},*p;for(p=a;p<a+10;p++)printf("%d,",*p);return0;}1,2,3,4,5,6,7,8,9,0,2,3,4,5,6,7,8,9,10,1,0,1,2,3,4,5,6,7,8,9,1,1,1,1,1,1,1,1,1,1,对于如下说明,语法和语义都正确的赋值是_____。intc,*s,a[]={1,3,5};c=*s;s[0]=a[0];s=&a[1];c=a;下列选项正确的语句组是_______。char*s;s="hello!";char*s;s=["hello!"];chars[8];s="hello!";chars[8];s={"hello"};有以下定义,chars[]="012M356",*p=s;不能表示字符M的表达式是______。*(p+3)s[3]*(s+3)*p+3有定义语句chararray[]="China";则数组array所占用的空间为_______。4个字节5个字节6个字节7个字节若有语句“inta[]={1,2,3,4,5};”,则关于语句“int*p=a;”的说法正确的是_______。把a[0]的值赋给*p把a[0]的值赋给变量p初始化变量p,使其指向数组a的首元素定义不正确若有int*p,a=4;和p=&a;下面_____均代表地址。a,p,*&a&*a,&a,*p*&p,*p,&a&a,&*p,p程序填空题交换实数。#include<stdio.h>_____________________________________intmain(){doublea,b;scanf("%lg%lg",&a,&b);printf("%g%g\n",a,b);______________________________printf("%g%g\n",a,b);return0;}voidRealSwap(double*x,double*y){doublet=*x;________________________________________}输入样例3.64.9输出样例3.64.94.93.6完成将输入的一个数字字符串转变为整型数值的功能。#include<stdio.h>voidmain(){charcstr[8];intii;longls;__________________ls=0;for(ii=0;cstr[ii]!='\0';ii++)ls=______________________printf("%ld",ls);}在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值)否则输出-1。#include<stdio.h>voidmain(){charch='a',cstr[50];intinum,ii,iflag=1;gets(cstr);inum=___________________for(ii=0;ii<inum;ii++)if(_________________){iflag=0;break;}if(iflag==1)printf("%d",-1);else____________________}字符串复制。inti;charstr1[81],str2[81];i=0;while(_____________){_____________________i++;}____________________编程题请使用指针的方法编写程序,程序的功能是从键盘输入10个数,求其最大值和最小值的差。输入格式:输入10个整数,每个整数之间用空格分隔。输出格式:同样例。输入样例:12345678910输出样例:differencevalue=9输入一个以回车符为结束标志的字符串(少于80个字符),判断该字符串是否为回文。回文就是字符串中心对称,如“abcba”、“abccba”是回文,“abcdba”不是回文。输入格式:输入一个以回车符为结束标志的字符串(少于80个字符)输出格式:为回文,输出yes;非回文,输出no,注意输出的结果后面有回车符输入样例:abccba输出样例:yes本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。输入格式:输入在一行中给出一个不超过80个字符且以回车结束的字符串。输出格式:在一行中输出转换后的整数。题目保证输出不超过长整型范围。输入样例:free82jeep5输出样例:825第7章字符串课后习题一、单选题1.关于字符串赋值,以下不能正确赋值的语句是()。A.charstr[8]=”good!”;B.charstr[5]=”good!”;C.charstr[]=”good!”;D.charstr[5]={‘g’,’o’,’o’,’d’};2.charstring[20];使得string的内容为"Iamstudent".选择正确的输入语句()。A.getchar(string);B.scanf("%c",&string);C.scanf("%s",&string);D.gets(string);3.设有如下定义:charname[3][10]={"Libai","Yangwanli","Wangwei"};则引用字符串“Yangwanli”的正确方式是()。A.nameB.name[1][2]C.name[1]D.name[2]4.判断字符串s1是否大于字符串s2,应当使用()。A.if(s1>s2)B.if(strcmp(s1,s2))C.if(strcmp(s2,s1)>0)D.if(strcmp(s1,s2)>0)5.关于C语言字符串说法错误的是:()。A.C语言没有设置单独的字符串型变量,字符串可以利用字符数组来处理。B.字符串“Haha”含5个字符。前4个是有效字符,后一个是串结束符'\0'。C.“C”和'C'都是字符串。D.'\0'字符不是空格字符,'\0'的ASCII码是0。6.以下程序的输出结果是()。intmain(void)
{intk;charw[][10]={"ABCD","EFGH","IJKL","MNOP"};
for(k=1;k<3;k++)
printf("%s\n",w[k]);
return0;}A.ABCDFGHKLB.ABCDEFGHIJKLC.EFGJKLD.EFGHIJKL7.假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是()。A.chars[5]={"ABCDE"};puts(s);B.chars[5]={'A','B','C','D','E'};puts(s);C.char*s;scanf("%s",s);puts(s);D.char*s;s="ABCDE";puts(s);8.Thefollowingcodefragmentprintsout()。charc[]="I\t\r\\\0will\n";printf("%d",strlen(c));A.4B.15C.16D.119.下面关于字符串的程序,其输出结果是()。#include<stdio.h>voidfun(chars[],chart){inti=0;while(s[i]){if(s[i]==t)s[i]=t-'a'+'A';i++;}}intmain(){charstr[100]="abcdefg",c='d';fun(str,c);printf("%s\n",str);return0;}A.abcdefgB.abcDefgC.ABCdEFGD.ABCDEFG10.以下哪一种对于str的定义不恰当,有可能使strlen(str)(strlen是定义在C标准库中的函数)获得非预期的结果:()。A.charstr[]="helloworld!";B.charstr[100]="X";C.charstr[4]="abcd";D.charstr[6]={65,66,67,68,69,0};二、程序填空题1.字符串复制。以下程序段的功能是:将字符串str1的内容复制到字符串i;charstr1[81],str2[81];i=0;while{i++;}2.从键盘上输入两个字符串,连接成一个并输出,请填空完成相应功能。#include<stdio.h>#defineN80intmain(void){chars1[2*N],s2[N];inti,j;gets(s1);gets(s2);while()i++;j=0;while(s2[j]!='\0'){;i++;}puts(s1);return0;}3.本题目要求写一个函数mystrcmp实现字符串比较,相等输出0,不等输出其差值,在主函数输出比较结果。#include<stdio.h>#defineN20intmystrcmp(char*s1,char*s2);intmain(){charstr1[N],str2[N];gets(str1);gets(str2);printf("compareresult=%d\n",);return0;}intmystrcmp(char*s1,char*s2){while(*s1!='\0'&&*s2!='\0'){if{s1++;s2++;}else}while(*s1!='\0')return*s1;while(*s2!='\0')return-*s2;return0;}4.完成将输入的一个数字字符串转变为整型数值的功能。#include<stdio.h>voidmain(){charcstr[8];intii;longls;ls=0;for(ii=0;cstr[ii]!='\0';ii++)ls=;printf("%ld",ls);}5.本题要求输入一个字符串S和两个字符A和B,补足程序中缺失的代码部分,使运行程序时可以将字符串S中的字符A替换为字符B。#include<stdio.h>intmain(){chars[50],a,b,*p;//程序要实现用字符变量b替换字符串s中的字符变量agets(s);scanf("%c%c",&a,&b);for()if();puts(s);return0;}三、编程题1.输入一个字符串,内有数字和非数字字符,例如:a123x67222y35i08809x8c,请编写程序,将其中连续的数字作为一个整数,依次存放到一维数组a中。例如前面的字符串,应将123存放到a[0]中,67存放到a[1]中……,最后输出整数的个数以及各个整数的值。2.输入一行字符(不超过100个字符),以#为结束,输出其中数字的和。如果这行字符没有数字,输出和为0。3.大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过100且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。4.从键盘任意输入一个字符串,计算其实际字符个数并打印输出,要求不能使用字符串处理函数strlen(),使用自定义子函数Mystrlen()实现计算字符个数的功能。5.从键盘上输入一个字符串(最多80个字符),找出其中最大的字符并输出,最后换行。6.从键盘中输入一个字符串,将其逆序输出。7.一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。第8章结构体与共用体课后习题一、单选题1.如果结构变量s中的生日是“1984年11月11日”,下列对其生日的正确赋值是()。structstudent{intno;charname[20];charsex;struct{intyear;intmonth;intday;}birth;};structstudents;A.year=1984;month=11;day=11;B.birth.year=1984;birth.month=11;birth.day=11;C.s.year=1984;s.month=11;s.day=11;D.s.birth.year=1984;s.birth.month=11;s.birth.day=11;2.对于以下结构定义,++p->str中的++加在____。struct{intlen;char*str;}*p;A.指针str上B.指针p上C.str指的内容上D.以上均不是3.若有下列定义,则以下不合法的表达式是()。structstudent{intnum;intage;};structstudentstu[3]={{101,20},{102,19},{103,20}},*p=stu;A.(p++)->numB.p++C.(*p).numD.p=&stu.age4.对于以下定义,不正确的叙述是()。structex{intx;floaty;charz;}example;A.struct是定义结构类型的关键字B.example是结构类型名C.x,y,z都是结构成员名D.structex是结构类型名5.设有如下定义,则对data中的a成员的正确引用是()。structsk{inta;floatb;}data,*p=&data;A.(*p).data.aB.(*p).aC.p->data.aD.p.data.a6.下面定义结构变量的语句中错误的是()。A.structstudent{intnum;charname[20];}s;B.struct{intnum;charname[20];}s;C.structstudent{intnum;charname[20];};structstudents;D.structstudent{intnum;charname[20];};students;7.根据下面的定义,能打印出字母M的语句是()。structperson{charname[10];intage;}c[10]={“John”,17,“Paul”,19,“Mary”,18,“Adam”,16};A.printf(“%c”,c[3].name);B.printf(“%c”,c[3].name[1]);C.printf(“%c”,c[2].name[0]);D.printf(“%c”,c[2].name[1]);8.对于共用体变量成员的引用,错误的是()。typedefuniondata{inti;charch;floatf;doublex;}e;uniondataa,b,c,*p=&a,d[3];A.a.i=1;B.p->ch='A'C.d[2].f=12.5;D.e.x=33.65;9.设有如下定义,则sizeof(x)的值为:()。unionS{intg;doubley;charh;}x;A.4B.10C.8D.1310.若有定义:unionun{charc;inti;doubled;}x;inty;则以下语句中正确的是()。A.x=10.5;B.y=x;C.x.c=101;D.printf("%d",x);二、程序填空题1.输出结构变量所占内存字节数。#include<stdio.h>structps{doublei;chararr[24];};intmain(){structpsbt;printf("btsize:%d\n",);return0;}2.完成下列程序,该程序计算10名学生的平均成绩。#include<stdio.h>structstudent{intnum;charname[20];intscore;};structstudentstud[10];intmain(void){inti,sum=0;for(i=0;i<10;i++){scanf("%d%s%d",&stud[i].num,,&stud[i].score);sum+=stud[i].score;}printf("aver=%d\n",sum/10);return0;}3.使用指针输出结构体变量的成员。使用指针输出结构体变量stu的成员name之值#include<stdio.h>intmain(void){structstudent{intnum;charname[10];floatscore[3];}stu={2012,"WuHua",{75.4f,80,92}};structstudent*ptr;printf("%s\n",);/*必须使用指针变量ptr实现*/return0;}4.输入输出三位学生学号、姓名。#include<stdio.h>intmain(void){structstudent{intnum;charname[10];}stu[3],*ptr;inti;for(i=0;i<3;i++){scanf("%d,%s",&stu[i].num,stu[i].name);}for(ptr=stu;;){printf("%d,%s\n",ptr->num,ptr->name);}return0;}5.结构体数组复制。本题实现结构体数组的复制功能,将结构体数组m中的全部内容复制到数组n中,最后输出数组n中的全部内容。注意:一行输出一个结构体变量,成员之间以逗号分隔。#include<stdio.h>structss{charno[10];intdata;};intmain(){structssm[2]={{"A01",5},{"A02",8}},n[2];inti;for(i=0;i<2;i++)for(i=0;i<2;i++)printf("",);return0;}三、编程题1.找出总分最高的学生。给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。输入格式:输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号姓名成绩1成绩2成绩3”,中间以空格分隔。输出格式:在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。输入样例:500001huanglan78837500002wanghai76807700003shenqiang87837610001zhangfeng92887821987zhangmeng808275输出样例:zhangfeng100012582.计算职工工资。给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。输入格式:输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名基本工资浮动工资支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。输出格式:按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。输入样例:3zhao24040075qian36012050zhou56015080输出样例:zhao565.00qian430.00zhou630.003.通讯录排序输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。输入格式:输入第一行给出正整数n(<10)。随后n行,每行按照“姓名生日电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。输出格式:按照年龄从大到小输出朋友的信息,格式同输出。3zhang1985040313912345678wang19821020+86ian1984061913609876543输入样例:3zhang1985040313912345678wang19821020+86ian1984061913609876543输出样例:wang19821020+86ian1984061913609876543zhang19850403139123456784.计算平均成绩给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。输入格式:输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号姓名成绩”,中间以空格分隔。输出格式:首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。输入样例:500001zhang7000002wang8000003qian9010001li10021987chen60输出样例:80.00zhang00001chen219875.查找书籍。给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。输入格式:输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。输出格式:在一行中按照“价格,书名”的格式先后输出价格最高和最低的书。价格保留2位小数。输入样例:3ProgramminginC21.5ProgramminginVB18.5ProgramminginDelphi25.0输出样例:25.00,ProgramminginDelphi18.50,ProgramminginVB6.一帮一。“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。输入格式:输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。输出格式:每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。输入样例:80Amy1Tom1Bill0Cindy0Maya1John1Jack0Linda输出样例:AmyJackTomLindaBillMayaCindyJohn7.时间换算。本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。输入格式:输入在第一行中以hh:mm:ss的格式给出起始时间,第二行给出整秒数n(<60)。输出格式:输出在一行中给出hh:mm:ss格式的结果时间。输入样例:11:59:4030输出样例:12:00:10第2章程序设计基础知识课后习题一、单选题1.假设已经定义了文件指针FILE*fp,并指向了temp.txt文件,即:FILE*fp=fopen("temp.txt","w");下列可以实现将“China”这一字符串写入到temp.txt文件的语句是()A.fscanf(fp,"%s","China");B.fprintf(fp,"%s","China");C.fscanf("%s","China",fp);D.fprintf("%s","China",fp);2.有以下程序#include<stdio.h>main(){FILE*fp;charstr[10];fp=fopen("myfile.dat","w");fputs("abc",fp);fclose(fp);fp=fopen("myfile.dat","a+");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%s",str);puts(str);fclose(fp);}程序运行后在文件中的输出结果是()A.abcB.28cC.abc28D.因类型不一致而出错3.函数fgetc的作用是从指定文件读入一个字符,该文件的打开方式可以是()。A.只写B.追加C.读或读写D.答案B和C都正确4.直接使文件指针重新定位到文件读写的首地址的函数是()。A.ftell()函数B.fseek()函数C.rewind()函数D.ferror()函数5.从fp所指向的文件中读取两个整数并分别赋给两个整型变量a和b,正确的形式是()。A.fscanf(“%d%d”,&a,&b,fp);B.fscanf(fp,“%d%d”,&a,&b);C.fscanf(“%d%d”,a,b,fp);D.fscanf(fp,“%d%d”,a,b);6.在C中,系统自动定义了3个文件指针:标准输入设备文件指针stdin,默认为键盘;标准输出设备文件指针stdout,默认为显示器;标准错误输出设备文件指针stderr,默认为显示器。则函数fputc(c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年海南体育职业技术学院单招职业技能笔试参考题库带答案解析
- 2026年河南中医药大学高职单招职业适应性测试参考题库带答案解析
- 2026年成都航空职业技术学院单招职业技能笔试备考题库带答案解析
- 2026年安徽汽车职业技术学院单招综合素质考试模拟试题带答案解析
- 2026年广州科技贸易职业学院高职单招职业适应性考试备考试题带答案解析
- 土地租赁终止合同协议2025年版本
- 投资咨询合同2025年风险条款
- 2026年广东科贸职业学院单招综合素质笔试备考题库带答案解析
- 2026年福州软件职业技术学院单招综合素质笔试备考题库带答案解析
- 2026年广西体育高等专科学校单招职业技能考试备考题库带答案解析
- 2023年省国资委选聘兼职外部董事人选模拟预测(共1000题)笔试备考题库及答案解析
- 智能电器课程设计-智能脱扣器脱扣电路设计
- 西工大工程材料金属材料
- 化妆造型基础知到章节答案智慧树2023年四川音乐学院
- 2023年承德医学院解剖学试题库
- GB/T 2449.1-2021工业硫磺第1部分:固体产品
- FZ/T 10004-2018棉及化纤纯纺、混纺本色布检验规则
- 出血性脑梗死的护理查房课件
- 高三班会课件学状元方法得考试高分
- 新人教版一至二年级体育《第九套广播体操》公开课课件-25
- 大体积混凝土保供方案1
评论
0/150
提交评论