#include
{ static char s[20]=”abcdefghijk”; int i, j;
scanf (“%d%d”, i , j ); switch (delete (s, i, j )){ case -1:
printf (“No copy!\\n s=%s i=%d j=%d\\n”, s, i, j); break; case 0:
printf (“All right!\\n s=%s i=%d j=%d\\n”, s, i, j); break; case 1:
printf (“Local copy!\\n s=%s i=%d j=%d\\n”, s, i, j); } }
delete(char s, int i, int L) { int j, k; char *p;
while (*s&& i ) s++; i--; if (*s= =’\\0’) return (-1); p=s; j=L;
while (*p&& j ) p++; j--;
if (*p= =’\\0’) { *(s+1)=’\\0’; return(1); } while (*s= *s) s++; return 0; } 43. 改错题:将数组str中的若干个字符串按ASCII码的升序进行排序,将排序后的结果输
出。
#include
{ int i, n=5;
static char str[ ]={“Follow Me”, “Basic Program”, “Great Wall”, “C Language”,“Computer System”};
for ( i=0; i<5; i++)
printf(“%s\\n”, str[i]); sort(str, n);
for ( i=0; i printf(“%s\\n”, str[i]); } sort (char s[ ], int n) { int i, j, k; char *p; for ( i=0; i for (strlen(s[i])>0 && strlen(s[j]>0) if (strcmp(s[k], s[j])>0) k=j; if (k=j) { p=s[k]; s[k]=s[i]; s[i]=p; } )} 44. 下面程序的功能是:用选择法对7个学生的成绩按降序排序,并输出排序后的学生的姓 名和成绩。含有错误的源程序为: #include struct student { char name[10]; float score; }; void sort(struct student *, int ); main() { static struct student stu[7]={{\ {\ int i; sort(stu,7); for(i=0;i<7;i++) printf(\} void sort(struct student x[], int n) { int i,j,k; float t; for(i=0;i for(j=0;j if(x[j].score>x[k].score) k=j; if(k!=j){t=x[i]; x[i]=x[k]; x[k]=t;} } } 注意: 以下各题,每2题是历年等级考试的一份上机试卷,其中前一题是改错题,后一题为编程题。改错题的要求如下: (1)把改错题所给的程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中错误进行修改。 (2)改错时,可以修改语句中的一部分,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。 (3)改正后的源程序(文件名myf1.c)必须放在考试盘的根目录上,供阅卷用。 编程题的要求如下: (1)源程序名必须取为myf2.c,输出结果文件名必须取为myf2.out。 (2)数据文件的打开、使用、关闭均按TURBO C文件操作实现。 (3)源程序文件和运行结果文件,均需放在考试盘的根目录上,供阅卷用。 (4)不能将myf2.obj和myf2.exe保存到考试盘上。 45. 改错题:输入一行字符串,把该字符串中的每一个字母串的首字母都换成在写字母,并 输出转换后的字符串。如输入good mor23ning!,则输出为Good Mor23Ning!。注:字母串是以字母开头的字母序列(不区分大小写),即不同字母串这间用非字母隔开。 # include int change (char *c, int flag) { if (flag= =0&&(*c<=?z?&&*c>=?a?||*c<=?Z?&&*c>=?A?)){ if (*c<=?z?&&*c>=?a?) c=c-?a?; return 1; } else if (flag= =1&&(c<=?z?&&c>=?a?||c<=?Z?&&c>=?A?)) return 1; return flag; } main ( ) { int flag=0; char c; for ( ; (c=gerchar( ))!=?\\n?;) { flag=change(c); putchar(c); } putchar(?\\n?); } 46. 编程题:用筛选法求100以内的素数。算法为:(1)用一个一维数组a,其初值为:2, 3,4,5,6,7,8,9,?,100; (2)对每一元素a[i](i=1,2,?,99),若a[i]不等于0,则从该元素的后一个元素开始,凡是a[i]的倍数的数组元素均不是素数(置为0); (3)数组a中不为0的元素,均为素数。 47. 改错题:输入一行字符串,求出它所包含的字母串的个数及最长字母串的长度。注:以 字母开头的字母序列(不区分大小写)称为字母串,字母串之间用非字母作为分隔符。如:You are worker23too。其中字母串的个数为4,即:You、are、worker、too,其中最长字母串worker的长度为6。 # include { char s[300]; int i, j; printf(“Input string :”); gets(s) i=count(s, j); if (i= =0) printf(“s=%s\\n No letter strings! \\n”, s); else printf(“s=%s\\n max length is %d\\n number is %d\\n”, s, j, i ); } count (char *p, int i ) { int j=0, k, m=0; char c; while(p=) { while (!((c=*p)>=?a? && c<=?z? || c>=?A? && c<=?Z?) && *p) p++; k=0; if (*p!=?\\0?) m++; while (c=*p){ p++; k++; } if (k>j) j=k; } *i=j; return m; } ?2244662n2n2?1?3?3?5?5?7?...?2n?1?2n?148. 编程题:求π的近似值: -5 要求:先求出前2n项的π值,再求出2n+2项的π值,直至二者之差小于10为止。 49. 改错题:计算二维数组全部外侧元素之和及全部非外侧元素之和。含有错误的源程序为: # include #define N 4 main ( ) { static a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12}; int i, j, sum1=0, sum2=0; for (i=0; i { sum1+=a[i][j]; printf(“=”, a[i][j]);} printf (“\\n”); } sum2=fun (M, N, a[0]); sum1-=sum2; printf (“%d %d\\n”, &sum1, &sum2); } int fun(int m, int n, int arr[ ]) { int i, j, sum=0 for (i=0; i 50. 编程题:A数组有20个正整数,编写函数实现将这20个数进行压缩存储。算法如下: 如果某数只出现一次,保留该数。如果某数连续出现多次,只保留一个,删除其余重复出现的数。同时要将每个数出现的次数依次保存在B数组中。例如,b[0]的值为a[0]在原数组a中出现的次数。压缩后的数据仍存储在A数组。 编程要求:A数组的20个数在数组说明时赋值,即: static int A[ ]={1,2,2,2,3,3,5,5,5,5,2,2,7,7,7,9,9,9,9,9}; 输出压缩后A数组和B数组的有效值到结果文件。 例如:压缩前:A[ ]:1,2,2,2,3,3,5,5,5,5,2,2,7,7,7,9,9,9,9 压缩后:A[ ]:1,2,3,5,2,7,9 B[ ]:1,3,2,4,2,3,5 51. 改错题:以下程序中merge函数将两个已按升序存放在数组A,B中的数列合并为一个 升序数列存放到数组C中。算法提示:先将数组A中的各个元素依次拷贝到数组C中,然后,依次从数组B中取一个元素,按其值的大小插入到数组C中(保持C中的数据按升序排序)。含有错误的源程序为: # include void merge (int *, int , int *, int , int *); main ( ) { static int a[ ]={1,3,5,7}, b[ ]={0,2,4,6,8}, c[10]; int i; merge(a, 4, b, 5, c); for (i=0; i<9; i++) printf(“M”, *(c+i)); printf(“\\n”); } void merge(int *a, int ma, int *b, int mb, int c) { int ib=0, ic=0, i, j; for(ic=0; ic for(ib=0; ib { if(b[ib]>c[ic]) c[ic++]=b[ib]; else { for (i=0; i<=ic; i++) if (b[ib] for(j=ic; j<=i; j――) c[j+1]=c[j]; c[i]=b[ib]; ic++; } } } 52. 编程题:假定在一个整型数组中,每一个元素是都不超过两位的正整数。试编程统计该数 组全部元素中数字0,1,??,9各出现多少次。将统计结果输出到结果文件中。 编程要求:采用以下方法为整型数组赋予指定的测试数据: static int a[ ]={5,26,74,56,1,27}; 53. 改错题(20分):本程序读入数组a[3][n]的前两行元素值,并根据同列的前两行元素 是素数还是合数(合数即百素数)产生同列的第三行元素。方法是:若某列第一、第二行元素为合数合数、合数素数、素数合数、素数素数,则该列第三行元素分别为字母A、B、C、D的ASCII码值。最后把数组a的元素写到文件myf1.out中,每写完a的一行元素要换行。 # include “stdio.h” # define n 5 isp(int m); { int i,p=1; for (i=2; i<=sqrt(m); i++) if (m%i= =0) p=0; return(p); } main ( ) { int a[3][n], i ,j, x , c; for (i=0; i<=2; i++) for (j=0; j c=isp(a[0][j])+isp(a[1][j]); switch (c); case 0: a[2][j]=’A’; break; case 1: a[2][j]=’B’; break; case 2: a[2][j]=’C’; break; case 3: a[2][j]=’D’; } for (i=0; i<3; i++) { for (j=0; j 注:调试程序时,可以随意输入测试数据。最后运行本程序时,必须从键盘输入下列数据: 第一行元素:27 11 6 7 8 第二行元素:16 12 19 23 5 54. 编程题(20分):建立十六个元素的数组a,方法是:先置a[0]=55,其余元素按公式: a[i ]=(15*a[i-1]+97)% 256 生成,然后对数组a进行如下操作: (1)求出数组a的元素平均值,把平均值(取两位小数)写到文件myf2.out中。 (2)找出与平均值之差的绝对值最大的元素,并将其从a中删去。 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言编程及上机题(2)在线全文阅读。
相关推荐: