《C程序设计》实验报告答案_第1页
《C程序设计》实验报告答案_第2页
《C程序设计》实验报告答案_第3页
《C程序设计》实验报告答案_第4页
《C程序设计》实验报告答案_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

PAGE34答案基本订正过错处,程序设计题部分附上源代码,基本无误,但由于时间紧迫,可能也会有小问题,仅供参考。以/**/表示程序注释。第一章C语言概述参考答案一、选择题:1-7ADCBBDD第二章算法参考答案一、选择题:1-5DBCBD二、算法设计(略)数据类型、运算符与表达式参考答案一、选择题1-5DCCDB6-10BACAA11-15BAADB16-20CBAAC21-25ADABA选择题24题题目应为:(a==b++)?++a:b++二、填空题1.6.0000002.(int)(a+10)/10.03.ch-324.(n-n/100)/10或n%100/105.(3+a*b)/(c+d)第四章最简单的C程序设计-顺序程序设计参考答案一、选择题1-5BDABB6-10BCAAD选择题6的D答案改为65534

第五章选择结构程序设计参考答案一、选择题1-5BCDCA6-10BCDCB11-15DABDD二、填空题1.switch或多分支开关控制2.fabs(x-2)<1e-63.14.45995.10200main(){main(){charc;while((c=getchar())!=’\n’){switch(c-‘1’{case0:case1:putchar(c+2);case2:putchar(c+3);break;case3:putchar(c+4);default:putchar(c+1);break;}printf(“\n”);}}结果:6453411.97,b2.a=1,b=33.该程序书上有误,正确的是:main(){charc;while((c=getchar())!=’\n’){switch(c-‘1’{case0:case1:putchar(c+2);case2:putchar(c+3);break;case3:putchar(c+4);default:putchar(c+1);break;}}printf(“\n”);}结果:645341由于程序不同,该题可以有两个答案四、程序设计1、下列程序实现从键盘接收3个数,输出最大数和最小数#include<stdio.h>main(){inta,b,c,max,min;scanf(“%d,%d,%d”,&a,&b,&c);/*键盘输入3个数a,b,c*/max=min=a;/*假设第一个数a是最大数,也是最小数/if(b>a)max=b;/*分别用a和b,c进行两次比较*/elsemin=b;if(c>max)max=c;if(c<min)min=c;printf(“\nmax=%d,min=%d”,max,min);}输入一百分制的成绩,输出他的等级,90以上“A”等,80-89为“B”等,70-79为“C”等,60-69为“D”等,60以下为“E”等。#include<stdio.h>main(){floata;intb;scanf(“%f”,&f);if(f>100||f<0)printf(“Error\n”);else{b=f/10;switch(b){case10:case9:printf(“A\n”);break;case8:printf(“B\n”);break;case7:printf(“C\n”);break;case6:printf(“D\n”);break;default:printf(“E\n”);}}}第六章循环控制参考答案一、选择题:1-5DCBAC6-10CCDBD程序填空1.a%brr!=0或r2.y=1x=0x=x+j三、阅读程序,写出运行结果1,4,2*1*22*333*765*************************四、程序设计编写程序打印以下图案(必须使用循环结构,直接输出不给分)1234567890#include<stdio.h>main(){inti,j=1,s=1;for(i=1;i<=4;i++)/*控制打印4行*/ {for(j=1;j<=i;j++)/*控制每行打印的数字*/ {printf("%d",s%10);/*不直接打印s,而是打印s%10,是因为最后一个数是0,而不是10*/s++;} printf("\n");}}求出10到100内能同时被2、3、7整除的数,并输出。#include<stdio.h>main(){inti;for(i=10;i<=100;i++)if((i%2==0)&&(i%3==0)&&(i%7==0))printf(“%4d”,i);或者if(i%42==0)printf(“%4d”,i);也可}从键盘输入若干学生成绩,找出并输出最高和最低成绩,当输入成绩为负值是结束。main(){intmax,min,score;max=0;min=100;/*假设最高分和最低分分别是0,100*/scanf("%d",&score);/*输入第一个学生的成绩*/while(score>=0){if(score>max)max=score;if(score<min)min=score;scanf("%d",&score);/*输入下一个学生的成绩*/}printf("\nmax=%d,min=%d",max,min);}计算1~500之间(即从1到500)的全部"完数"之和。所谓"完数"是指一个数,它是所有因子之和等该数#include<stdio.h>main(){inti,j,s,sun=0;for(i=1;i<=500;i++){for(j=1,s=0;j<=i/2;j++)/*寻找数i的因子,只要找到i的一半即可*/if(i%j==0)s+=j;/*若j是i的因子,把j加到s上*/if(s==i)sum+=i;/*若s等于i,则说明i是完数*/}printf(“%d”,sum);}"百马百担"问题。有100匹马驮100担货,每匹大马每次驮3担,每匹中马每次驮2担,2匹小马每次分驮1担。编写程序求大、中、小马的匹数(大、中、小马的匹数均不得为0)。#include<stdio.h>main(){inta,b,c;for(a=1;a<33;a++)for(b=1;b<50;b++)for(c=1;c<100;c++)if((a+b+c=100)&&(6*a+4*b+c=200))printf(“%4d%4d%4d\n”,a,b,c);}求s=2/1-3/2+5/3-8/5+...前20项的值(略)main(){floats=0.0,f=1.0;inti=1,j=2,k,t;for(k=1;i<=20;k++)/*控制计算20项*/ {s=s+(float)j/i*f; t=j; j=i+j; i=t;/*后项的分母i等于前项分子j,后项分子j等于前项分子i+分母j*/ f=-f;}/*利用f取反,实现一正一负计算*/printf("%f",s);}输入一行字符(以回车结束输入),统计其中数字、字母和其它字符的个数。#include<stdio.h>main(){charc;intletter=0,space=0,digit=0,other=0;while((c=getchar())!=’\n’)/*输入的不是回车就继续统计*/{if((c>=’a’&&c<=’z’)||(c>=’A’&&c<=’Z’))letter++;elseif(c==’‘)space++;elseif(c>=’0’&&c<=’9elseoher++;}printf(“letter=%d,space=%d,digit=%d,other=%d”,letter,space,digit,other);}第七数组参考答案一、选择题:1-5ADCDB6-10BBBBC11-15BCCCC二、程序填空__0___a[i][4-i]=1printf(“\n”)三、写出程序运行的结果【程序1】a[0],1a[2],2a[4],2a[6],2【程序2】7四、程序设计将一个字符串中的所有数字字符组合成一个整数(如“a1bc23d4”#include<stdio.h>main(){longints=0;inti=0;chara[10];gets(a);for(i=0;a[i]!=’\0’if(a[i]>=’0’&&a[i]<=’9’)s=s*10+a[i]-‘printf(“%ld”,s);}将输入的十进制数转换为二进制数输出#definem2/*可修改m的值,把十进制数转成2,8,16进制*/#include<stdio.h>main(){chara[100];inti=0,temp;longintd;scanf(“%ld”,&d);while(d!=0){temp=d%m;if(temp>=10)a[i]=temp-10+’A’;elsea[i]=temp+’0’d=d/m;i++;}for(i--;i>=0;i--)printf(“%c”,a[i]);}计算200以内的其平方具有回文性质的正整数输出。例如11^2=121,111^2=12321都是满足条件的正整数。#include<stdio.h>intflag(intx)

{inty;longs;

s=x*x;

y=0;

while(s!=0)

{y=y*10+s%10;

s=s/10;}

if(y==x*x)return1;

elsereturn0;

}

main()

{intn;

for(n=1;n<200;n++)

if(flag(n))printf("n=%3d,n*n==%ld\n",n,n*n);

}有一个3×4的矩阵,要求编程以求出其中值最大的那个元素,以及它所在的行号和列号。(略)首先定义二位数组的首元素a[0][0]为最大值,记录行号=0,列号=0,然后用两层循环依次搜遍所有的元素,并修改行列号即可#include<stdio.h>main(){inta[3][4],I,j,max;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);/*键盘输入数组的值*/max=a[0][0];/*假设头元素最大*/row=0;col=0;for(i=0;i<4;i++)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];row=i;col=j;}printf(“%d,%d,%d”,row,col,max);}求一个3×4的矩阵的转置矩阵。(略)见书138页例题7.4类似#include<stdio.h>main(){inti,j,a[3][4],b[4][3];for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);/*键盘输入3×4的数组值*/for(i=0;i<3;i++)for(j=0;j<4;j++)b[j][i]=a[i][j];/*数组行号和列号交换,完成数组转置*/for(i=0;i<4;i++)/*按行输出转置后的数组b*/{for(j=0;j<3;j++)printf(“%4d”,b[i][j]);printf(“\n”);}}

第八章函数参考答案一、选择题:1-5ADAAA6-10CCCAA二、程序填空【程序1】s,cs[i]s[j]=’\0’三、写出程序运行的结果:【程序1】51【程序2】16【程序3】81012【程序4】10【程序5】1412【程序6】010111212【程序7】4334四、程序设计根据以下框架编写程序,用递归函数按下列公式计算并输出s(n)=12+22+32+…n2递归计算公式:s(n)=s(n-1)+n*n#include<stdio.h>floats(int);voidmain(){intn;floatsum;scanf(“%d”,&n);sum=s(n);printf(“%f”,sum);}floats(intn){floats;if(n==1)s=1;elses=n*n+s(n-1);return(s);}编写字符串拷贝函数,功能是将str2字符串复制到str1字符串中(即功能与C中的strcpy标准库函数相同)#include<stdio.h>#include"string.h"voidstrcomp(chars1[],chars2[]){inti=0;for(i=0;s2[i]!=’\0’s1[i]=s2[i];s1[i]=’\0’}main(){charstr1[100],str2[100];gets(str1);gets(str2);strcomp(str1,str2);puts(str1);}输出100~200之间的全部素数的和(用一函数来判断一个数是否为素数)#include<stdio.h>#include<math.h>

intflag(intx)

{inti,f;for(i=2;i<sqrt(x);i++)if(x%i==0){f=0;break;}if(i>sqrt(x))f=1;return(f);

}

main()

{intn,s=0;

for(n=101;n<200;n=n+2)

if(flag(n))s+=n;printf(“%d”,s);

}第九章预处理命令参考答案一、选择题:1-5BADAD6-10DDBBA第十章指针参考答案一、选择题:1-5CDCAC6-10ACDBB11-15DDBBC16-20ADDAA21-25DBBAA二、写出程序运行的结果:【程序1】2,0【程序2】computer【程序3】c_proargmleveltest【程序4】good【程序5】10987654321【程序6】abcfg【程序7】abcbcc三、程序填空【程序1】①str+strlen(str)-1②t==0或!t③huiwen(str)四、程序设计不使用strcpy()函数,将字符串a复制到字符串b中去。#include<stdio.h>#include"string.h"main(){chara[100],b[100],*pa,*pb;gets(a);gets(b);for(pa=a,pb=b;*pa!=’\0’;pa++,pb++*pb=*pa;*pb=’\0’puts(b);}删除字符串中的所有的逗号。(类似于实验报告上的实验6的第4题)注意:实验包括上用的是字符串数组的下标来控制,这里用的是字符数组的指针。#include<string.h>main(){chars[100];char*p,*q;gets(s);/*键盘输入一个字符串*/for(p=s;*p='\0';){if(*p==’,’)for(q=p;*q!=’\0’;q++*q=*(q+1);/*是逗号,则将后续字符向前挪*/elsep++;/*不是,则比较下一个字符*/}*p='\0';/*给字符串尾部加‘\0‘,控制输出结束*/puts(s);}将数组中的各元素逆序存放#include<stdio.h>#include"string.h"main(){chars[100];char*p1,*p2,c;gets(s);p1=s;p2=s+strlen(s)-1;while(p1<p2){c=*p1;*p1=*p2;*p2=c;交换首尾p1++;p2--;}puts(s);}第十一章结构体参考答案一、选择题:1-5BCBCC6-10CCDCB二、写出下列程序运行的结果【程序1】LiQing:19【程序2】13431WangHua:21ZhaoPing:20三、程序设计(略)第十二章位运算参考答案一、选择题:1-6DCDABB第十三章文件参考答案一、选择题1-5CCCDC6-10ABBCC二、程序设计(略)

实验报告的参考答案由于时间紧迫,可能会有小问题。仅供参考。实验2数据类型、运算符和表达式1、要将“China”译成码,译码规律是:用原来字母后面的第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3、c4、c5分别变为'G'、'1'、'm'、'r'、'e',并输出。#include"string.h"main(){charstr[20];/*定义存放字符的数组,这样程序比较简单*/inti;gets(str);for(i=0;str[i]!='\0';i++){if((str[i]>='a'&&str[i]<='v')||(str[i]>='A'&&str[i]<='V'))str[i]+=4;elseif((str[i]>='a'&&str[i]<='z')||(str[i]>='W'&&str[i]<='Z'))str[i]-=22;}puts(str);}实验3最简单的C程序设计2、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据(r,h),输出计算结果。输出时要有文字说明,取小数点后两位数字。#definepi3.1415926#include<stdio.h>main(){floatr,h,l,s1,s2,v1,v2;scanf(“%f,%f”,&r,&h);l=2*pi*r;s1=pi*r*r;s2=4*pi*r*r;v1=3.0/4*pi*r*r*r;v2=pi*r*r*h;printf(“%.2f,%.2f,%.2f,%.2f,%.2f”,l,s1,s2,v1,v2);}3.编程序,输入一个华氏温度,要求输出摄氏温度。公式为输出时要有文字说明,取2位小数。(注意:在什么情况下为实型除法,这里不是指整型除法哦!)main(){floatc,F;scanf(“%f”,&F);c=5.0/9*(F-32);printf(“%.2f”,c);}实验4逻辑结构程序设计1.有一函数:要求用scanf函数输入x的值,求y值并用printf函数输出y。#include<stdio.h>main(){intx,y;scanf(“%d”,&x);if(x<1)y=x;elseif(x<10)y=2*x-1;elsey=3*x-11;printf(“%d”,y);}2.给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。#include<stdio.h>main(){longx;inta,b,c,d,e;scanf(“%ld”,&x);a=x/10000;b=x%10000/1000;c=x%1000/100;d=x%100/10;e=x%10;if(a!=0)printf(“xis5number:%d%d%d%d%d,%d%d%d%d%d”,a,b,c,d,e,e,d,c,b,a);elseif(b!=0)printf(“xis4number:%d%d%d%d,%d%d%d%d”,b,c,d,e,e,d,c,b);elseif(c!=0)printf(“xis3number:%d%d%d,%d%d%d”,c,d,e,e,d,c);elseif(d!=0)printf(“xis2number:%d%d,%d%d”,d,e,e,d);elseprintf(“xis1number:%d,%d”,e,e);}循环逆序打印的程序如下:#include<stdio.h>main(){longx;intnumber=0;scanf(“%ld”,&x);while(x!=0){printf(“%d”,x%10);x=x/10;number++);}printf(“xis%dnumber”,number);}3.输入一个日期(含年、月、日),编程序输出该日期是该年度中的第几天。要求:①输入格式为年/月/日;②程序应当对不合法的输入作必要的处理。如:·月份超过12,日期超过31·年月日为负数。#include"stdio.h"main(){intyear,month,day,nday,n;printf("InputYear/Month/Day:");scanf("%d/%d/%d",&year,&month,&day);if(year<=0||month<=0||day<=0||month>12||day>31)printf("Error\n");elseif((month==4||month==6||month==9||month==11)&&day>30)printf("Error\n");else{if(year%4==0&&year%100!=0||year%400==0)n=1; elsen=0; if((n==1&&month==2&&day>29)||(n==0&&month==2&&day>28))printf("Error\n"); else{switch(month) {case1:nday=day;break; case2:nday=day+31;break;case3:nday=day+59;break;case4:nday=day+90;break;case5:nday=day+120;break;case6:nday=day+151;break;case7:nday=day+181;break;case8:nday=day+212;break;case9:nday=day+242;break;case10:nday=day+273;break;case11:nday=day+303;break;case12:nday=day+334;break;} if(n==1&&month>2)nday++; printf("Thedayisthe%doftheyear\n",nday); }} }上面程序如果用数组,程序会简单一些,如下:#include"stdio.h"main(){intyear,month,day,nday=0,n,i;inta[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};/*定义一个数组存放1-12月份每个月份的天数*/printf("InputYear/Month/Day:");scanf("%d/%d/%d",&year,&month,&day);if(year<=0||month<=0||day<=0||month>12||day>31)printf("Error\n");elseif((month==4||month==6||month==9||month==11)&&day>30)printf("Error\n");else{if(year%4==0&&year%100!=0||year%400==0)n=1; elsen=0; if((n==1&&month==2&&day>29)||(n==0&&month==2&&day>28))printf("Error\n"); else{for(i=0;i<month;i++) nday+=a[i]; nday+=day; /*可以数组累加统计天数,不必写switch语句*/if(n==1&&month>2)nday++; printf("Thedayisthe%doftheyear\n",nday); }} }4.下列程序实现从键盘接收3个数,输出最大数和最小数#include<stdio.h>main(){inta,b,c,max,min;scanf(“%d,%d,%d”,&a,&b,&c);/*键盘输入3个数a,b,c*/max=min=a;/*假设第一个数a是最大数,也是最小数/if(b>a)max=b;/*分别用a和b,c进行两次比较*/elsemin=b;if(c>max)max=c;if(c<min)min=c;printf(“\nmax=%d,min=%d”,max,min);}实验5循环控制1.输入两个正整数m和n,求它们的最大公约数和最小公倍数。main(){intn,m,i,t;scanf("%d,%d",&n,&m);if(n<m)t=n;elset=m;/*使得t等于m,n中的小数*/for(i=t;i>=1;i--)/*从小数开始,一个个试探,如果一个数能同时被m,n整除,则一定是最大公约数*/if(n%i==0&&m%i==0)break;printf("%d,%d",i,n*m/i);}转折求余法,如下:#include<stdio.h>main(){intn,m,a,b,r;scanf("%d,%d",&n,&m);if(n<m){t=n;n=m;m=t;}a=n;b=m;/*使得大数n给a,小数m给b*/while(b!=0){r=a%b;a=b;b=r;}printf("%d,%d",a,n*m/a);}2.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。#include<stdio.h>main(){inti,s=1;for(i=9;i>=1;i--)s=2*(s+1);printf(“%d”,s);}3.编程计算1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+n)的值。(本题中的n从键盘输入,且假设在20以内)#include<stdio.h>main(){inti,s=0,t=0,n;scanf(“%d”,&n)for(i=1;i<=n;i++){t=t+i;s=s+t;}printf(“%d”,s);}4.试编程:找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例52=25,5在25的右边,5是同构数;252=625,25在625的右边,25是同构数。#include<stdio.h>main(){inti;for(i=1;i<=99;i++)if(i*i%10==i||i*i%100==i)printf(“%4d”,i);}5.编程求100~300之间的全部素数的和#include<stdio.h>#include<math.h>main(){intn,i,k,s=0;for(n=101;n<300;n=n+2){k=sqrt(n);for(i=0;i<=k;i++)if(n%i==0)break;if(i>k)s=s+n;}printf(“%d”,s);}课后思考题利用下面公式求s的值(求20项之和)

s=1/(1*2*3)-1/(2*3*4)+1/(3*4*5)-1/(4*5*6)+...+1/(19*20*21)-1/(20*21*22)#include<stdio.h>main(){inti,k;floats=0.0,f=1.0;for(i=1;i<=20;i++){k=i*(i+1)*(i+2);s=s+f/k;f=-f;}printf(“%f”,s);}一个素数加上1000以后是43的倍数,求满足这个条件的最小素数。#include<stdio.h>#include<math.h>main(){intn,i,k;for(n=2;;n++){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>k&&(n+1000)%43==0){printf(“%d”,n);break;}}}有2个小于40的正整数a和b,a的平方与b的和是1053,b的平方与a的和是873,请编程求满足条件的a和b的值。(提示:满足条件的a,b的值唯一)#include<stdio.h>main(){inta,b;for(a=1;a<=40;a++)for(b=1;b<=40;b++)if(a*a+b==1053&&a+b*b==873)printf(“%d,%d”,a,b);}一个自然数除以2余1,除以3余2,除以4余3,除以5余4,除以7余5,求满足这个条件的最小的自然数?#include<stdio.h>main(){inti;for(i=1;;i++)if(i%2==1&&i%3==2&&i%4==3&&i%5==4&&i%7==5){printf(“%d”,i);break;}}求所有的"水仙花数"之和。所谓"水仙花数"是指一个三位数,其各位数字的立方和等于该数本身。例如153是一个"水仙花数",因为:153=1*1*1+5*5*5+3*3*3。#include<stdio.h>main(){inti,a,b,c,s=0;for(i=100;i<=999;i++){a=i/100;b=i%100/10;c=i%10;if(a*a*a+b*b*b+c*c*c==i)s=s+i;}prinf(“%d”,s);}分别计算500到1300之间所有既能被7整除又能被13整除的奇数和偶数之和。#include<stdio.h>main(){inti,s1=0,s2=0;for(i=500;i<=1300;i++){if(i%7==0&&i%13==0)if(i%2==0)s1=s1+i;/*分奇数和偶数分别讨论*/elses2=s2+i;}prinf(“%d,%d”,s1,s2);}统计用0-9之间不同的3个数构成一个三位数有多少种方法#include<stdio.h>main(){inta,b,c,s=0;for(a=1;a<=9;a++)for(b=0;b<=9;b++)for(b=0;b<=9;b++)if(a!=b&&a!=c&&b!=c)s++;printf(“%d”,s);}实验6数组已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入到数组中,要插入的数用scanf函数输入。#include<stdio.h>main(){inta[16]={3,5,6,17,23,41,45,54,68,90,102,123,156,178,195};/*多定义一个元素,用于放插入的数*/intx,i,j;sanf(“%d”,&x);/*键盘输入要插入的数据*/for(i=0;i<15;i++)if(a[i]>x)break;/*找到要插入的位置i*/for(j=14;j>=i;j--)a[j+1]=a[j];/*数组从尾部开始到位置i,所有的数据向后拖动*/a[i]=x;/*输入数据插入到位置i上*/for(i=0;i<16;i++)printf(“%4d”,a[i]);/*打印出新的数组*/}找出一个二维数组的“鞍点”的值及位置,即该位置上的元素在该行上最大,在该列上最小。若没有鞍点,则输出“无鞍点”。#defineM3#defineN4/*定义数组的M行,N列*/#include<stdio.h>main(){inta[M][N];inti,j,k,max,f,f2,col;f2=0;/*假设该数组没有鞍点*/for(i=0;i<M;i++)for(j=0;j<N;j++)scanf(“%d”,&a[i][j]);/*键盘输入数组各个元素*/for(i=0;i<M;i++)/*按行去查找鞍点*/{max=a[i][0];/*假设每行的首元素为最大值,并记录下列号0*/col=0;for(j=0;j<N;j++)if(a[i][j]>max){max=a[i][j];col=j;}/*找到每行的最大值,并记录下此时的列号col*/for(k=0,f=1;k<M&&f==1;k++)if(max>a[k][col])f=0;/*f=1,假设此时的最大值就是该列的最小值,然后顺序找完该列所有元素,如果找到一个数小于max,即不再往下查找*/if(f==1){printf(“%drow%dcol%disandian\n”,i,col,max);/*所有元素都找完,也没有找到一个小于max的数,则说明假设成立,即max就是鞍点*/f2=1;/*f2=1,标志鞍点找到*/}}if(f2==0)printf(“Noandian\n”);/*所有行都找完,f2=0,则表示无鞍点*/}以下程序判断输入的字符串是否"回文"(即顺读和倒读都一样,例如:ABCBA,字符串首部和尾部的空格不参与比较),是输出“yes”,否则输出“no”。#include<stdio.h>#include<string.h>main(){charstr[20];inti,j;gets(str);/*键盘输入一个字符串*/i=0;j=strlen(str)-1;/*i指向串头,j指向串尾*/while(str[i]==’‘)i++;while(str[j]==’‘)j--;/*去掉字符串头尾空格的影响*/while(i<j&&str[i]==str[j]){i++;j--;}/*头尾字符比较,相等就继续,复制停止循环*/if(i>=j)printf(“Yes”);elseprintf(“No”);}删除字符串s(从键盘输入)中的所有数字字符,然后输出#include<stdio.h>#include<string.h>main(){charstr[20];inti,j;gets(str);/*键盘输入一个字符串*/for(i=0;str[i]!='\0';){if(str[i]>='0'&&str[i]<='9')for(j=i;str[j]!='\0';j++)str[j]=str[j+1];/*是数字,则将后续字符向前挪*/elsei++;/*不是数字,则比较下一个字符*/}str[i]='\0';/*给字符串尾部加‘\0‘,控制输出结束*/puts(str);}另一方法:#include<stdio.h>#include<string.h>main(){chars1[20],s2[20];/*多开辟一个和原字符串s1同样大小的串s2*/inti,j=0;gets(s1);/*键盘输入一个字符串*/for(i=0;s1[i]!='\0';i++)if(!(s1[i]>='0'&&s1[i]<='9'))s2[j++]=s1[i];/*不是数字,则复制到s2串中*/s2[j]=’\0’/*给字符串尾部加‘\0‘strcpy(s1,s2);/*将结果串s2复制到s1中*/puts(s1);}5.输入一串字符,以‘?’结束,统计各字母出现的次数,并按字母出现的多少输出,不出现的字母不输出。#include<stdio.h>#include“string.h”{charstr[100];/*开辟一个字符数组用于存放输入的字符串,长度<100*/inti,b[26]={0};/*26个字母出现次数的统计,初始值为0*/gets(str);/*键盘输入一个字符串*/for(i=0;str[i]!=’?’;i++)if(str[i]>=’A’&&str[i]<=’Z’)b[str[i]-‘A’]++;for(i=0;i<26;i++)if(b[i]!=0)printf(“%c%d\n”,i+’A’,b[i]);}课后思考题用冒泡法对输入的10个整数进行排序假设排序是由小到大#include<stdio.h>main(){inta[10],i,j,t;for(i=0;i<10;i++)scanf(“%d”,&a[i]);/*键盘输入数组各个元素,各元素之间用空格隔开*/printf(“\n”);for(j=0;j<9;j++)/*10个数进行9次循环*/for(i=0;i<9-j;i++)/*在每次循环中,进行9-j次比较*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}/*相邻两数比较*/for(i=0;i<10;i++)printf(“\4d”,a[i]);}2、用选择法对输入的10个整数进行排序#include<stdio.h>main(){inta[10],i,j,t;for(i=0;i<10;i++)scanf(“%d”,&a[i]);/*键盘输入数组各个元素,各元素之间用空格隔开*/printf(“\n”);for(i=0;i<9;i++)/*10个数进行9次循环*/{k=i;/*每次循环都认为第一个取到的数最小*/for(j=i+1;j<10;j++)if(a[k]>a[j])k=j;/*把该数后后面的所有数比较,记录下最小数的位置k*/if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}/*最小数和第一个数交换*/for(i=0;i<10;i++)printf(“\4d”,a[i]);}3、从键盘输入10个整数存入数组a中,再将数组中的元素逆序存放后输出。#include<stdio.h>main(){inta[10],i,t;for(i=0;i<10;i++)scanf(“%d”,&a[i]);/*键盘输入数组各个元素,各元素之间用空格隔开*/printf(“\n”);for(i=0;i<=4;i++){t=a[i];a[i]=a[9-i];a[9-i]=t;}/*首尾交换*/for(i=0;i<10;i++)printf(“\4d”,a[i]);}有15个有序数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。要找的数用scanf函数输入。假设该有序数组是从小到大#include<stdio.h>main(){inta[15],i,j,m,d;for(i=0;i<15;i++)scanf(“%d”,&a[i]);/*键盘输入有序数组*/i=0;j=14;/*i指向数组头,j指向数组尾*/scanf(“%d”,&d)/*键盘输入要查找的数d*/while(i<=j){m=(i+j)/2;/*头和尾的一半*/if(d<a[m])j=m-1;elseif(d>a[m])i=m+1;else{printf(“%d,%d”,m,a[m]);break;}}if(i>j)prinf(“No”);}分别将有序数组a和b中的数归并到c数组中(C数组中仍然有序)。#include<stdio.h>main(){inta[10],b[10],c[20];inti,j,k;printf(“Input10nubers:\n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);/*键盘输入有序数组a*/printf(“Inputanother10nubers:\n”);for(i=0;i<10;i++)scanf(“%d”,&b[i]);/*键盘输入有序数组b*/i=j=k=0;while(i<10&&j<10)/*a,b数组比较,将小数写入数组c*/{if(a[i]<b[j])c[k++]=a[i++];elsec[k++]=b[j++];}while(i<10)/*若a数组没写完,则继续写入数组c*/c[k++]=a[i++];while(j<10)/*若b数组没写完,则继续写入数组c*/c[k++]=b[j++];printf(“Outputnewnubers:\n”);for(k=0;k<20;k++)printf(“%4d”,c[k];);}编程输出以下的杨辉三角形(输出前7行)。1111211331第0列为1,主对角线a[i][i]=1;146416=3+3;即a[i][j]=a[i-1][j-1]+a[i-1][j]151010511615201561#include<stdio.h>main(){inta[7][7];inti,j;for(i=0;i<7;i++){a[i][0]=1;a[i][i]=1;}/*第0列为1,主对角线a[i][i]=1*/for(i=2;i<7;i++)for(j=1;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<7;i++){for(j=0;j<=i;j++)printf(“%4d”,a[i][j]);printf(“\n”);}}实验7函数1.求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。①不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。#include<stdio.h>gcd(inta,intb){intt;if(a<b){t=a;a=b;b=t;}while(b!=0){t=a%b;a=b;b=t;}reurn(a);}gxd(inta,intb,intg){return(a*b/g);}voidmain(){intx,y;inti,j;scanf("%d%d",&x,&y);i=gcd(x,y);j=gxd(x,y,i);ptintf("%dand%dgcdis%d,gxdis%d\n",x,y,i,j);}②用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。#include<stdio.h>inti,j;/*定义i,j为全局变量,分别保存公约数和公倍数*/gcd(inta,intb){intt;if(a<b){t=a;a=b;b=t;}while(b!=0){t=a%b;a=b;b=t;}i=a;}gxd(inta,intb,intg){j=a*b/i;}voidmain(){intx,y;scanf("%d%d",&x,&y);gcd(x,y);gxd(x,y);ptintf("%dand%dgcdis%d,gxdis%d\n",x,y,i,j);}2.递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。N#include“stdio.h”voidconvert(longn){inti;if((i=n/10)!=0)convert(i);putchar(n%10+’0’}main(){longnumber;scanf(“%ld”,&number);if(number<0){putchar(‘-‘);number=-number;}covert(number);}写一函数,输入一个两位的十六进制数,输出相应的十进制数。下面的程序改动了一下,不仅可以输入两位16进制数,可以输入多位的16进制数。#include<stdio.h>#include“string.h”longhex(charb[]){inti=0,t;longsum=0;for(i=0;b[i]!=’\0’{if(b[i]>=’0’&&b[i]<=’9’)t=b[i]-‘elseif(b[i]>=’a’&&b[i]<=’f’)t=b[i]-‘a’+10;elseif(b[i]>=’A’&&b[i]<=’F’)t=b[i]-‘A’+10;sum=sum*16+t;}return(sum);}main(){chara[20];longd;gets(a);printf(“%ld”,hex(a););}验证歌德巴赫猜想(任何充分大的偶数都可以由两个素数之和表示)。用一个函数进行判定素数,再用此函数将一个偶数用两个素数之和表示,主函数中输出4—100之间的所有偶数用两个素数之和表示:子函数1:#include<stdio.h>#include“math.h”intflag(intn)/*判断n是不是素数,是返回1*/{inti,k,flag;k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0){f=0;break;}if(i>k)f=1;return(f);}子函数2:voidoutput(intn)/*将一个偶数拆成两个素数和*/{inti;for(i=2;i<n/2;i++)if(flag(i)==1&&flag(n-i)==1)prinf(“%d=%d+%d”,n,i,n-i);}main(){inti;for(i=4;i<=100;i=i+2){print(i);/*将i用两个素数之和表示*/printf("\n");}}思考题:用递归的方法求n!。#include<stdio.h>longfacn(intm){longs;if(m<0){printf(“Error”);s=-1;}elseif(m==0||m==1)s=1;elses=m*facn(m-1);return(s);}main(){intn;longd;scanf(“%d”,&n);d=facn(n);if(s!=-1)printf(“%d!=%ld”,n,d);}自己设计一mystrcat()函数,实现将字符串b连接到字符串a的后面。#include<stdio.h>#include"string.h"voidmystrcat(charstr1[],charstr2[]){inti,j;for(i=strlen(str1),j=0;str2[j]!='\0';j++,i++)str1[i]=str2[j];str1[i]='\0';puts(str1);}main(){chara[50],b[20];gets(a);gets(b);mystrcat(a,b);}输出100~200之间的全部素数的和(用一函数来判断一个数是否为素数)#include<stdio.h>#include“math.h”intflag(intn)/*判断n是不是素数,是返回1*/{inti,k,flag;k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0){f=0;break;}if(i>k)f=1;return(f);}main(){intm,s=0;for(m=100;m<200;m=m+2)if(flag(m)==1)s=s+m;printf(“%d”,s);}4用递归的方法计算F(n)(n给定,F(n)函数定义如下:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2))。#include<stdio.h>longfacn(intm){longs;if(m<=0){printf(“Error”);s=-1;}elseif(m==1||m==2)s=1;elses=facn(m-1)+facn(m-2);return(s);}main(){intn;longd;scanf(“%d”,&n);d=facn(n);if(d!=-1)printf(“F(%d)=%ld”,n,d);}实验8指针实验9结构体和公用体省考中较少考程序编程题,这里省略。2.将一个3×3的矩阵转置,用一函数实现之。要求:在主函数中用scanf函数输入矩阵元素,用数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出已转置的矩阵。#include<stdio.h>voidchange(int(*p)[3]){inti,j,t;for(i=0;i<3;i++)for(j=0;j<i;j++){t=*(p[i]+j);/*a[i][j]和a[j][i]交换,用指针实现*/ *(p[i]+j)=*(p[j]+i); *(p[j]+i)=t; }}main(){ints[3][3],i,j;for(i=0;i<3;i++){for(j=0;j<3;j++)/*按行输入数组元素,每行3个

温馨提示

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

评论

0/150

提交评论