一、数列求和 2
二、最大公约数、最小公倍数 6
三、排序算法 7
四、数组 8
五、求整数n的各位数字及各数字之和 11
六、平面上各点之间的距离 13
七、数制转换 16
八、字符串处理 17
九、最大值与最小值 23
十、斐波那契(Fibonacci)数列 26
十一、水仙花、完数、回文数与亲密数 27
十二、方程求根 29
十三、回文数、因子、质因子、素数 32
十三、其他算法 33
第二部份 C程序设计上机操作题
一、数列求和
1、程序调试题
试题一
该程序功能:输入x和正数eps,计算多项式1-x+x*x/2!-x*x*x/3!+...的和直到末项的绝对值小于eps为止。
#include #include void main() { float x,eps,s=1,t=1,i=1; scanf("%f%f",&x,&eps); do { /***** 1 *****/ t=-t*x/++i; //++i--i++ s+=t; /***** 2 *****/ } while(fabs(t) printf("%f\\n",s); } 试题二 该程序功能:运行时若输入a、n分别为3、6,则输出下列表达式的值: 3+33+333+3333+33333+333333 #include void main() { int i,a,n; long t=0; /********* 1 *******/ s=0; //s=0--long s=0 scanf("%d%d",&a,&n); for(i=1;i<=n;i++) { /******* 2 ******/ t=t*10+i; //i-1 s=s+t; } s=s*a; printf("%ld\\n",s); } 2、程序填空题 试题一 程序功能:调用函数f计算代数多项式1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x当x=1.7时的值。 #include float f(float, float*,int); void main( ) { float b[5]={1.1,2.2,3.3,4.4,5.5}; printf(“%f\\n”,f(1.7,b,5)); } float f( 1 ) // float f( float x, float a[ ], int n) { float y=a[0],t=1; int i; for(i=1;i } 3、程序设计题 试题一 设计程序:计算多项式a0+a1*sin(x)+a2*sin(x*x)+a3*sin(x*x*x)+……的值,并将其值以格式"%.6f"写入到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *p; int i; float x=2.345,t=1.0,y=0.0; float a[10]={1.2,-1.4,-4.0,1.1,2.1,-1.1,3.0,-5.3,6.5,-0.9}; //* 考生在这里添加代码 p=fopen(“design.dat”,”w”); y=a[0]; for(i=1;i<10;i++) { t=t*x; y=y+a[i]*sin(t); } fprintf(p,”%.6f”,y); fclose(p); } 试题二 计程序:计算多项式a0-a1*x+a2*x*x/2!-a3*x*x*x/3!+...的值,并将其以格式"%f"写到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *p; int i; float x=1.279,t,y; float a[10]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65}; // 考生在这里添加代码 p=fopen(“design.dat”,”w”); t=1; y=a[0]; for(i=1;i<10;i++) {t=-t*x/i; y=y+a[i]*t; } fprintf(p,"%f",y); fclose(p); } 试题三 设计程序:计算表达式1+2!+3!+...+12!的值,并将计算结果以格式"%ld" 写入到考生目录中Paper子目录下的新建文件design.dat中 #include void main() { FILE *p; long s=1,k=1; int i; //考生在这里添加代码 p=fopen("design.dat for(i=2;i<=12;i++) {k=i*k; s=s+k; } fprintf(p,"%ld",s); fclose(p); } 试题四 设计程序:计算多项式a0+a1*x+a2*x*x+a3*x*x*x+...的值,并将其值以格式"%f"写到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *p; int i; float x=1.279,t=1,y=0; float a[10]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65}; // 考生在这里添加代码 p=fopen("design.dat for(i=0;i<10;i++) { y=y+t*a[i]; t=t*x; } fprintf(p,"%f",y); fclose(p); } 试题五 设计程序:计算2的平方根、3的平方根、...、10的的平方根之和,要求计算结果具有小数点后10位有效位数,并以格式"%.10f\\n"写到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *p; //考生在这里添加代码 int i; float s=0; p=fopen("design.dat for(i=2;i<=10;i++) s=s+sqrt(i); fprintf(p,"%.10f",s); fclose(p); } 试题六 设计程序:数列第1项为81,此后各项均为它前1项的正平方根,统计该 数列前30项之和,并以格式"%.3f"写到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *p; float s=0,a=81,i; //考生在这里添加代码 p=fopen("design.dat for(i=1;i<=30;i++) {s=s+a; a=sqrt(a); } fprintf(p,"%.3f",s); fclose(p); } 试题七 在数组a的10个数中求平均值v,将大于等于v的数组元素进行求和,并将结果以格式"%.5f"写到考生目录中Paper子目录下的新建文件design.dat中。 #include void main() { FILE *p; int i; float a[10]={7.23,1.5,5.24,2.1,2.45,6.3,5,3.2,0.7,9.81},sum,v=0; //考生在这里添加代码 p=fopen("design.dat for(i=0;i<10;i++) v=v+a[i]/10; sum=0; for(i=0;i<10;i++) if(a[i]>v) sum=sum+a[i]; fprintf(p,"%.5f",sum); fclose(p); } 试题八 设计程序: 利用公式π/4≈1-1/3+1/5-1/7+……公式计算π的近似值,直到某一项的绝对值小于1e-6为止。 (π/4的结果不包含此项)将结果以格式"%.6f"写入到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *fp; float n=1,t=1,pi=0; int i; //考生在这里添加代码 fp=fopen("design.dat while(1.0/t>=1e-6) {pi=pi+n*1.0/t; t=t+2; n=-n; } pi=pi*4; fprintf(fp,"%.6f",pi); fclose(fp); } 试题九 计算数列1,-1/3!,1/5!,-1/7!的和至某项的绝对值小于1e-5为止(该项不累加),将结果以格式"%.6f"写入到考生目录中Paper子目录下的新建文件design1.dat中。 #include #include void main() { FILE *p; float s=1,t=1,i=3; // 考生在这里添加代码 p=fopen("d:\\\\design1.txt t=-t*(i-1)*i; while(fabs(1/t)>=1e-5) {s+=1/t; i=i+2; t=-t*(i-1)*i; } fprintf(p,"%.6",s); fclose(p); } 二、最大公约数、最小公倍数 1、程序调试题 试题一 该程序功能:输入m、n(要求输入数均大于0,且m>=n),输出它们的最小公倍数。 #include void main() { int m,n,k; /******** 1 *********/ while(scanf("%d%d",&m,&n),m<0 && n<0); // m<0 && n<0-!(m>0&&n>0&&m>=n) for(k=m; k%n!=0;) /******** 2 ********/ k=k+n; //改为:k=k+m printf("%d\\n",k); } 2、程序填空题 试题一 该程序功能:输入m、n(要求输入数均大于0),输出它们的最大公约数。 #include void main() { int m,n,k; while(scanf("%d%d",&m,&n), _______1______ ); //!(n>0&&m>0) for( ____2____; n%k!=0||m%k!=0; k--); //k=m或k=n printf("%d\\n",k); } 三、排序算法 1、程序调试题 该程序功能:用选择法对10个整数按升序排序。 #include #define N 10 void main() { int i,j,min,temp; int a[N]={5,4,3,2,1,9,8,7,6,0}; printf("\\nThe array is:\\n"); /* 输出数组元素 */ for (i=0;i for (i=0;i min = i; for (j=i+1; j if (a[min]<=a[j]) min =j; //<=---- > /****** 2 ******/ temp=a[min]; a[min]=a[j]; a[j]=temp; /* 数据交换 */ } //j--i printf("\\nThe sorted numbers: \\n"); /* 输出排序结果 */ for (i=0;i printf("\\n"); } 2、程序设计题 该程序功能:用冒泡法对10个整数按升序排序。 #include #define N 10 void main() { int i,j,min,temp; int a[N]={5,4,3,2,1,9,8,7,6,0}; printf("\\nThe array is:\\n"); /* 输出数组元素 */ for (i=0;i // for (i=0;i for (j=0; j temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;} /* 数据交换 */ } printf("\\nThe sorted numbers: \\n"); /* 输出排序结果 */ for (i=0;i printf("\\n"); } 四、数组 1、程序填空题 试题一 该程序功能:输入数组x[7],调用函数f,去除数组中的负数,输出结果为:1 3 4 6 #include void f(int *a,int *m) { int i,j; for(i=0;i<*m;i++) if(a[i]<0) { for(j=i--;j<*m-1;j++) a[j]=a[j+1]; _____1_____; //(*m)-- } } void main() { int i,n=7,x[7]={1,-2,3,4,-5,6,-7}; _______2_______; //f(x,&n) for(i=0;i } 试题二 该程序功能:函数f将数组循环左移k个元素,数组x[7]调用函数f后的输出结果为:4 5 6 7 1 2 3 #include void f(int *a,int n,int k) { int i,j,t; for(i=0;i for( _______2________ ) a[j-1]=a[j]; //j=1;j } } void main() { int i,x[7]={1,2,3,4,5,6,7}; f(x,7,3); for(i=0;i<7;i++) printf("%5d",x[i]); printf("\\n"); } 试题三 该程序功能:调用函数f,求二维数组a中全体元素之和。 #include float f( _______1_______) //float *x[],int m,int n { float y=0; int i,j; for(i=0;i } void main() { float a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*b[3]; int i; for(i=0;i<3;i++) b[i]=___2___; //*(a+i) printf("%.2f\\n",f(b,3,4)); } 试题四 求出数组a中相邻两个元素的和,并将这些和存放在数组a中,按每一行3个元素的形式输出。(例如:b[1]=a[0]+a[1],b[2]=a[1]+a[2]……,b[9]=a[8]+a[9]) #include void main() { int a[10],b[10],i; printf("\\nInput 10 numbers: "); for (i=0; i<10;i++) /* 数组输入 */ scanf("%d", &a[i]); for (i=1; i<10; i++) b[i]=_ a[i-1]+a[i]_; /* 计算b数组中的元素 */ for (i=1; i<10; i++) { printf("%3d",b[i]); if (_i%3==0_) printf("\\n"); /* 每行打印3个数据 */ } } 2、程序设计题 试题一 设计程序:将数组a的每1行均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),然后将a数组写入到考生目录中Paper子目录下的新建文件design.dat中新建的文件design.dat中。 #include void main() { float a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}}; FILE *p; /****以下要求考生写的代码****/ float temp; int i,j; p=fopen(“design.dat”,”w”); for(i=0;i<3;i++) {temp=a[i][i[; for(j=0;j<3;j++) fprintf(p,"%5.1f",a[i][j]/temp); fprintf(p,"\\n"); } fclose(p); } 试题二 设计程序:将数组a的每1行均除以该行上绝对值最大的元素,然后将a数组写入到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { float a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}}; FILE *p; float x; int i,j; //考生在这里添加代码 for(i=0;i<3;i++) { x=a[i][0]; for(j=0;j<3;j++) if(fabs(x) for(j=0;j<3;j++) a[i][j]=a[i][j]/x; } p=fopen("design.dat for(i=0;i<3;i++) { for(j=0;j<3;j++) fprintf(p,"%10.6f",a[i][j]); fprintf(p,"\\n"); } fclose(p); } 试题三 在整数数组a中找出偶数放到数b中,对数组b按从小到大的顺序排序后发格式“%3d”每行3个数写入考生文件夹中paper子文件夹下的新建文件design1.dat。 #include void main() { FILE *p; int i,j,temp,n=0; int a[10]={7,6,20,3,14,88,53,62,10,29},b[10]; //考生在这里添加代码 p=fopen("design1 for(i=0;i<10;i++) if(a[i]%2==0)b[n++]=a[i]; for(i=0;i if(b[j]>b[j+1]) {temp=b[j]; b[j]=b[j+1]; b[j+1]=temp; } for(i=1;i<=n;i++) if(i%3==0) fprintf(p,"%3d\\n",b[i-1]); else fprintf(p,"%3d",b[i-1]); fclose(p); } 五、求整数n的各位数字及各数字之和 1、程序调试题 试题一 该程序功能:运行时输入整数n,输出n各位数字之和(如n=1308则输出12,n=-3204则输出9)。 #include #include void main() { int n,s=0; scanf("%d",&n); n=fabs(n); /******** 1 *******/ while(n>1) { //n或n>0或n!=0 s=s+n%10; /******** 2 ******/ n=n%10; //%--/ } printf("%d\\n",s); } 2、程序填空题 试题一 该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。 #include #include void main() { int n,s=0; scanf("%d",&n); ______ 1 ______ //n=fabs(n); while(n!=0) { ______ 2 ______ //s=s+n%10 n=n/10; } printf("%d\\n",s); } 试题二 该程序功能:输入1个整数后,输出该数的位数(若输入3214则输出4,输入-23156 则输出5)。 #include void main() { int n,k=0; scanf("%d",&n); while( _____1_____ ){ //n或n!=0 k++; _____2_____; //n=n/10 } printf("%d\\n",k); } 试题三 该程序功能:调用函数f,将1个整数首尾倒置,若程序输入12345,则输出54321; 若程序输入-34567,则输出-76543。 #include #include long f(long n) { long m,y=0; m=fabs(n); while(m!=0) { y=y*10+m%10; ____1____ //m=m/10; } if(n>=0) return y; else _____2_____ // return -y; } void main() { printf("%ld\",f(12345)); printf("%ld\\n",f(-34567)); } 3、程序设计题 试题一 设计程序:选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些四位自然数的个数cnt及这些数字的和sum到考生目录中Paper子目录下的新建文件design.dat中。 #include void main() { FILE *p; int cnt,sum; /* 考生在这里添加代码 int i,q,b,s,g; cnt=0;sum=0; p=fopen(“design.dat”,”w”); for(i=1000;i<5000;i++) {g=i%10;s=i%100/10;b=i%1000/100;q=i/1000; if(q+b==s+g && q+b==(g-q)*10) {cnt++;sum=sum+q+b+s+g;} } fprintf(p,"%d,%d",cnt,sum); fclose(p); } 六、平面上各点之间的距离 1、程序调试题 试题一 该程序功能:输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。 #include #include #include void main() { int i,n; /***** 1 *****/ struct axy { float x,y; } a; //a--*a scanf("%d",&n); a=(float*) malloc(n*2*sizeof(float)); //a=(struct axy*) malloc(n*2*sizeof(float)); for(i=0;i scanf("%f%f",a[i].x,a[i].y); // a[i].x-----.&a[i].x a[i].y-----.&a[i].y for(i=0;i printf("%f,%f\\n",a[i].x,a[i].y); } 2、程序填空题 试题一 在考生目录下,有Modify.c程序,该程序中“ N ”是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负) 该程序功能:输入n和平面上n个点的坐标,计算各点间距离的总和。 #include #include #define f(x1,y1,x2,y2) sqrt(pow(x2-x1,2)+pow(y2-y1,2)) 1 // #include void main( ) { float *x,*y,s=0; int i,j,n; scanf(“%d”,&n); x=(float*)malloc(sizeof(float)*n*2); y=x+ 2 ; //sizeof(float)*n*2; for(i=0;i printf(“%.2f\\n”,s); } 3、程序设计题 试题一 设计程序:x[i],y[i]分别表示平面上一个点的坐标,求下列10个点与点(1.0,1.0)的距离的总和,并将结果以格式"%.6f"写入到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *p; int i; float x[10]={-1.5,2.1,6.3,3.2,-0.7,7.0,5.1,3.2,4.5,7.6}; float y[10]={3.5,7.6,8.1,4.5,6.0,1.1,1.2,2.1,3.3,4.4}; float s=0.0; /****以下要求考生写的代码****/ p=fopen(“design.dat”,”w”); //以写方式打开文件 for(i=0;i<10;i++) s=s+sqrt((x[i]-1)*(x[i]-1)+(y[i]-1)*(y[i]-1)); //求与点(1.0,1.0)的距离之和 fprintf(p,”%.6f”,s); //以%.6f的格式将和写到文件 fclose(p); } 试题二 设计程序:数组元素x[i]、y[i]表示平面上某点坐标,统计所有各点间最短距离,并将其值以格式"%f"写到考生目录中Paper子目录下的新建文件design.dat中。 #include #include #define len(x1,y1,x2,y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) void main() { FILE *p; int i,j; float c,minc; float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65}; float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33}; minc=len(x[0],y[0],x[1],y[1]); /****以下要求考生写的代码****/ p=fopen(“design.dat”,”w”); for(i=0;i<10;i++) for(j=i+1;j<10;j++) {c=len(x[i],y[i],x[j],y[j]); if(c } fprintf(p,”%f”,minc); fclose(p); } 试题三 设计程序:数组元素x[i]、y[i]表示平面上某点坐标,统计10个点中处在圆 (x-1)*(x-1)+(y+0.5)*(y+0.5)=25内的点数k,并将变量k的值 以格式"%d"写到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *p; int i,k=0; float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65}; float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33}; //考生在这里添加代码 p=fopen("design.dat for(i=0;i<10;i++) if((x[i]-1)* (x[i]-1)+ (y[i]-0.5)* (y[i]-0.5)<25) k++; fprintf(p,"%d",k); fclose(p); } 试题四 程序设计题:考生目录下有Design.c程序,请完成以下功能:x[i],y[i]表示点d(i)的平面坐标,求d(0)至d(1)、d(1)至d(2)、……d(4)至d(0)的连线所构成的边形面积,并将所求面积以格式“%.4f”写到考生目录下新建文件design.dat。 #include #include void main( ) { FILE 8p; int i; float s,a,b,c,sdim=0; float x[5]={-4.5,0.5,4.2,2.7,-3}; float y[5]={2.3,4.7,1.3,-2.5,-3.3}; p=fopen(“design.dat”, “w”); // 此处起要求考生自己编制程序 for(i=1;i<4;i++) { a=sqrt((x[0]-x[i])*(x[0]-x[i])+(y[0]-y[i])*(y[0]-y[i])); b=sqrt((x[i]-x[i+1]) *(x[i]-x[i+1])+(y[i]-y[i+1])*(y[i]-y[i+1])); c= sqrt((x[0]-x[i+1]) *(x[0]-x[i+1])+(y[0]-y[i+1])*(y[0]-y[i+1])); s=(a+b+c)/2; sdim+=sqrt(s*(s-a)*(s-b)*(s-c)); } fprintf(p, “%.4f”, sdim); fclose(p); } 七、数制转换 1、程序调试题 试题一 将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符串形式输出。例如:输入十进制数79,将输出十六进制4f。 # include # include char trans(int x) { if(x<10) return '0'+x; /********1********/ else return 'a'+x; //’a’+x---’a’+x-10 } int DtoH(int n,char *str) { int i=0; while(n!=0) { str[i]=trans(n%16); /********2********/ n%=16; //%-----/ i++;} return i-1; } void main() { int i,k,n; char *str; scanf("%d",&n); k=DtoH(n,str); for (i=0;i<=k;i++) printf("%c",str[k-i]); } 2、程序填空题 试题一 该程序功能:将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。 #include void Dec2Bin(int m) { int bin[32],j; for(j=0;m!=0;j++) { bin[j]= ______1______; //m%2 m=m/2; } for(;j!=0;j--) printf("%d", ______2______ ); //bin[j-1] } void main() { int n; scanf("%d",&n); Dec2Bin(n); } 八、字符串处理 1、程序调试题 试题一 该程序功能: 输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。 例如:输入"abc123+xyz.5",应输出"abcxyz"。 #include #include void main() { char str[256]; int i,j,k=0,n; gets(str); n=strlen(str); for(i=0;i if (tolower(str[i])<'a' || tolower(str[i])>'z')//<’a’->=’a’ >’z’<=’z’ ||-〉&& { /********2********/ str[n]=str[i]; n++; //n--k } str[k]='\\0'; printf("%s\\n",str); } 试题二 该程序功能:输入1个字符串,按字母首次出现次序输出其中所出现过的大写英文字母。 *如运行时输入字符串"FONTNAME and FILENAME",应输出"F O N T A M E I L"。 #include void main() { char x[80],y[26]; int i,j,ny=0; gets(x); for(i=0;x[i]!='\\0';i++) if(x[i]>='A'&&x[i]<='Z') { for(j=0;j if(y[i]==x[j]) continue; //i -j continue--break if(j==ny) { y[ny]=x[i]; ny++; } } /***** 2 *****/ for(i=0;i<26;i++) //26---ny printf("%c ",y[i]); printf("\\n"); } 试题三 该程序功能:将两个字符串连接起来。 #include void main() { char s1[80],s2[40]; int i=0,j=0; printf("\\nInput the first string:"); scanf("%s",s1); printf("\\nInput the second string:"); scanf("%s",s2); while (s1[i] !='\\0') /****** 1 ******/ i+1; //i+1----i++ while (s2[j] !='\\0') /****** 2 ******/ s1[++i]=s2[++j]; /* 拼接字符到s1 */ ++i----i++ ++j---j++ s1[i] ='\\0'; printf("\\nNew string: %s",s1); } 试题四 该程序功能:用递归法将一个六位整数n转换成字符串,例如输入123456,应输出字符串"123456"。 #include void itoa(long i,char *s) { if(i==0) return; /****** 1 ******/ *s = '1'+i%10; //’1’---’0’ itoa(i/10,s-1); } void main() { long n; char str[7]=""; scanf("%ld",&n); /****** 2 ******/ itoa(n,str+6); //str+6--str+5 printf("%s",str); } 试题五 该程序功能:分别统计字符串中所有英文字母中的各元音字母个数。 #include #include void main() { char a[81]; int n[5]={0},i; gets(a); for(i=0; a[i]!='\\0'; i++) /***** 1 *****/ switch(toupper(a[i])) { //toupper---tolower case 'a': n[0]++; break; case 'e': n[1]++; break; case 'i': n[2]++; break; case 'o': n[3]++; break; /***** 2 *****/ case 'U': n[4]++; //U--u } for(i=0;i<5;i++) printf("%d\\n",n[i]); } 试题六 该程序功能: 输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按逆序连接到字符串t * 后面。 例如:输入"ABCD",则字符串t为"ABCDDCBA"。 # include # include void fun(char *s,char *t) { int i,sl; sl=strlen(s); for(i=0;i for(i=0;i t[sl+i]=s[sl-i]; // t[sl+i]=s[sl-i];改为t[sl+i]=s[sl-i-1]; /********2********/ t[sl]="\\0"; // t[sl]="\\0"; 改为t[sl+sl]='\\0'; } void main() { char s[100],t[100]; scanf("%s",s); fun(s,t); printf("%s",t); } 试题七 /*该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母,输出该字符串。*/ #include #include #include void main() { int n,i; /***** 1 *****/ char str; // char str;---char *str; scanf("%d\\n",&n); str=(char*)malloc(n); gets(str); /***** 2 *****/ for(i=1;i puts(str); } 2、程序填空题 试题一 该程序功能:分别统计字符串中英文字母、数字和其他字符出现的次数。 #include #include void main() { char a[80]; int n[3]={0},i; gets(a); ________1________ //for(i=0;i n[0]++; else if (________2________) //*统计数字个数*// //(a[i]>='0' && a[i]<='9') n[1]++; else n[2]++; } for(i=0;i<3;i++) printf("%d\\n",n[i]); } 试题二 该程序功能:调用函数f,从字符串中删除所有的数字字符。 #include #include #include void f(char *s) { int i=0; while(s[i]!='\\0') if(isdigit(s[i])) ____1____(s+i,s+i+1); //strcpy ___2___ i++; //else } void main() { char str[80]; gets(str); f(str); puts(str); } 试题三 该程序功能:调用函数f,将字符串中的所有字符逆序存放,然后输出。例如,输入字 //符串为"123456",则程序的输出结果为"654321"。 #include #include void main() { char s[60],*f(char*); gets(s); printf("%s\\n",f(s)); } ___1__ f(char* x) //char * { char t; int i,n; _______2______ //n=strlen(x); for(i=0;i } 试题四 在考生目录下,有Modify.c程序,该程序中“ N ”是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:调用函数f,从字符串中删除所有的数字字符。 #include #include #include void f(char *s) { int i=0; while(s[i]!= ‘\0’) if(isdigit(s[I])) 1 (s+i,s+i+1); // strcpy else 2 ; // i++ } void main( ) { char str[80]; gets(str); f(str); puts(str); } 3、程序设计题 试题一 设计程序:计算字符串s中每个字符的权重值,所谓权重值就是字符在字符串中的位置值与该字符的ASCII码值的乘积。位置值从1开始依此递增。将每个字符的权重值,以格式"%d "写入到考生目录中Paper子目录下的新建文件design.dat中。 #include #include void main() { FILE *p; int i,w; char *s="we45*&y3r#$1"; //这里添加代码 p=fopen(“design.dat”,”w”); i=0; while(s[i]) {w=s[i]*(i+1); fprintf(p, "%d ",w); i++; } fclose(p); } 试题二 设计程序:累加a字符串中各个字符的ASCII码值,然后将累加和以格式"%d"写到考生目录中Paper子目录下的新建文件design.dat中。 #include void main() { FILE *p; int s=0,i=0; char *a="r235%^%34cdDW,."; //考生在这里添加代码 p=fopen("design.dat for(;a[i];i++) s=s+ a[i]; fprintf(p,"%d",s); fclose(p); } 九、最大值与最小值 1、程序调试题 试题一 该程序功能:运行时输入10个数,然后分别输出其中的最大值、最小值。 #include void main() { float x,max,min; /******** 1 *******/ for(int i=1;i<=10;i++) { scanf("%f",&x); /******* 2 ********/ if(i==1) { max=x;min=x;} if(x>max) max=x; if(x printf("%f,%f\\n",max,min); } 2、程序填空题 试题一 该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。 #include #include #define f(x) x*x-5*x+sin(x) void main() { int x; float max; ______1______ //max=f(1); for(x=2;x<=10;x++) ______2______ //if(max } 试题二 该程序功能:调用函数f,求a数组中最大值与b数组中最小值之差。 #include float f(float *x, int n, int flag) { float y; int i; 1 // y=x[0]; for(i=1;i return y; } void main( ) { float a[6]={3,5,9,4,2.5,1},b[5]={3,-2,6,9,1}; printf(“%.2f\\n”,f(a,6,1) 2 )); // printf(“%.2f\\n”,f(a,6,1)-f(b,5,-1)); } 3、程序设计题 试题一 设计程序:z=f(x,y)=(3.14*x-y)/(x+y),若x、y取值为区间[1,6]的整数,找出使z取最小值的x1、y1,并将x1、y1以格式"%d,%d"写入到考生目录中Paper子目录下的新建文件design.dat中。 #include void main() { FILE *p; float f(float x,float y),min; int x,y,x1,y1; /****以下要求考生写的代码****/ p=fopen(“design.dat”,”w”); //以写方式打开文件 min=f(1,1);x1=1;y1=1; for(x=1;x<=6;x++) //求区间[1,6]中的最小值 for(y=1;y<=6;y++) if(min>f(x,y)) {min=f(x,y);x1=x;y1=y;} fprintf(p,”%d,%d”,x,y); //将最小值以%d,%d的格式写到文件 fclose(p); } float f(float u,float v) { return (3.14*u-v)/(u+v); } 试题二 程序设计题:考生目录下有Design.c程序,请完成以下功能:对x=1,2,…,10,求函数f(x)=x-10*cos(x)-5*sin(x)的最大值,并将该数以格式“%.3f”写到考生目录下新建文件design.dat。 #include #include void main( ) { FILE *p; float f(float),max,x; // 此处起要求考生自己编制程序 p=fopen(“design.dat”, “w”); max=f(1); for(x=2;x<=10;x++) if(max fprintf(p, “%.3f”, max); fclose(p); } float f(float y) { y=y-10*cos(y)-5*sin(y); return(y); } 试题三 /*设计程序:z=f(x,y)=10*cos(x-4)+5*sin(y-2),若x,y取值区间为[0,10]的整数,找出 使z取最小值的x1,y1,并将x1,y1以格式“%d,%d”写到考生目录中Paper下目录下的新建文件design.dat中*/ #include #include void main() { FILE *p; int x,y,x1,y1; float z,z1; /*考生在这里添加程序*/ p=fopen("design.dat z1=10*cos(0-4)+5*sin(0-2); for(x=0;x<=10;x++) for(y=0;y<=10;y++) { z=10*cos(x-4)+5*sin(y-2); if(z } fprintf(p,"%d,%d",x1,y1); fclose(p); } 十、斐波那契(Fibonacci)数列 1、程序调试题 2、程序填空题 试题一 /*该程序功能:数组的第1,2项均为1,此后各项值均为该项前二项之和。计算数组第30项的值。*/ #include __ //long f(int n); void main() { printf("%ld\\n",f(30)); } long f(int n) { if( _____ ) // n<2 或n==0||n==1 return 1; else return f(n-1)+f(n-2); } 3、程序设计题 试题一 设计程序:求斐波那契(Fibonacci)数列中大于t的最小的一个数,结果由函数JSValue返回,其中斐波那契数列F(n)的定义为: * F(0)=0,F(1)=1 * F(n)=F(N-1)+F(n-2) *分别计算当t=1000和t=3000时的结果,将计算结果输出到考生目录中Paper子目录下的新建文件design.dat中。 #include