C语言常用算法.docx
《C语言常用算法.docx》由会员分享,可在线阅读,更多相关《C语言常用算法.docx(23页珍藏版)》请在冰豆网上搜索。
C语言常用算法
一、累加累乘
基本知识:
S=S+X累加0
X=X+1计数0
T=T*X累乘求Xn1
T=T*I累乘求N!
1
应用:
级数求和
1.输入x、n后输出下列算式的值。
(次数控制)
[程序1]
#include
voidmain()
{floats,t,x,t1=1.0,t2=1.0;inti,n;
scanf("%f%d",&x,&n);
s=0,t=-1;
for(i=1;i<=n;i++){
t1=t1*x;
t2=t2*i;
t=-t;s=s+t*t1/t2;}
printf(“%f”,s);
}
[程序2]
floatf1(floatx,intn)
{floaty=1.0;intk;
for(k=0;ky=y*x;returny;}longf2(intn){longm=1;intk;for(k=1;k<=n;k++)m=m*k;returnm;}voidmain(){floats,t,x;inti,n;scanf("%f%d",&x,&n);s=0,t=-1;for(i=1;i<=n;i++){t=-t;s=s+t*f1(x,i)/f2(i);}printf(“%f”,s);}二、整除性基本知识:x%y==0(int)(x/y)==x/yfmod(x,y)==0应用:1.素数(质数)#include#includevoidmain(){intm,i,n=0;do{scanf(“%d”,&m);n=sqrt(m);for(i=2;i<=n;i++)if(m%i==0)break;if(i>n)printf(“%d”,m);}while(m!=0);/*输入0结束*/}[素数2]#include#includeintprime(intm){intk,p;p=sqrt(m);for(k=2;k<=p;k++)if(m%k==0)return0;return1;}voidmain(){intm,i,n=0;do{scanf(“%d”,&m);if(prime(m))printf(“%d是素数.”,m);elseprintf(“%d不是素数.”,m);}2.水仙花数:若某数等于各位数字的立方和,则称该数为水仙花数for(i=100;i<=999;i++){a=i%10;b=i/10%10;c=i/100;if(a*a*a+b*b*b+c*c*c==i)printf(“%d”,&i);}输入一个整数判断是否是水仙花数.scanf(“%d”,&m);t=0;n=m;while(n>0){k=n%10;t=t+k*k*k;n=n/10;}if(m==t)printf(“%d是水仙花数.”,m);[水仙花数]#includeintf(intm){intk,n,t;n=m;t=0;while(n>0){k=n%10;t=t+k*k*k;n=n/10;}if(m==t)return1;elsereturn0;}voidmain(){intm;do{scanf(“%d”,&m);if(f(m))printf(“%d是水仙花数.”,m);elseprintf(“%d不是水仙花数.”,m);}while(m!=0);}3.完数:某数等于其诸因子之和则该数为完数,如6=1+2+3,28=1+2+4+7+14则6、28就是完数。#include#includevoidmain(){intn,i,s;for(n=6;n<=1000;n++){s=0;for(i=1;i<=n/2;i++)if(n%i==0)s+=i;if(n==s)fprintf(p,"%6d",n);}4.数位截取:输入一个长整型数,求各位数字的平方和#includevoidmain(){intdigit;longin,s;scanf(“%ld”,in);if(in<0)in=-in;s=0;while(in>0){digit=in%10;s=s+digit*digitin=in/10;}printf(“sum=%ld\n”,s);}5.最大公约数、最小公倍数#includevoidmain(){intm,n,k,t,p;scanf("%d%d",&m,&n);if(m>n){k=m;p=n;}else{k=n;p=m;}while((t=(k%p))!=0){k=p;p=t;}printf("gongyueshu=%d\n",p);printf("gongbeishu=%d\n",m*n/p);}6.亲密数对:说明:若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。如:220、284是1对亲密数,284、220也是1对亲密数。#includevoidmain(){inta,b,c,i;for(a=6;a<=5000;a++){b=c=0;for(i=1;iif(a%i==0)b=b+i;for(i=1;iif(b%i==0)c=c+i;if(a==c&&a!=b)printf("%6d,%6d\n",a,b);}}方法2:用函数#includelongs(intm){intj;longsum=0;for(j=1;j<=m/2;j++)if(m%j==0)sum=sum+j;returnsum;}voidmain(){inta,b;longc1,c2;scanf(“%d%d”,&a,&b);c1=s(a);c2=s(b);if((a!=b)&&(c1==b)&&(c2==a))printf("%6d,%6d\n",a,b);}三、最大最小1.从输入的若干个正数中选出最小数#includevoidmain(){floatx,min;scanf("%f",&x);min=x;while(x>=0){if(xmin=x;scanf("%f",&x);}printf("theminiumnumberis%f",min);}2.编制函数,其功能是在float类型1维数组中查找最大值、最小值,并将它们返回到调用程序。#includevoidmax_min(intx[],intn,int*max,int*min){inti;*max=x[0];*min=x[0];//max=&x[0],min=&x[0];for(i=1;i{if(*max*max=x[i];if(x[i]<*min)*min=x[i];}}voidmain(){intx[10],i,min,max;for(i=0;i<10;i++)scanf("%d",x+i);max_min(x,10,&max,&min);printf("MAX=%dMIN=%d\n",max,min);}四、双重循环1.求(n由输入决定)#includevoidmain(){inti,j,n;longintt=1,sum=0;scanf("%d",&n);for(i=1;i<=n;i++){t=1;for(j=1;j<=2*i-1;j++)t=t*j;sum=sum+t;}printf("n!=%ld",sum);}2.输入一个3*6的二维整型数组数据,输出其中最大值及其所在行列下标。#includevoidmain(){inta[3][6],i,j,m,n,max;for(i=0;i<3;i++)for(j=0;j<6;j++)scanf("%d",&a[i][j]);max=a[0][0];for(i=0;i<3;i++)for(j=0;j<6;j++)if(a[i][j]>max){max=a[i][j];m=i;n=j;}printf("themaxnumis%d,row%dline%d\n",max,m,n);}3.鞍点问题:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小#defineN10#defineM10voidmain(){inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;scanf("%d",&n);scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[n][m]);for(i=0;i{for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
y=y*x;
returny;
longf2(intn)
{longm=1;intk;
for(k=1;k<=n;k++)
m=m*k;
returnm;
{floats,t,x;inti,n;
for(i=1;i<=n;i++)
{t=-t;s=s+t*f1(x,i)/f2(i);}
二、整除性
x%y==0
(int)(x/y)==x/y
fmod(x,y)==0
1.素数(质数)
{
intm,i,n=0;
do{
scanf(“%d”,&m);
n=sqrt(m);
for(i=2;i<=n;i++)
if(m%i==0)break;
if(i>n)
printf(“%d”,m);}
while(m!
=0);/*输入0结束*/
[素数2]
intprime(intm)
{intk,p;
p=sqrt(m);
for(k=2;k<=p;k++)
if(m%k==0)return0;
return1;
if(prime(m))
printf(“%d是素数.”,m);
else
printf(“%d不是素数.”,m);
2.水仙花数:
若某数等于各位数字的立方和,则称该数为水仙花数
for(i=100;i<=999;i++)
{a=i%10;
b=i/10%10;
c=i/100;
if(a*a*a+b*b*b+c*c*c==i)
printf(“%d”,&i);
输入一个整数判断是否是水仙花数.
scanf(“%d”,&m);t=0;n=m;
while(n>0)
{k=n%10;t=t+k*k*k;n=n/10;}
if(m==t)printf(“%d是水仙花数.”,m);
[水仙花数]
intf(intm)
{intk,n,t;
n=m;t=0;
if(m==t)return1;
elsereturn0;
intm;
do
{scanf(“%d”,&m);
if(f(m))printf(“%d是水仙花数.”,m);
elseprintf(“%d不是水仙花数.”,m);
}while(m!
=0);
3.完数:
某数等于其诸因子之和则该数为完数,如6=1+2+3,28=1+2+4+7+14则6、28就是完数。
{intn,i,s;
for(n=6;n<=1000;n++)
{s=0;
for(i=1;i<=n/2;i++)
if(n%i==0)s+=i;
if(n==s)fprintf(p,"%6d",n);
4.数位截取:
输入一个长整型数,求各位数字的平方和
{intdigit;
longin,s;
scanf(“%ld”,in);
if(in<0)in=-in;
s=0;
while(in>0)
{digit=in%10;
s=s+digit*digit
in=in/10;
}
printf(“sum=%ld\n”,s);
5.最大公约数、最小公倍数
{intm,n,k,t,p;
scanf("%d%d",&m,&n);
if(m>n){k=m;p=n;}
else{k=n;p=m;}
while((t=(k%p))!
=0)
k=p;
p=t;
printf("gongyueshu=%d\n",p);
printf("gongbeishu=%d\n",m*n/p);
6.亲密数对:
说明:
若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。
如:
220、284是1对亲密数,284、220也是1对亲密数。
inta,b,c,i;
for(a=6;a<=5000;a++)
b=c=0;
for(i=1;iif(a%i==0)b=b+i;for(i=1;iif(b%i==0)c=c+i;if(a==c&&a!=b)printf("%6d,%6d\n",a,b);}}方法2:用函数#includelongs(intm){intj;longsum=0;for(j=1;j<=m/2;j++)if(m%j==0)sum=sum+j;returnsum;}voidmain(){inta,b;longc1,c2;scanf(“%d%d”,&a,&b);c1=s(a);c2=s(b);if((a!=b)&&(c1==b)&&(c2==a))printf("%6d,%6d\n",a,b);}三、最大最小1.从输入的若干个正数中选出最小数#includevoidmain(){floatx,min;scanf("%f",&x);min=x;while(x>=0){if(xmin=x;scanf("%f",&x);}printf("theminiumnumberis%f",min);}2.编制函数,其功能是在float类型1维数组中查找最大值、最小值,并将它们返回到调用程序。#includevoidmax_min(intx[],intn,int*max,int*min){inti;*max=x[0];*min=x[0];//max=&x[0],min=&x[0];for(i=1;i{if(*max*max=x[i];if(x[i]<*min)*min=x[i];}}voidmain(){intx[10],i,min,max;for(i=0;i<10;i++)scanf("%d",x+i);max_min(x,10,&max,&min);printf("MAX=%dMIN=%d\n",max,min);}四、双重循环1.求(n由输入决定)#includevoidmain(){inti,j,n;longintt=1,sum=0;scanf("%d",&n);for(i=1;i<=n;i++){t=1;for(j=1;j<=2*i-1;j++)t=t*j;sum=sum+t;}printf("n!=%ld",sum);}2.输入一个3*6的二维整型数组数据,输出其中最大值及其所在行列下标。#includevoidmain(){inta[3][6],i,j,m,n,max;for(i=0;i<3;i++)for(j=0;j<6;j++)scanf("%d",&a[i][j]);max=a[0][0];for(i=0;i<3;i++)for(j=0;j<6;j++)if(a[i][j]>max){max=a[i][j];m=i;n=j;}printf("themaxnumis%d,row%dline%d\n",max,m,n);}3.鞍点问题:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小#defineN10#defineM10voidmain(){inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;scanf("%d",&n);scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[n][m]);for(i=0;i{for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
if(a%i==0)
b=b+i;
for(i=1;i
if(b%i==0)
c=c+i;
if(a==c&&a!
=b)
printf("%6d,%6d\n",a,b);
方法2:
用函数
longs(intm)
intj;longsum=0;
for(j=1;j<=m/2;j++)
if(m%j==0)sum=sum+j;
returnsum;
inta,b;longc1,c2;
scanf(“%d%d”,&a,&b);
c1=s(a);c2=s(b);
if((a!
=b)&&(c1==b)&&(c2==a))
三、最大最小
1.从输入的若干个正数中选出最小数
floatx,min;
scanf("%f",&x);
min=x;
while(x>=0){
if(xmin=x;scanf("%f",&x);}printf("theminiumnumberis%f",min);}2.编制函数,其功能是在float类型1维数组中查找最大值、最小值,并将它们返回到调用程序。#includevoidmax_min(intx[],intn,int*max,int*min){inti;*max=x[0];*min=x[0];//max=&x[0],min=&x[0];for(i=1;i{if(*max*max=x[i];if(x[i]<*min)*min=x[i];}}voidmain(){intx[10],i,min,max;for(i=0;i<10;i++)scanf("%d",x+i);max_min(x,10,&max,&min);printf("MAX=%dMIN=%d\n",max,min);}四、双重循环1.求(n由输入决定)#includevoidmain(){inti,j,n;longintt=1,sum=0;scanf("%d",&n);for(i=1;i<=n;i++){t=1;for(j=1;j<=2*i-1;j++)t=t*j;sum=sum+t;}printf("n!=%ld",sum);}2.输入一个3*6的二维整型数组数据,输出其中最大值及其所在行列下标。#includevoidmain(){inta[3][6],i,j,m,n,max;for(i=0;i<3;i++)for(j=0;j<6;j++)scanf("%d",&a[i][j]);max=a[0][0];for(i=0;i<3;i++)for(j=0;j<6;j++)if(a[i][j]>max){max=a[i][j];m=i;n=j;}printf("themaxnumis%d,row%dline%d\n",max,m,n);}3.鞍点问题:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小#defineN10#defineM10voidmain(){inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;scanf("%d",&n);scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[n][m]);for(i=0;i{for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
printf("theminiumnumberis%f",min);
2.编制函数,其功能是在float类型1维数组中查找最大值、最小值,并将它们返回到调用程序。
voidmax_min(intx[],intn,int*max,int*min)
{inti;
*max=x[0];*min=x[0];//max=&x[0],min=&x[0];
for(i=1;i{if(*max*max=x[i];if(x[i]<*min)*min=x[i];}}voidmain(){intx[10],i,min,max;for(i=0;i<10;i++)scanf("%d",x+i);max_min(x,10,&max,&min);printf("MAX=%dMIN=%d\n",max,min);}四、双重循环1.求(n由输入决定)#includevoidmain(){inti,j,n;longintt=1,sum=0;scanf("%d",&n);for(i=1;i<=n;i++){t=1;for(j=1;j<=2*i-1;j++)t=t*j;sum=sum+t;}printf("n!=%ld",sum);}2.输入一个3*6的二维整型数组数据,输出其中最大值及其所在行列下标。#includevoidmain(){inta[3][6],i,j,m,n,max;for(i=0;i<3;i++)for(j=0;j<6;j++)scanf("%d",&a[i][j]);max=a[0][0];for(i=0;i<3;i++)for(j=0;j<6;j++)if(a[i][j]>max){max=a[i][j];m=i;n=j;}printf("themaxnumis%d,row%dline%d\n",max,m,n);}3.鞍点问题:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小#defineN10#defineM10voidmain(){inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;scanf("%d",&n);scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[n][m]);for(i=0;i{for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
if(*max*max=x[i];if(x[i]<*min)*min=x[i];}}voidmain(){intx[10],i,min,max;for(i=0;i<10;i++)scanf("%d",x+i);max_min(x,10,&max,&min);printf("MAX=%dMIN=%d\n",max,min);}四、双重循环1.求(n由输入决定)#includevoidmain(){inti,j,n;longintt=1,sum=0;scanf("%d",&n);for(i=1;i<=n;i++){t=1;for(j=1;j<=2*i-1;j++)t=t*j;sum=sum+t;}printf("n!=%ld",sum);}2.输入一个3*6的二维整型数组数据,输出其中最大值及其所在行列下标。#includevoidmain(){inta[3][6],i,j,m,n,max;for(i=0;i<3;i++)for(j=0;j<6;j++)scanf("%d",&a[i][j]);max=a[0][0];for(i=0;i<3;i++)for(j=0;j<6;j++)if(a[i][j]>max){max=a[i][j];m=i;n=j;}printf("themaxnumis%d,row%dline%d\n",max,m,n);}3.鞍点问题:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小#defineN10#defineM10voidmain(){inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;scanf("%d",&n);scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[n][m]);for(i=0;i{for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
*max=x[i];
if(x[i]<*min)
*min=x[i];
{intx[10],i,min,max;
for(i=0;i<10;i++)
scanf("%d",x+i);
max_min(x,10,&max,&min);
printf("MAX=%dMIN=%d\n",max,min);
四、双重循环
1.求
(n由输入决定)
inti,j,n;
longintt=1,sum=0;
scanf("%d",&n);
t=1;
for(j=1;j<=2*i-1;j++)
t=t*j;
sum=sum+t;
printf("n!
=%ld",sum);
2.输入一个3*6的二维整型数组数据,输出其中最大值及其所在行列下标。
inta[3][6],i,j,m,n,max;
for(i=0;i<3;i++)
for(j=0;j<6;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
if(a[i][j]>max)
max=a[i][j];
m=i;n=j;
printf("themaxnumis%d,row%dline%d\n",max,m,n);
3.鞍点问题:
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小
#defineN10
#defineM10
inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;
scanf("%d",&m);
for(i=0;ifor(j=0;jscanf("%d",&a[n][m]);for(i=0;i{for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
for(j=0;jscanf("%d",&a[n][m]);for(i=0;i{for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
scanf("%d",&a[n][m]);
for(i=0;i{for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
for(j=0;jprintf("%d",a[n][m]);printf("\n");}flag2=0;for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
printf("%d",a[n][m]);
printf("\n");
flag2=0;
for(i=0;imax=a[i][0];for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
max=a[i][0];
for(j=0;jif(a[i][j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
maxj=j;
for(k=0,flag1=1;kif(max>a[k][maxj])flag1=0;if(flag1){printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵中无鞍点");}五、三种排序1.选择排序:函数sort使用选择法将一维整型数组中各元素按值从大到小排序。#include#defineN10voidsort(inta[],intn){inti,j,k,temp;for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
if(max>a[k][maxj])
flag1=0;
if(flag1)
printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max);
flag2=1;
if(!
flag2)printf("\n矩阵中无鞍点");
五、三种排序
1.选择排序:
函数sort使用选择法将一维整型数组中各元素按值从大到小排序。
voidsort(inta[],intn)
{inti,j,k,temp;
for(i=0;ik=i;for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
k=i;
for(j=i+1;jif(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
if(a[k]temp=a[k];a[k]=a[i];a[i]=temp;}}voidmain(){inta[N],i;for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
temp=a[k];a[k]=a[i];a[i]=temp;
inta[N],i;
for(i=0;iscanf("%d",&a[i]);sort(a,N);for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
scanf("%d",&a[i]);
sort(a,N);
for(i=0;iprintf("%d",a[i]);}2.冒泡法#includevoidmain(){inta[10],i,j,t;printf("Input10numbers:\n");for(i=0;i<10;i++)/*输入排序数*/scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)/*控制比较趟数*/for(i=0;i<9-j;i++)/*控制比较对数*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumber:\n");for(i=0;i<10;i++)/*输出已排序的数*/printf("%d",a[i]);}3.插入排序:将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序#include#defineN5voidmain(){inta[N],i,x,j;scanf("%d",&a[0]);for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
printf("%d",a[i]);
2.冒泡法
inta[10],i,j,t;
printf("Input10numbers:
\n");
for(i=0;i<10;i++)/*输入排序数*/
for(j=0;j<9;j++)/*控制比较趟数*/
for(i=0;i<9-j;i++)/*控制比较对数*/
if(a[i]>a[i+1])
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
printf("Thesortednumber:
for(i=0;i<10;i++)/*输出已排序的数*/
3.插入排序:
将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序
#defineN5
inta[N],i,x,j;
scanf("%d",&a[0]);
for(i=1;i{scanf("%d",&x);for(j=i-1;j>=0;j--)if(a[j]>x)a[j+1]=a[j];elsebreak;a[j+1]=x;}}for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
scanf("%d",&x);
for(j=i-1;j>=0;j--)
if(a[j]>x)
a[j+1]=a[j];
elsebreak;
a[j+1]=x;
for(i=0;iprintf("%d",a[i]);}六、二种查找1.顺序查找设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。#include#defineN5intfind(int*a,intn,intx){intk=0,y=0;for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
六、二种查找
1.顺序查找
设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。
请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;如果没有找到,返回0。
intfind(int*a,intn,intx)
intk=0,y=0;
for(k=0;kif(a[k]==x)y=k+1;returny;}voidmain(){intn,x,a[N],i;for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
if(a[k]==x)y=k+1;
intn,x,a[N],i;
for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn\n");scanf("%d%d",&x,&n);while(x!=0){if((i=find(a,n,x))!=0)printf("%disthe%dthnumber",x,i);elseprintf("notfound");scanf("%d,%d",&x,&n);}}2.二分法查找(要求查找的数据要有序)#include#defineN10intf(intx,inta[],intn){intlow,high,mid;low=0;high=n-1;inty=-1;while(low<=high){mid=(low+high)/2;if(x>a[mid])low=mid+1;elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
printf("pleaseinputxandn\n");
scanf("%d%d",&x,&n);
while(x!
=0){
if((i=find(a,n,x))!
printf("%disthe%dthnumber",x,i);
printf("notfound");
scanf("%d,%d",&x,&n);
2.二分法查找(要求查找的数据要有序)
intf(intx,inta[],intn)
intlow,high,mid;
low=0;high=n-1;
inty=-1;
while(low<=high){
mid=(low+high)/2;
if(x>a[mid])low=mid+1;
elseif(xelse{y=mid;break;}}returny;}voidmain(){inti,x,n,a[N];for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
else{y=mid;break;}
inti,x,n,a[N];
for(i=0;iscanf("%d",&a[i]);printf("pleaseinputxandn");scanf("%d%d",&x,&n);printf("%d\n",f(x,a,n));}七.三种遍历1.数组遍历1)字符串与整数转换说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。#includeintatoil(chars[]){intk=0,sign,digit;sign=1;digit=0;while(s[k]<'0'||s[k]>'9'){if(s[k]=='-'){sign=-1;}k++;}while(s[k]>='0'&&s[k]<='9'){digit=digit*10+s[k]-'0';k++;}returnsign*digit;}voidmain(){chars[80];intd;scanf("%s",s);d=atoil(s);printf("%d",d);}2)数组逆置(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
printf("pleaseinputxandn");
printf("%d\n",f(x,a,n));
七.三种遍历
1.数组遍历
1)字符串与整数转换
说明】函数atoi的功能是将字符串转换成整数,如“atoi("-123")”将返回-123。
intatoil(chars[])
intk=0,sign,digit;
sign=1;
digit=0;
while(s[k]<'0'||s[k]>'9')
if(s[k]=='-')
sign=-1;
k++;
while(s[k]>='0'&&s[k]<='9')
digit=digit*10+s[k]-'0';
returnsign*digit;
chars[80];
intd;
scanf("%s",s);
d=atoil(s);
printf("%d",d);
2)数组逆置
(1)for(i=0;i<=n/2;i++)
{t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}
(2)for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}如何用指针表示?3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现#includevoidstrcpy1(char*to,char*from){while((*to=*from)!='\0'){to++;from++;}}voidmain(){charto[20],from[10];scanf("%s%s",from,to);strcpy1(to,from);printf("%s\n",to);}4)进制转换函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。例如:调用xtoi("1f")将返回31。#includeintxtoi1(chars[]){intk=0,d=0;while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f'){if(s[k]>='0'&&s[k]<='9')d=d*16+s[k]-'0';if(s[k]>='a'&&s[k]<='f')d=d*16+s[k]-87;k++;}returnd;}voidmain(){chars[80];intd;scanf("%s",s);d=xtoi1(s);printf("%d",d);}2.链表遍历链表的建立、插入、删除和输出3.文件遍历(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。#include#include#includevoidmain(){FILE*f1,*f2;intflag=1;charch;if((f1=fopen("a.txt","r"))==NULL){printf("不能打开文件a.txt\n");exit(0);}if((f2=fopen("b.txt","w"))==NULL){printf("不能打开文件b.txt\n");exit(0);}while(!feof(f1)){ch=fgetc(f1);if(flag==1&&ch>='a'&&ch<='z')fputc(ch-32,f2); elsefputc(ch,f2);if(!isalpha(ch))flag=1;elseflag=0;}fclose(f1);fclose(f2);}八.函数调用1,值传递,地址传递#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2printf("%d,%d,%d--",*x,y,z);}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}A、21B、16C、15D、8(2)写出下列程序的输出结果:#includeintf(intx){staticy=1;x+=y;y++;returnx;}voidmain(){intk;k=f(3);printf("%d%d\n",k,f(k));}3.递归调用(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}A、3B、8C、5D、13九.其他算法1.数学类问题(上机题)1.程序设计题:考生目录下有Design.c程序,请完成以下功能:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下新建文件design.dat。#include#includevoidmain(){FILE*p;inti,k=0;floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};floaty[]={-6,
{t=a[i];a[i]=a[j];a[j]=t;}
如何用指针表示?
3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现
voidstrcpy1(char*to,char*from)
while((*to=*from)!
='\0')
to++;
from++;
charto[20],from[10];
scanf("%s%s",from,to);
strcpy1(to,from);
printf("%s\n",to);
4)进制转换
函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。
例如:
调用xtoi("1f")将返回31。
intxtoi1(chars[])
intk=0,d=0;
while(s[k]>='0'&&s[k]<='9'||s[k]>='a'&&s[k]<='f')
if(s[k]>='0'&&s[k]<='9')
d=d*16+s[k]-'0';
if(s[k]>='a'&&s[k]<='f')
d=d*16+s[k]-87;
returnd;}
d=xtoi1(s);
2.链表遍历
链表的建立、插入、删除和输出
3.文件遍历
(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。
{FILE*f1,*f2;
intflag=1;
charch;
if((f1=fopen("a.txt","r"))==NULL){
printf("不能打开文件a.txt\n");exit(0);
if((f2=fopen("b.txt","w"))==NULL){
printf("不能打开文件b.txt\n");exit(0);
while(!
feof(f1)){
ch=fgetc(f1);
if(flag==1&&ch>='a'&&ch<='z')
fputc(ch-32,f2);
fputc(ch,f2);
isalpha(ch))flag=1;
elseflag=0;
fclose(f1);fclose(f2);
八.函数调用
1,值传递,地址传递
#includeintx,y,z;voidp(int*x,inty){++*x;y--;z=*x+y;2
printf("%d,%d,%d--",*x,y,z);
}voidmain(){x=2;y=3;z=4;p(&x,y);printf("%d,%d,%d--",x,y,z);p(&y,x);printf("%d,%d,%d\n",x,y,z);}2.静态局部变量
(1)函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为(35)。
{staticinti=0;ints=0;
for(;i<=m;i++)s+=i;returns;
A、21B、16C、15D、8
(2)写出下列程序的输出结果:
intf(intx)
{staticy=1;
x+=y;y++;
returnx;
{intk;
k=f(3);
printf("%d%d\n",k,f(k));
3.递归调用
(1)函数f定义如下,执行语句“m=f(5);”后,m的值应为B。
intf(intk)
{if(k==0||k==1)return1;
elsereturnf(k-1)+f(k-2);
A、3B、8C、5D、13
九.其他算法1.数学类问题(上机题)
1.程序设计题:
考生目录下有Design.c程序,请完成以下功能:
数组元素x[i]、y[i]表示
平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与
(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"%d"写到考生目录下
新建文件design.dat。
{FILE*p;inti,k=0;
floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
floaty[]={-6,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1