金陵科技学院实验报告
要求:1、改错时,只允许修改现有语句中的一部分内容,不允许添加和删除语句。 2、提示行下一行为错误行。
(1)功能:为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换,输出数组元素。
#include
void input(int *arr,int n) {
int *p,i; p=arr;
printf(\ for(i=0;i /**********ERROR**********/ scanf(\} void max_min(int *arr,int n) { int *min,*max,*p,t; min=max=arr; for(p=arr+1;p /**********ERROR**********/ if(*p<*max) max=p; else if(*p<*min) min=p; t=*arr;*arr=*min;*min=t; /**********ERROR**********/ if(max=arr) max=min; t=*(arr+n-1); *(arr+n-1)=*max; *max=t; } void output(int *arr,int n) { int *p,i; p=arr; printf(\ /**********ERROR**********/ while(i=0;i main() { int a[10]; input(a,10); 29 金陵科技学院实验报告 max_min(a,10); output(a,10); } (2)功能:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。 例如:当s所指的字符串的内容为\时,t所指数组中的内容为\。 #include /**********FOUND**********/ void fun (char s, char t) { int i, d; /**********FOUND**********/ d = len(s); /**********FOUND**********/ for (i = 1; i t[i] = s[d - 1 - i ]; for (i = 0; i /**********FOUND**********/ t[2*d] = '/0'; } main() { char s[100], t[100]; printf(\ scanf(\ fun(s, t); printf(\} 3、程序设计 说明,所有题目均需添加main(),在main()中调用子函数并设计完整的输入输出才可调试通过。 (1) 功能:请编写一个函数 int fun(int *s, int t, int *k),用来求出数组的最大元素在数组中的下标, 用k返回。 例如: 输入如下整数:876 675 896 101 301 401 980 431 451 777 则输出结果为: 6, 980 (2) 功能:编写函数void len_cat(char c1[],char c2[])将第二个串连接到第一个串之后,不允许使用strcat函数(画程序流程图) (3) 功能:编写函数long fun ( char *p),将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。 例如:若输入字符串\,则函数把它转换为整数值 -1234。 30 金陵科技学院实验报告 (4) 功能:编写函数int fun(char *ptr)过滤串,即只保留串中的字母字符,并统计新生成串中包含的字母个数作为函数的返回值。 (5)功能:编写函数void fun(char s[])将一个由四个数字组成的字符串转换为每两个数字间有一个空格的形式输出。 例如:输入“4567”,应输出“4□5□6□7”(□表示空格)。 (6) 功能:编写函数void fun(char s[],char c)从字符串s中删除指定的字符c。 说明:该字符可能多次和连续出现,算法应全面考虑。(画程序流程图) 4、讨论、思考题 (1)功能:请编写函数void fun(char (*s)[N], char *b),将M行N列的二维数组中的字符数据按列的顺序依次放到一个字符串中。 例如:二维数组中的数据为: W W W W S S S S H H H H 则字符串中的内容应是:WSHWSHWSHWSH。 (2)功能:编写函数void fun(char str[],int i,int n),从字符串str中删除第i个字符开始的连续n个字符(注意:str[0]代表字符串的第一个字符)。 (3)功能:编写函数void fun(char *s,char t[]),将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。 例如:若s所指字符串中的内容为:\,其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是:\。 (4) 功能:请编写函数int fun( char *s),统计一行字符串中单词的个数作为函数值返回。规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 程序清单及流程图: 3(1)#include int fun(int *s,int t,int *k) { int i; *k=0; for(i=0;i return s[*k]; } main() { 31 金陵科技学院实验报告 int a[10]={876,675,896,101,301,401,980,431,451,777},k; fun(a,10,&k); printf(\} (2)#include void len_cat(char c1[],char c2[]) { int i,j,k,max; char d[N]; for(i=0;c1[i]!='\\0';i++) d[i]=c1[i]; for(j=0;c2[j]!='\\0';j++) d[i+j]=c2[j]; d[i+j]='\\0'; printf(\ printf(\} main() { int i; char s[N],t[N]; printf(\ gets(s); printf(\ gets(t); len_cat(s,t); } (3) #include long fun ( char *p) { int i,j=0; for(i=0;*(p+i)!='\\0';i++) { if(*(p+i)=='-') printf(\ else j=j*10+(*(p+i)-48); } printf(\ printf(\} 32 金陵科技学院实验报告 main() { char s[N]; printf(\ gets(s); fun(s); } (4) #include int fun(char *ptr) { int i,j,k=0,a[N]; for(i=0;*(ptr+i)!='\\0';i++) { if(*(ptr+i)>='A'&&*(ptr+i)<='Z'||*(ptr+i)>='a'&&*(ptr+i)<='z') k++; a[k]=*(ptr+i); } return k; } main() { char s[N]; printf(\ gets(s); printf(\} (5) #include void fun(char s[]) { int i; for(i=0;i printf(\ } printf(\} main() { char s[N]; printf(\ gets(s); fun(s); 33