C语言程序设计第2版原莉课后部分参考答案_第1页
C语言程序设计第2版原莉课后部分参考答案_第2页
C语言程序设计第2版原莉课后部分参考答案_第3页
C语言程序设计第2版原莉课后部分参考答案_第4页
C语言程序设计第2版原莉课后部分参考答案_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目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、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.B.2.D3.c4.B5.D6.A7.D8.A9.A

项目4思考与练习参考答案一、1、D2、C3、C4、B5、A6、D7、B二、1、22、Ix=3Ix>3Ixunknow3、x三、编程题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("您输入错误")

}

}项目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)}}第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、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、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();}项目61.读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.如果未指定局部变量类型,其隐含的存储类别为_________。

A.自动(auto)

B.静态(static)

C.外部(extern)

D.寄存器(register)

答案:A8.以下叙述中不正确的是_________。

A.在不同的函数中可以使用相同名字的变量

B.函数中的形式参数是局部变量

C.在一个函数内定义的变量只在本函数范围内有效

D.在一个函数内的复合语句中定义的变量在本函数范围内有效

答案: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;}答案:intfnMax(int,int);intfnMax(int,int);returniNum2;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);}答案:A+B=9以下程序的运行结果是_________。#include"stdio.h"intfnFun(){staticintiNum=1;iNum=iNum+2;returniNum;}main(){printf("%d\n",fnFun()+fnFun());}答案:8三、编程题编写函数求1+1/2+1/3+1/4+……+1/n的值。答案:#include"stdio.h"doublesumSeries(intn){doublesum=0.0;for(inti=1;i<=n;i++){sum+=1.0/i;}returnsum;}intmain(){intn;printf("Entern:");scanf("%d",&n);printf("Sum=%f\n",sumSeries(n));return0;}2.使用函数,利用遍历数组找出全班同学成绩的最高分。答案:#include"stdio.h"intfindMaxScore(intscores[],intn){intmax=scores[0];for(inti=1;i<n;i++){if(scores[i]>max){max=scores[i];}}returnmax;}intmain(){intscores[]={85,92,78,88,95};intn=sizeof(scores)/sizeof(scores[0]);intmaxScore=findMaxScore(scores,n);printf("Thehighestscoreis%d\n",maxScore);return0;}3.使用递归方法,求Fibonacci数列的第N项。答案: #include"stdio.h" intfibonacci(intn){ if(n<=1){ returnn; } returnfibonacci(n-1)+fibonacci(n-2); } intmain(){ intn; printf("Entern:"); scanf("%d",&n); printf("Fibonacciof%dis%d\n",n,fibonacci(n)); return0; }项目8一、选择题1、设有以下结构体定义:structstudent{charchName[8];intiAge;charchSex;}stStaff;则下面的叙述不正确的是A.struct是定义结构体类型的关键字B.structstudent是用户定义的结构体类型C.stStaff是用户定义的结构体类型名D.chName、iAge和chSex都是结构体成员名答案:C

解释:stStaff

structstudent

类型的一个变量,而不是类型名。类型名是

structstudent。2、在第(1)小题中定义的结构体变量stStaff,则系统分配的内存空间字节数是A.8B.10C.11D.3答案:C

解释:charchName[8];

占用8字节,intiAge;

占用4字节(假设为32位系统),charchSex;

占用1字节,总共13字节。但由于对齐(padding)的原因,实际分配的内存可能大于13字节,但选项中只有C(11字节)最接近且合理(考虑到对齐可能减少空间使用,但通常不会减少到8字节以下)。注意,这里的答案可能依赖于编译器和平台的具体实现。3、设有以下结构体定义: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)答案:D(但注意D本身也是错误的,因为iAge未指定具体数组元素,正确形式应为&stStaff[0].iAge或类似)解释:A选项错误,因为stStaff是数组,应使用索引。B选项错误,因为iAge是int类型,不能使用%s。C选项错误,因为stStaff是数组,不能直接用于%s。D选项虽然形式上接近,但iAge应指定具体元素,如&stStaff[0].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]);后的输出结果是:答案:cde,C3、以下程序的执行结果是: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);答案:18,M项目9一、选择题1.变量的指针,其含义是指该变量的(B)。A值B地址C名D一个标志2.若有语句int*point,a=6;和point=&a;下面均代表地址的一组选项是(D)。Apoint,*&aB&*a,&a,*pointC*&point,*point,&aD&a,&*point,point3.下列不正确的定义是(A)。

Aint*p=&i,i;Bint*p,i;

Cinti,*p=&i;Dinti,*p;4.若有说明;int*p,m=5,n;以下正确的程序段的是(D)。Ap=&n;Bp=&n;scanf("%d",&p);scanf("%d",*p);Cscanf("%d",&n);Dp=&n;*p=n;*p=m;5.以下程序执行后,a的值是(B)。main(){inta,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);getch();}A4B1C0D运行时出错,无定值二、简答题1.编写一个函数,将一个3*4的二维数组矩阵转置。用指向数组的指针实现。答案:#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;}编写一个程序统计候选人得票数。设有4名候选人,以输入候选人人名方式模拟唱票,最后输出每个候选人的得票数。计算得票数的过程用函数实现。答案:#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);}指针作为函数参数,实现两个数值交换。答案:#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);}利用指针查找数列中的最大值和最小值在窗体上输入10个整数,自动查找这些数中的最大值和最小值,并显示在窗体上。答案:#include<stdio.h>voidfnMax_min(inta[],intn,int*max,i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论