版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题与参考答案项目1【思考与练习】一、填空题1、C程序是由构成的,一个C程序中至少包含。2、C程序的注释是由和所界定的文字信息组成的。3、开发一个C程序要经过编辑、、和运行4个环节。4、C语言中,头文件的扩展名是。5、C语言源程序的扩展名;经过编译后,生成文件的后缀是;经过连接后,生成文件的扩展名是。二、简答题1、简述C语言程序的运行步骤。2、软件编程中的可读性原则一般包括那些内容?3、什么是算法?算法的特点有哪些?4、参照本章例题,编写一个C程序,输出以下内容。**************************************************Hello,world!**************************************************5、写出算法。已知圆的半径,求周长和面积。项目1思考与练习参考答案一、填空题1、函数、一个主函数main()2、/*、*/3、编译、连接4、.h5、.c、.obj、.exe二、简答题1、简述C语言程序的运行步骤。答:(1)编辑C程序源文件;(2)编译,将编辑好的源程序文件“*.c”,翻译成二进制目标代码文件“*.obj”;(3)连接,将编译生成的各个目标程序模块和系统或第三方提供的库函数“*.lib”连接在一起,生成可以脱离开发环境、直接在操作系统下运行的可执行文件“*.exe”;(4)运行程序。如果运行出错,这说明程序处理的逻辑存在问题,需要再次回到编辑环境针对程序出现的逻辑错误进一步检查、修改源程序,重复编辑→编译→连接→运行的过程,直到取得预期结果为止。2、软件编程中的可读性原则一般包括那些内容?答:1.编程规范概要(1)程序结构清晰,简单易懂,单个函数的程序行数不得超过100行。(2)打算干什么,要简单,直截了当,代码精简,避免垃圾程序。(3)尽量使用标准库函数和公共函数。(4)不要随意定义全局变量,尽量使用局部变量。(5)使用括号以避免二义性。2.可读性要求(1)可读性第一,效率第二。(2)主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。(3)常量定义(define)有相应说明。(4)处理过程的每个阶段都有相关注释说明。(5)利用缩进来显示程序的逻辑结构,缩进量一致,可以以Tab键为单位。(6)循环、分支层次不要超过五层。(7)适当的使用注释,注释可以与语句在同一行,也可以在上行。(8)保持各种运算的标准形式,通过括号避免运算符的二义性。3、什么是算法?算法的特点有哪些?答:算法(Algorithm)是对特定问题求解方法与步骤的描述,是程序求解问题的核心内容。算法的特点:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。4、参照本章例题,编写一个C程序,输出以下内容。#include"stdio.h"voidmain(){printf("**************************************************\n");printf("Hello,world!\n");printf("**************************************************\n");}5、写出算法。已知圆的半径,求周长和面积。算法:(1)定义3个变量fR、fL、fS分别存储圆的半径、周长和面积。(2)输入圆的半径fR的值。(3)分别计算圆的周长和面积,fL=2*3.14*fR,fS=3.14*fR*fR。(4)输出fL和fS。项目2【思考与练习】一、选择题1、下面叙述错误的是_。A.C程序中,各种括号应成对出现B.C程序中,赋值号的左边不可以是表达式C.C程序中,变量名的大小写是有区别的D.C程序中,若未给变量赋初值,则变量的初值自动为02、以下合法的用户标识符是____。A.long B.\t C.5a D.user3、C程序中,合法的关键字是____。A.int B.integer C.Int D.Intger4、下列选项中,优先级最高的运算符是____。A.&& B./= C.! D.<=5、C语言程序中,运算对象必须为整数的运算符是__。A.++ B.% C./ D.*6、下列字符串中为合法的字符常量的是____。A.n B.'\n' C.110 D."n"二、填空题1、下面程序的运行结果是。voidmain(){charch1='a',ch2='b',ch3='c',ch4='\101',ch5='\116';printf("a%cb%c\tab%c\n",ch1,ch2,ch3);printf("\t\b%c%c",ch4,ch5);}2、运行下面程序,其输出结果为。voidmain(){intiA1,iA2,iA3=258;iA1=97;iA2=98;printf("iA1=%c,iA2=%c,iA3=%c",iA1,iA2,iA3);}(3)下面程序的运行结果是。voidmain(){intiX,iY,iM,iN;iX=10;iY=20;iM=iX++;iN=++iY;printf("iX=%d,iY=%d,iM=%d,iN=%d",iX,iY,iM,iN);iM=iX––;iN=––iY;printf("iX=%d,iY=%d,iM=%d,iN=%d",iX,iY,iM,iN);}(4)下面程序的运行结果是。voidmain(){intiX,iY;iX=80;iY=25;printf("iX=%d,iY=%d\n",iX,iY);printf("iX/iY=%d,iX%iY=%d\n",iX/iY,iX%iY);}三、编程题1、编程计算C语言表达式20a2-5b3的值,a=5,b=2。2、编程实现。从键盘输入一个四位整数,计算其个位、十位、百位、千位的和。3、交换两个字符变量的值。项目2思考与练习参考答案一、选择题1、D2、D3、A4、C5、B6、B二、填空题1、aabb abcAN2、iA1=a,iA2=b,iA3=☺3、iX=11,iY=21,iM=10,iN=21,iX=10,iY=20,iM=11,iN=204、iX=80,iY=25iX/iY=3,iX%iY=5三、编程题1、编程计算C语言表达式20a2-5b3的值,a=5,b=2。#include"stdio.h"voidmain(){inta,b;a=5;b=2;printf("%d\n",20*a*a-5*b*b*b);}2、编程实现。从键盘输入一个四位整数,计算其个位、十位、百位、千位的和。#include"stdio.h"voidmain(){intiNum;inti1,i2,i3,i4,iSum;printf("pleaseinputainteger(1000-9999):");scanf("%d",&iNum);i1=iNum%10;/*求个位数*/i2=iNum/10%10;/*求十位数*/i3=iNum/100/10;/*求百位数*/i4=iNum/1000;/*求千位数*/iSum=i1+i2+i3+i4;printf("thesumis:%d",iSum);}3、交换两个字符变量的值。voidmain(){charch1='A',ch2='B',chTemp;printf("ch1=%c,ch2=%c\n",ch1,ch2);chTemp=ch1;ch1=ch2;ch2=chTemp;;printf("ch1=%c,ch2=%c\n",ch1,ch2);getch();}项目3【思考与练习】一、选择题1、设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:scanf("i=%d,f=%f",&i,&f);为了把100和765.12分别赋给i和f,则正确的输入为。A.100<空格>765.12<回车>B.i=100,f=765.12<回车>C.100<回车>765.12<回车>D.x=100<回车>,y=765.12<回车>2、以下程序的输出结果是。main(){inta=12,b=12;printf("%d%d\n",--a,++b);}A.1010B.1212C.1110D.11133、以下程序输出结果是。main(){intm=5;if(m++>5)printf("%d\n",m);elseprintf("%d\n",m--);}A.7B.6C.5D.44、当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为。if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;A.1B.2C.3D.65、设有语句inta=3;则执行了语句a+=a-=a*a;后,变量a的值是。A.3B.0C.9D.-126、以下程序的输出结果是。#include<stdio.h>main(){inta=2,c=5;printf("a=%%d,b=%%d\n",a,c);}A.a=%2,b=%5B.a=2,b=5C.a=%%d,b=%%dD.a=%d,b=%d7、若x和y都是int型变量,x=100,y=200,且有下面的程序片段:printf("%d",(x,y));上面程序片段的输出结果是。A.200B.100C.100200D.输出格式符不够,输出不确定的值8、已知字母A的ASCII码为十进制的65,下面程序的输出是。main(){charch1,ch2;ch1='A'+'5'-'3';ch2='A'+'6'-'3';printf("%d,%c\n",ch1,ch2);}A.67,DB.B,CC.C,DD.不确定的值9.以下程序的输出结果是Voidmain(){Charc=’z’;Printf(“%c”,c-25);}A.aB.zC.z-25D.y二、编程题1.输入一个华氏温度,要求输出摄氏温度。公式为:C=5/9(F-32),输出要有文字说明,取2位小数。式中:C表示摄氏温度,F表示华氏温度。编写C语言程序实现。2.有2个怀子,分别装着红酒和啤酒,现在想交换这2个杯子中的酒,应该如何交换?编写C语言程序实现。3.输入一个数,求该数个位、十位、百位上的数之和。编写C语言程序实现。4.用编程的形式打印学生入学的姓名、性别、年龄、学号和入学成绩。5.已知圆的半径,求该圆的周长和面积。项目3思考与练习参考答案一、选择题1.B.2.D3.c4.B5.D6.A7.D8.A9.A二、编程题略
项目4【思考与练习】一、选择题1、关于if语句后面一对括号中的表达式,叙述正确的是。 A.只能用关系表达式 B.只能用逻辑表达式 C.只能用关系表达式或逻辑表达式 D.可以使用任意合法的表达式2、对switch后括号内的表达式,叙述正确的是。 A.只能是数字 B.可以是浮点数 C.只能是整型数据或字符型数据 D.以上叙述都不对3、iX=2,iY=3,ch='a',表达式iZ=(iX||iY)&&(ch>'A')的值是。 A.true B.false C.0 D.14、表达式(6!=8)&&('A'<'a')的值是。A.true B.1 C.0 D.非0值5、intk=x>y?(x>z?x:z):(y>z?y:z)语句的目的是:。A.求x,y,z最大值 B.求x,y,z最小值C.求x,y,z中间值D.求x,y,z平均值6、有如下程序段inta=14,b=15,x;charc=’A’;x=(a&&b)&&(c<’B’);执行该程序段后,x的值为。A.ture B.false C.0 D.17、以下程序的输出结果是。main(){ inta=0,i=1; switch(i){ case0:case3:a+=2;case1:case2:a+=3;default:a+=5;}printf("%d\n",a);}A.3B.8C.10D.2二、写出下列程序的运行结果1、下面程序的输出结果是。#include"stdio.h"main(){inti,j;i=j=2;if(i==1)if(i==2)printf("%d",i=i+j);elseprintf("%d",i=i–j);printf("%d",i);2、下面程序的输出结果是。#include"stdio.h"main(){intiX=3; switch(iX) { case1: case2:printf("iX<3\n"); case3:printf("iX=3\n"); case4: case5:printf("iX>3\n"); default:printf("iXunknow\n"); }}3、下面程序的输出结果是。#include"stdio.h"main(){charchT='w',chA='m',chB='d',chC='x',chM;chM=(chT>chA)?chT:chA;chM=(chM>chB)?chM:chBchM=(chM>chC)?chM:chC;printf("c%",chM);}三、编程1.输入一个整数,判断该数的奇偶性。2.编写程序,实现判断用户输入的是整数还是负数的功能。3.输入一个字符,请判断是字母、数字还是特殊字符。4.根据指定月份,打印该月份所属的季节。3,4,5春季;6,7,8夏季;9,10,11秋季;12,1,2冬季。5.小明去参加一个同学的生日聚会,同学的家长规定18岁以上的才可以饮酒,所以需要编一程序根据输入的年龄打印一张饮酒卷,使的能饮酒的同学可以获取饮酒卷。6.根据用户输入对应的星期(char[])显示相应的菜名。如果“星期一”则显示“干煸豆角”;如果”星期二“则显示“醋溜土豆丝”;如果“星期三”则显示“红烧狮子头”如果“星期四”显示“油炸花生米”;如果“星期五,显示"蒜蓉扇贝";如果“星期六”显示"东北乱炖”;如果“星期日”,显示“大盘鸡”。请编写该程序。7.企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提成10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万元到40万元之间时,高于20万元的部分,可提5%;40万元到60万元之间时,高于40万元的部分,可提成3%;60万元到100万元之间时,高于60万元的部分,可提成1.5%;高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求发放奖金总数。项目4思考与练习参考答案一、1、D2、C3、C4、B5、A6、D7、B二、1、22、Ix=3Ix>3Ixunknow3、x三、编程题1、略2、略3、略4、#include<stdio.h>
intmain()
{intmonth;
scanf("%d",&month);
if(month<=5&&month>=3)printf("春\n");
elseif(month<=8&&month>=6)printf("夏\n");
elseif(month<=11&&month>=9)printf("秋\n");
elseprintf("冬\n");
return0;
}方法二:#include<stdio.h>Intmain(){Intmonth=0;printf(“请输入月份:\n”);scanf_s("%d",&month);switch(month){case1:case2:case3:printf(“春”);break;case4:case5:case6:printf(“夏”);break;case7:case8:case9:printf(“秋”);break;case10:case11:case12:printf(“冬”);break;default:{printf(“输入错误”);}}return0;}5、#include"stdio.h"
voidmain(
/*main函数*/
{
inti1;
/*定义整型变量*/
printf("请输入你的年龄:);
scanf("%d",&i1);
if(i1>=18)
/*判断函数*/
printf("恭喜你获得饮酒券!");
}
6、#include<stdio.h>voidmain(){stringweek;printf("请输入星期几:");scanf("%c",&week);switch(week){case"星期一":printf("干煸豆角");break;case"星期二":
printf(""醋溜土豆");break;case"星期三":
printf("红烧狮子头");break;case"星期四":
printf("油炸花生米");break;case"星期五":
printf("蒜蓉扇贝");break;case"星期六":
printf("东北乱炖");break;case"星期日":
printf("大盘鸡");break;default:
printf("您输入错误")
}
}7、略
项目5【思考与练习】一、选择题1、下面程序段的运行结果是_______。intiNum=0;while(iNum<=2)printf("%d",iNum); A.2 B.3 C.死循环,无限个0 D.有语法错2、下面程序的运行结果是_______。#include"stdio.h"voidmain(){intiNum=0;while(iNum<=2){iNum++;printf("%d\n",iNum);}} A.1 B.1 C.1 D.1 2 2 2 3 3 43、以下程序段________。iNum=–1;do{iNum=iNum*iNum;}while(!iNum); A.是死循环 B.循环执行2次 C.循环执行一次 D.有语法错误4、若i为整型变量,则以下循环执行次数是________。for(i=2;i==0;)printf("%d",i); A.无限次 B.0次 C.1次 D.2次5、以下正确的描述是_______。 A.continue语句的作用是结束整个循环的执行 B.只能在循环体内和switch语句体内使用break语句 C.在循环体内使用break语句或continue语句的作用相同 D.从多层循环嵌套中退出时,只能使用goto语句二、填空题1、下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。填空使程序完整。intiNum=0,chLetter;chLetter=getchar();while(____){if(_____)iNum++;chLetter=getchar();}2、下面程序段的运行结果是_______。i=1;iSum=3;do{iSum+=i++;if(iSum%7==0)continue;else++i;}while(iSum<15);printf("%d",i);三、编程题1、计算n!。2、编写程序打印出数字1-10,但其中不包括4和7,在4或7时跳过不输出(用break还是continue?分别尝试一下,写出两者的区别)。3、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。4、百钱百鸡问题。公鸡:5元;母鸡:3元;小鸡:3只1元,100元钱刚好买100只鸡,假设每种鸡都必须买,求公鸡、母鸡、小鸡各有几只?输出所有的购买方案。5、把厚度为0.006cm的纸不断地裁剪、摞折,经过43次操作后,求解纸的厚度。项目5思考与练习参考答案一、选择题1、D2、C3、C4、C5、B二、填空题1、chLetter!=’\0’chLetter>=’1’&&chLetter<=’9’2、8三、编程题1、计算n!。#include"stdio.h"voidmain(){intk,iSum,n; k=1;iSum=1;scanf(“%d”,&n);while(k<=n) {iSum=iSum*k; k++;}printf("\nthesumis%d",iSum);}2、编写程序打印出数字1-10,但其中不包括4和7,在4或7时跳过不输出(用break还是continue?分别尝试一下,写出两者的区别)。#include"stdio.h"intisDaff(intiNum);voidmain(){inti;for(i=1;i<=10;i++){ If(i!=4||i!=7) printf("%d",i);}}3、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。#include"stdio.h"voidmain(){intk,iSum; k=1;iSum=1;while(k<10) {iSum=(iSum+1)*2; k++;}printf("%d",iSum);}4、百钱百鸡问题。公鸡:5元;母鸡:3元;小鸡:3只1元,100元钱刚好买100只鸡,假设每种鸡都必须买,求公鸡、母鸡、小鸡各有几只?输出所有的购买方案。#include"stdio.h"voidmain(){inti,j; for(i=1;i<20;i++)for(j=1;j<33;j++){if((i*5+j*3+(100-i-j)/3)==100)Printf(“公鸡:%d母鸡:%d小鸡:%d”,i,j,100-i-j)}}5、略第6章数组思考与练习1.读10个整数存入数组,找出其中最大值和最小值。2.将一个数组逆序输出。3.设计一个程序,输出下列矩阵1234567894.求一个三行三列矩阵对角线和。5.求100到999之间的所有水仙花数。(水仙花数:一个n位数,它的每个位上的n次幂的和,等于这个数本身,如:153、370)。6.用筛选法求100以内的素数(素数是除了1和自己以外,不能被其他整数整除的整数。)。7.一个打印杨辉三角的案例来加深对数组的理解。杨辉三角的前10行样式如下所示。 1 11 121 1331 14641 15101051 1615201561 172135352171 18285670562881 193684126126843691第6章思考与练习参考答案1.#include<stdio.h>#defineSIZE10voidmain(){intx[SIZE],i,max,min;printf("Enter10integers:\n");for(i=0;i<SIZE;i++){printf("%d:",i+1);scanf("%d",&x[i]);}max=min=x[0];for(i=1;i<SIZE;i++){if(max<x[i])max=x[i];if(min>x[i])min=x[i];}printf("Maximumvalueis%d\n",max);printf("Minimumvalueis%d\n",min);}2./*将一个数组逆序输出。*/#include"stdio.h"#include"conio.h"#defineN5main(){inta[N]={9,6,5,4,1},i,temp;printf("\noriginalarray:\n");for(i=0;i<N;i++)printf("%4d",a);for(i=0;i<N/2;i++){temp=a;a=a[N-i-1];a[N-i-1]=temp;}printf("\nsortedarray:\n");for(i=0;i<N;i++)printf("%4d",a);getch();}3.#include<stdio.h>main(){staticinta[3][3]={{1,2,3},{4,5,6},{7,8,9}};inti,j;printf("outputa:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%3d",a[i][j]);printf("\n");}}4.main(){floata[3][3],sum=0;inti,j;printf("pleaseinputrectangleelement:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%f",&a[i][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf("duijiaoxianheis%6.2f",sum);}5.#include<stdio.h>#include<math.h>intmain(void){inti,g,s,b;intsum=0;for(i=100;i<1000;i++){g=i%10;//个位s=i/10%10;//十位b=i/100;//百位//sum=g*g*g+s*s*s+b*b*b;sum=pow(g,3)+pow(s,3)+pow(b,3);//pow(a,b)a为底数,b为指数if(sum==i){printf("水仙花数:%d\n",i);}}return0;}6.#include<stdio.h>#defineSIZE100main(){inta[SIZE+1],i,j;for(i=2;i<100;i++)a[i]=i;for(i=2;i<100;i++)for(j=i+1;j<=100;j++)if(a[i]!=0&&a[j]%a[i]==0)a[j]=0;printf("\n");j=0;for(i=2;i<=100;i++){if(a[i]!=0){printf("%4d",a[i]);j++;}if(j==10){j=0;printf("\n");}}}7.#include<stdio.h>#include<stdlib.h>voidmain(){ inti,j,n=0; intarr[10][10]={1};//定义一个10行10列的二维数组,初始化为1 while(n<1||n>10)//此while循环控制用户只能输入n=10 { printf("请输入n的值:\n"); scanf("%d",&n); } for(i=1;i<n;i++)//外层循环控制杨辉三角的行数 { arr[i][0]=1;//每一行第1个元素都赋值为1,即第1列都为1 for(j=1;j<=i;j++)//内层控制杨辉三角的列数//每个元素等于其上一行左边和上边两个元素之和 arr[i][j]=arr[i-1][j-1]+arr[i-1][j]; } for(i=0;i<n;i++)//双重for循环打印这个二维数组中的元素 { for(j=0;j<=i;j++) printf("%-5d",arr[i][j]); printf("\n"); } system("pause");}第7章函数思考与练习一、选择题1、在C语言的函数中,下列说法正确是_________。A.必须有形参 B.形参必须是变量名C.可以有也可以没形参 D.数组名不能作形参2、数组名作为实参传递给函数时,传递的是________。A.该数组长度 B.该数组的元素个数C.该数组首地址 D.该数组中各个元素的值3、以下函数定义正确的是________。A.intfnSum(intiNum1,intiNum2) B.intfnsum(intiNum1,iNum2)C.intfnsum(iNum1,iNum2) D.intfnsum(intiNum1;intiNum2)4、简单变量做实参时,它和对应形参之间的数据传递方式为______。A.地址传递 B.单向值传递C.由实参传给形参,再由形参传回给实参D.由用户指定传递方式5、C语言允许函数值类型默认定义,此时该函数值隐含的类型是______。A.float B.int C.long D.double6、以下说法正确的是_________。A.定义函数时,形参类型说明可以放在函数体内B.函数能嵌套定义C.return后边的值不能为表达式D.如果函数值的类型与返回值的类型不一致,以函数类型为准。7、如果未指定局部变量类型,其隐含的存储类别为_________。A.自动(auto) B.静态(static)C.外部(extern) D.寄存器(register)8、以下叙述中不正确的是_________。A.在不同的函数中可以使用相同名字的变量B.函数中的形式参数是局部变量C.在一个函数内定义的变量只在本函数范围内有效D.在一个函数内的复合语句中定义的变量在本函数范围内有效二、填空题1、以下函数是求最大值的函数,请补充完整以下程序。#include"stdio.h"_________;main(){intiNum1,iNum2,iMax;scanf("%d,%d",&iNum1,&iNum2);iMax=_________;printf("%d",iMax);}fnMax(intiNum1,intiNum2){if(iNum1>iNum2)returniNum1;else_________;}2、以下程序的运行结果是________。intiNum1=5;intiNum2=7;main(){intiNum1=4,iNum2=5,iSum;iSum=fnPlus(iNum1,iNum2);printf("A+B=%d\n",iSum);}fnPlus(intiNum1,intiNum2){intiSum;iSum=iNum1+iNum2;return(iSum);}3、以下程序的运行结果_________。#include"stdio.h"intfnFun(){staticintiNum=1;iNum=iNum+2;returniNum;}main(){printf("%d\n",fnFun()+fnFun());}三、编程题1、编写函数求1+1/2+1/3+1/4+……+1/n的值。2、使用函数,利用遍历数组找出全班同学成绩的最高分。3、使用递归方法,求Fibonacci数列的第N项。第7章思考与练习参考答案一、选择题1、C2、C3、A4、B5、B6、D7、A8、D二、填空题1、intfnMax(intiNum1,intiNum2);fnMax(iNum1,iNum2)returniNum1;2、A+B=43、8三、编程题1、编写函数求1+1/2+1/3+1/4+……+1/n的值。#include"stdio.h"doubledSum(intn);voidmain(){intn; scanf("%d",&n); printf("theresultis%.2f\n",dSum(n));}doubledSum(intn){inti; doubledResult=0; for(i=1;i<=n;i++) { dResult+=1.0/i; }returndResult;}2、使用函数,利用遍历数组找出全班同学成绩的最高分。#include<stdio.h>#defineSIZE5floatfMax(floatfScore[],intiSize);voidmain(){floatfScore[SIZE]={0};inti=0;floatfResult=0;for(i=0;i<SIZE;i++){scanf("%f",&fScore[i]);}printf("themaxscoreis%.2f\n",fMax(fScore,SIZE));getch();}floatfMax(floatfScore[],intiSize){inti=0;intfValue=fScore[0];for(i=1;i<iSize;i++){if(fScore[i]>fValue){fValue=fScore[i];}}returnfValue;}3、使用递归方法,求Fibonacci数列的第N项。#include<stdio.h>intf(inta)
//函数f的定义{
inti;
if(a==1){
return0;
}
if(a==2){
return1;
}
elseif(a>=3){
for(i=1;i<a;i++){
return(f(a-1)+f(a-2));//函数f的递归调用
}
}}voidmain(){
intn;
printf("inputanumber:\n");
scanf("%d",&n);
printf("%d\n",f(n));
//函数f的调用}第8章结构体、共用体和枚举类型思考与练习一、选择题1、设有以下结构体定义:structstudent{charchName[8];intiAge;charchSex;}stStaff;则下面的叙述不正确的是_________。A.struct是定义结构体类型的关键字B.structstudent是用户定义的结构体类型C.stStaff是用户定义的结构体类型名D.chName、iAge和chSex都是结构体成员名2、在第(1)小题中定义的结构体变量stStaff,则系统分配的内存空间字节数是_________。A.8B.10C.11D.33、设有以下结构体定义:structstudent{charchName[8];intiAge;charchSex;}stStaff[3];对结构体变量成员的正确引用是_________。A、scanf(“%d”,&stStaff.iAge)B.scanf(“%s”,stStaff[0].iAge)C.scanf(“%s”,stStaff)D.scanf(“%d”,&iAge)二、填空题1、引用结构体变量中成员的一般形式是_________。:2、若有以下结构体类型说明和数组的初始化:structstTest{ intiNum; charchLetter[6];}stAlpha[2]={2,“abcde”,4,“EDCB”};则执行语句printf(“%s,%c\n”,&stAlpha[0].chLetter[2],stAlpha[1].ch[2]);后的输出结果是:_________。3、以下程序的执行结果是:_________。fnChange(structteststHuman);structtest{intiAge;charchSex;}stStaff={18,‘M’};fnChange(structteststHuman){stHuman.iAge=20;stHuman.chSex=‘F’;}voidmain(){fnChange(stStaff);printf(“%d,%c\n”,stStaff.iAge,stStaff.chSex);第8章结构体、共用体和枚举类型思考与练习答案一、1、C2、A3、B二、1、结构体变量名.成员名2、cde,C3、18,M第9章指针思考与练习1.编写一个函数,将一个3*4的二维数组矩阵转置。用指向数组的指针实现。2.编写一个程序统计候选人得票数。设有4名候选人,以输入候选人人名方式模拟唱票,最后输出每个候选人的得票数。计算得票数的过程用函数实现。3.指针作为函数参数,实现两个数值交换。4.利用指针查找数列中的最大值和最小值在窗体上输入10个整数,自动查找这些数中的最大值和最小值,并显示在窗体上。5.用函数指针来实现对函数的调用,返回两个整数中的最大值。6.编写一个函数,其功能是从一个字符指针数组中寻找指定的一个字符串,若找到返回1,否则就返回0。7.编写函数,将一个字符串的指定字符全部删除。要求函数的原型可声明为:voidfnDelChar(char*str,charch);其中,参数str为要删除字符的字符串,ch为要删除的字符。第9章思考与练习参考答案:1.#include<stdio.h>voidfunc(int(*pa)[4],int(*pb)[3],intx,inty){ inti,j; //输出pa指向的二维数组的元素 for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d\t",pa[i][j]); pb[j][i]=pa[i][j];//矩阵转置 } printf("\n"); } printf("\n\n"); for(i=0;i<y;i++) { for(j=0;j<x;j++) { printf("%d\t",pb[i][j]); } printf("\n"); }}intmain(){inti,j; intarr[3][4],brr[4][3]; for(i=0;i<3;i++) { for(j=0;j<4;j++) { scanf("%d",&arr[i][j]); } }return0;}2.#include"string.h"structperson /*定义结构体类型*/{charchName[15]; intiCount;};voidfnCount(structperson*pStr) /*计算每个人的票数*/{inti,j;charchName[15];printf("\nInputname\n");for(i=1;i<=10;i++){scanf("%s",chName);for(j=0;j<4;j++)if(strcmp(chName,(pStr+j)->chName)==0)(pStr+j)->iCount++;}}voidfnData_put(structperson*pStr)/*输出每个候选人及票数*/{intj;printf("\nresult:");for(j=0;j<4;j++,)printf("\n%s=%d",(pStr+j)->chName,(pStr+j)->iCount);}voidmain(){structpersonstLeader[4]={{"Li",0},{"Wang",0},{"Zhang",0},{"Shen",0}};fnCount(stLeader);fnData_put(stLeader);}3.#include<stdio.h>voidswap(int*a,int*b)//函数参数为指针类型{ inttemp; temp=*a; *a=*b; *b=temp;}voidmain(){ inta=10,b=20; printf("调用函数前变量a和b的值为:%d%d\n",a,b); swap(&a,&b); printf("调用函数后变量a和b的值为:%d%d\n",a,b);}4.#include<stdio.h>voidfnMax_min(inta[],intn,int*max,int*min){int*p;*max=*min=*a; /*初始化最大值、最小值*/for(p=a+1;p<a+n;p++) if(*p>*max)*max=*p; /*最大值*/ elseif(*p<*min) *min=*p; /*最小值*/ return;}voidmain(){inti,a[10],max,min; printf("请输入10个整数:"); for(i=0;i<10;i++) scanf("%d",&a[i]); /*输入数组元素*/ fnMax_min(a,10,&max,&min); /*返回最大值和最小值*/ printf("最大数是%d\n",max); /*输出最大值*/ printf("最小数是%d\n",min); /*输出最小值*/}5.intmax(inta,intb);intmain(){intx,y,maxVal;int(*pmax)(int,int)=max;printf("Inputtwonumbers:");scanf("%d%d",&x,&y);maxVal=(*pmax)(x,y);printf("Maxvalue:%d\n",maxVal);getchar();getchar();return0;}intmax(inta,intb){returna>b?a:b;}6.#include<stdio.h>#include<string.h>intfnFindStr(char*source,char*object){ char*p=source; chart[80]; intmaxlen=strlen(object); while(*p) { if(strncmp(object,p,maxlen)==0)return1; p++; }return0;}voidmain(){ chart[]="qwe3rtyuioswerp",g[]="swer"; printf("%d",fnFindStr(t,g));}#include<stdio.h>#include<string.h>#include<malloc.h>voidfnDelChar(char*str,charch);/*函数声明*/voidmain(){ charstr[100]; puts("请输入一个字符串:"); gets(str);fnDelChar(str,'a'); printf("结果字符串为:%s\n",str);}voidfnDelChar(char*str,charch)/*函数定义*/{ char*p,*q,*t; intlength; length=strlen(str); q=t=(char*)malloc(length+1); p=str; while(*p) { if(*p!=ch) { *t=*p; t++; } p++; }*t='\0'; strcpy(str,q); }第10章文件思考与练习一、选择题选择题1、当已存在一个abc.txt文件时,执行函数fopen("abc.txt","r+")的功能是。A.打开abc.txt文件,清除原有的内容B.打开abc.txt文件,只能写入新的内容C.打开abc.txt文件,只能读取原有内容D.打开abc.txt文件,可以读取和写入新的内容2、若用fopen()函数打开一个已存在的文本文件,保留该文件原有内容,且可以读,可以写。则文件打开模式是。A."ab+" B."w+" C."a+" D."a"3、以下不能将文件指针重新移到文件开头位置的函数是。A.rewind(fp); B.fseek(fp,0,SEEK_SET);C.fseek(fp,-(long)ftell(fp),SEEK_CUR); D.fseek(fp,0,SEEK_END);4、若用fopen()函数打开一个新二进制文件,该文件可以读也可以写,则文件的打开模式为。A."ab+" B."wb+" C."rb+" D."a+"5、fread(buffer,64,2,fp)的功能是。A.从fp所指的文件中读取64并存入buffer中B.从fp所指的文件中读取64和2并存入buffer中C.从fp所指的文件中读取64个字节的数据并存入buffer中D.从fp所指的文件中读取2个64字节的数据并存入buffer中6、以下程序的功能是。提示:PRN是打印设备。#include<stdio.h>voidmain(){FILE*fp;charchStr[]="HELLO";fp=fopen("PRN","w");fputs(chStr,fp);fclose(fp);}A.在屏幕显示HELLO B.把HELLO存入PRN文件中C.在打印机上打印出HELLO D.以上都不对二、填空题1、使用fopen("abc","r+")打开文件时,若"abc"文件不存在,则返回。2、假设数组dArray声明为doubledArray[4]={2.3,45.6,5.7,10.89},则将数值5.7写入文件指针fp所指向的文件的语句是。3、fputs("ShenZhen",fp)的功能是。其中,fp为一文件指针。4、文件指针fp指向一个打开的文件,则将文件位置指针移离文件开头64个字节处,应使用的函数调用语句是,将文件位置指针移离文件当前位置32个字节处,应使用的函数调用语句是,将文件位置指针移离距末尾文件128个字节处,应使用的函数调用语句是。三、编程题1、从键盘输入一个字符串,然后保存在文件“test.txt”中。2、将“test.txt”的内容输出在屏幕上。3、从键盘输入5本教材的信息(书名、作者、价格、出版社),然后保存在文件“book.dat”中。4、将“book.dat”的内容输出在屏幕上(注意每条信息输出为一行)。 第10章思考与练习参考答案一、选择题1、D2、C3、D4、B5、D6、D二、填空题1、NULL2、fwrite(&disarray[2],4,1,fp);3、将字符串”ShenZhen”写入文件指针fp所指向的文件4、fseek(fp,64,0)、fseek(fp,32,1)、fseek(fp,128,2)三、编程题1、从键盘输入一个字符串,然后保存在文件“test.txt”中。#include"stdio.h"voidmain(){FILE*fp;charchInfo[20];inti;fp=open("myInfo.txt","w");if(fp==-1){printf("cannotopenthisfile!\n");exit());}printf("pleaseinputastring:");scanf("%s",chInfo);write(fp,chInfo,10);close(fp);getch();}2、将“test.txt”的内容输出在屏幕上。#include"stdio.h"voidmain(){FILE*fp;charchInfo[10];fp=open("myInfo.txt","r");if(fp==-1){printf("cannotopenthisfile!\n");exit(0);}read(fp,chInfo,10);printf("%s",chInfo);close(fp);getch();}3、从键盘输入5本教材的信息(书名、作者、价格、出版社),然后保存在文件“book.dat”中。#include"stdio.h"structtype_book{charchName[10];charchAuthor[10];floatfPrice;charchPress[10];};voidmain(){structtype_bookstBook[5];FILE*filePointer;inti;filePointer=fopen("book.dat","wb");if(filePointer==NULL){printf("cannotopenthisfile\n");exit(0);}for(i=0;i<5;i++){printf("pleaseinputthebookname,author,price,press:");scanf("%s%s%f%s",stBook[i].chName,stBook[i].chAuthor,&stBook[i].fPrice,&stBook[i].chPress);fwrite(&stBook[i],sizeof(structtype_book),1,filePointer);}fclose(filePointer);getch();}4、将“book.dat”的内容输出在屏幕上(注意每条信息输出为一行)。#include"stdio.h"#include"stdio.h"structtype_book{charchName[10];charchAuthor[10];floatfPrice;charchPress[10];};voidmain(){structtype_bookstBook[5];FILE*filePointer;inti;filePointer=fopen("book.dat","rb");if(filePointer==NULL){printf("cannotopenthisfile\n");exit(0);}printf("NameAuthorPricePress\n");for(i=0;i<5;i++){fread(&stBook[i],sizeof(structtype_book),1,filePointer);}fclose(filePointer);for(i=0;i<5;i++){printf("%s\t%s\t%f\t%s\n",stBook[i].chName,stBook[i].chAuthor,stBook[i].fPrice,stBook[i].chPress);}getch();}项目6【思考与练习】1.读10个整数存入数组,找出其中最大值和最小值。答案:#include"stdio.h"intmain(){inti,a[10],max,min;for(i=0;i<=9;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}max=min=a[0];for(i=1;i<10;i++){if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i];}printf("Thetennumberis\n");printf("max=%d\n",max);printf("min=%d\n",min);}运行结果:2.将一个数组逆序输出。答案:#include"stdio.h"intmain(){inti,max,min;inta[10]={0,1,2,3,4,5,6,7,8,9};for(i=9;i>=0;i--) printf("%d",a[i]);printf("\n");}运行结果:3.设计一个程序,输出下列矩阵123456789答案:#include"stdio.h"intmain(){inti,j;inta[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++){for(j=0;j<3;j++) printf("%d",a[i][j]);printf("\n");}}运行结果:4.求一个三行三列矩阵对角线和。答案:#include"stdio.h"intmain(){inti,j,sum=0;inta[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++){for(j=0;j<3;j++) if(i==j) sum=sum+a[i][j];}printf("%d",sum);}运行结果:5.求100到999之间的所有水仙花数。(水仙花数:一个n位数,它的每个位上的n次幂的和,等于这个数本身,如:153、370)。答案:#include"stdio.h"voidmain(){intn,a[3],i,j,k;for(n=100;n<1000;n++){ a[3]=n;i=a[3]%10; j=a[3]/10%10; k=a[3]/100; if(a[3]==i*i*i+j*j*j+k*k*k) printf("%d",a[3]);}运行结果:6.用筛选法求100以内的素数(素数是除了1和自己以外,不能被其他整数整除的整数。)。答案:#include<stdio.h>intmain(){inti,j;inta[100];for(i=0;i<100;i++)a[i]=i+1;a[0]=0;for(i=0;i<99;i++){ for(j=i+1;j<100;j++) { if(a[i]!=0&&a[j]!=0) { if(a[j]%a[i]==0) a[j]=0; } }}for(i=0;i<100;i++){ if(a[i]!=0) printf("%3d",a[i]);}printf("\n");}运行结果7.一个打印杨辉三角的案例来加深对数组的理解。杨辉三角的前10行样式如下所示。 1 11 121 1331 14641 15101051 1615201561 172135352171 18285670562881 193684126126843691答案:#include"stdio.h"voidmain(){inta[10][10]; inti,j; for(i=0;i<10;i++){a[i][0]=1; a[i][i]=1;}for(i=2;i<10;i++) {for(j=1;j<i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf("%d",a[i][j]); printf("\n"); }}运行结果:项目7【思考与练习】一、选择题1.在C语言的函数中,下列说法正确的是_________。
A.必须有形参
B.形参必须是变量名
C.可以有也可以没形参
D.数组名不能作形参
答案:C2.数组名作为实参传递给函数时,传递的是________。
A.该数组长度
B.该数组的元素个数
C.该数组首地址
D.该数组中各个元素的值
答案:C3.以下函数定义正确的是________。
A.
intfnSum(intiNum1,intiNum2)
B.
intfnsum(intiNum1,iNum2)
C.
intfnsum(iNum1,iNum2)
D.
intfnsum(intiNum1;intiNum2)
答案:A4.简单变量做实参时,它和对应形参之间的数据传递方式为______。
A.地址传递
B.单向值传递
C.由实参传给形参,再由形参传回给实参
D.由用户指定传递方式
答案:B5.C语言允许函数值类型默认定义,此时该函数值隐含的类型是______。
A.float
B.int
C.long
D.double
答案:B以下说法正确的是_________。
A.定义函数时,形参类型说明可以放在函数体内
B.函数能嵌套定义
C.return后边的值不能为表达式
D.如果函数值的类型与返回值的类型不一致,以函数类型为准。
答案:D7.如果未指定局
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目服务协议书违约条款
- 社区共建协议书2022
- 石子黄沙堆放协议书
- 2025-2030人工智能算法行业市场供需分析及商业投资评估规划可行性报告
- 2025-2030人工智能心理咨询平台技术与心理健康服务创新发展研究
- 2025-2030人工智能医疗影像辅助诊断行业市场现状竞争格局及投资规划
- 2025-2030人居环境产业发展及市场销售分析
- 2025-2030交通运输设备行业市场调研及车辆技术革新与产业发展前景研究
- 2025-2030交通运输规划行业市场现状供需分析及智慧交通发展策略研究
- 学校阅读档案管理制度
- QC成果-提高组合幕墙铝单板安装一次施工合格率(诏安县总医院扩建项目QC小组)
- 2025年榆林旅投集团招聘(25人)笔试考试参考题库附答案解析
- 2025年武夷学院期末题库及答案
- 2025年中国五金工具行业发展现状、进出口贸易及市场规模预测报告
- 中储粮试卷历年真题及答案
- 二十届四中全会测试题及参考答案
- 2025及未来5年中国水电解氢氧发生器市场调查、数据监测研究报告
- 解除劳动合同证明书(正式版本)共12份
- 绿色环保1000吨年废塑料回收与改性加工项目规模及运营模式可行性研究报告
- 点菜英语教学课件
- 2025年事业单位笔试-河北-河北药学(医疗招聘)历年参考题库含答案解析(5卷套题【单选100题】)
评论
0/150
提交评论