c语言题目

C语言第十次作业

一、改错题
(实习目的:程序阅读理解和程序调试技巧的掌握,数组作为函数参数,字符串和字符处理函数的巩固。)
1. 已知某字符串t由以下字符组成:数字、英文字母、圆括号、+、-、*、/、空白符(空白符包括空格、制表符\t、换行符\n)。函数str的功能是:删除t串中的括号和空白符,并将运算符集中到串的后端,数字、字母集中到串的前端。例如,t字符串为" (a+b)*c+5*3-x\n",若程序正确,则程序运行结果应为"axb3c5+**-+"。

注: 程序中含有4处错误,每处错误的改正只涉及一行语句的修改或增加,或者一个头文件包含。

含有错误的源程序如下:

#include<stdio.h>
#include<string.h>

void str(char t)
{ char temp; int i=0,j;
while(t[i])
if(isspace(t[i]) | |t[i]=='(' || t[i]==')')
{ j=i;
while(t[j]) t[j]=t[j+1],j++;
}
else i++;
puts(t);
i=0;
j=strlen(t)-1;
while(i<j)
{ while(isalpha(t[i]) || isdigit(t[i])) i++;
while(isalpha(t[j]) || isdigit(t[j])) j--;
if(i<j)
{ temp=t[i]; t[i]=t[j]; t[j]=temp;
i++; j--;
}
}
}

main()
{ char c[]=" (a+b)*c+5*3-x\n";
str(c);
puts(c[0]);
}

二、编程题
2. 按以下要求编写程序:
(1) 编写函数int countvalue(int aa[]),其功能是:求出500~800区间内的素数以及素数的个数cnt,将这些素数按从小到大的顺序依次存入aa指向的数组中,函数返回cnt的值。
(2)编写main()函数,调用countvalue()函数,将找到的所有素数按十个一行打印到屏幕上。
(实习目的:掌握数值型数组作为函数参数、函数返回值的作用,巩固判断素数的算法。)

3. 按以下要求编写程序:
(1) 编写函数int fun(char a[]),其功能是:删除a指向的字符串中所有数字字符,统计被删除数字字符的个数并将之作为返回值返回。
(2) 编写main()函数,调用fun()函数处理从键盘输入的包含数字字符的字符串,在屏幕上打印删除的字符个数以及删除数字字符之后的字符串。
(实习目的:掌握字符型数组作为函数参数、函数返回值的作用,字符串中删除操作,数字字符的判断。)

4. 按以下要求编写程序:
(1) 编写函数void fun(char xx[]),其功能是:在xx所指向的字符串中的所有数字字符之前分别插入1个字符'$'。例如,如果xx所指向的原字符串是"A1B23CD45",则变换后的字符串应为"A$1B$2$3CD$4$5"。
(2) 编写main()函数。从键盘输入一个包含数字字符的字符串,调用fun()函数对该字符串作变换处理,在屏幕上打印处理后的字符串。
(实习目的:掌握字符型数组作为函数参数,字符串中的插入操作,数字字符的判断。)

5. 按以下要求编写程序:
(1) 编写函数int gcd_max(int a[], int b[], int n),求长度为n的数组a中所有相邻两元素的最大公约数(共n-1个),并将之依次保存到数组b中,函数返回b数组中最大数的下标。
(2) 编写main()函数,声明一个数组并用以下测试数据对其初始化;调用函数gcd_max(),将求得的所有公约数、最大的公约数及其下标打印在屏幕上。
测试数据为:3,6,4,16,8,5,15,10,12,18
相应的输出应该是:3,2,4,8,1,5,5,2,6
max=8,max_index=3
(实习目的:掌握数值型数组作为函数参数,最大公约数算法的巩固,数组中的查找操作。)

第1个回答  2010-05-18
第一题如下
/*已知某字符串t由以下字符组成:数字、英文字母、圆括号、+、-、*、/、空白符(空白符包括空格、制表符\t、换行符\n)。函数str的功能是:删除t串中的括号和空白符,并将运算符集中到串的后端,数字、字母集中到串的前端。例如,t字符串为" (a+b)*c+5*3-x\n",若程序正确,则程序运行结果应为"axb3c5+**-+"。

注: 程序中含有4处错误,每处错误的改正只涉及一行语句的修改或增加,或者一个头文件包含。

含有错误的源程序如下:*/

#include<stdio.h>
#include<string.h>
#include<ctype.h>
void str(char *t)
{ char temp; int i=0,j;
while(t[i])
if(isspace(t[i]) ||t[i]=='(' || t[i]==')')
{ j=i;
while(t[j]) t[j]=t[j+1],j++;
}
else i++;
puts(t);
i=0;
j=strlen(t)-1;
while(i<j)
{ while(isalpha(t[i]) || isdigit(t[i])) i++;
while(!(isalpha(t[j]) || isdigit(t[j]))) j--;
if(i<j)
{ temp=t[i]; t[i]=t[j]; t[j]=temp;
i++; j--;
}
}
}

void main()
{ char c[]=" (a+b)*c+5*3-x\n";
str(c);
puts(&c[0]);
}
第2个回答  2010-06-02
第一题如下
/*已知某字符串t由以下字符组成:数字、英文字母、圆括号、+、-、*、/、空白符(空白符包括空格、制表符\t、换行符\n)。函数str的功能是:删除t串中的括号和空白符,并将运算符集中到串的后端,数字、字母集中到串的前端。例如,t字符串为" (a+b)*c+5*3-x\n",若程序正确,则程序运行结果应为"axb3c5+**-+"。

注: 程序中含有4处错误,每处错误的改正只涉及一行语句的修改或增加,或者一个头文件包含。

含有错误的源程序如下:*/

#include<stdio.h>
#include<string.h>
#include<ctype.h>
void str(char *t)
{ char temp; int i=0,j;
while(t[i])
if(isspace(t[i]) ||t[i]=='(' || t[i]==')')
{ j=i;
while(t[j]) t[j]=t[j+1],j++;
}
else i++;
puts(t);
i=0;
j=strlen(t)-1;
while(i<j)
{ while(isalpha(t[i]) || isdigit(t[i])) i++;
while(!(isalpha(t[j]) || isdigit(t[j]))) j--;
if(i<j)
{ temp=t[i]; t[i]=t[j]; t[j]=temp;
i++; j--;
}
}
}

void main()
{ char c[]=" (a+b)*c+5*3-x\n";
str(c);
puts(&c[0]);
}本回答被提问者采纳
相似回答