实验八参考答案

更新时间:2023-12-26 04:13:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验八:参考答案

1、编程实现:判断一个字符串是否是回文,如是输出“yes”,不是输出“no”,字符串由键盘输入。(所谓回文就是正读和反读均一样,如“abba”、“123321”等就是回文)最后将字符串及判断结果输出到文件中,并将本人学号输入到文件中)(C语言源程序文件名为81.c,程序运行结果文件名为81.txt)

【参考程序】 #include #include void main()

{static char c[30]; int m,n,i; FILE *fp; clrscr();

fp=fopen(\ gets(c);

m=0;n=strlen(c)-1; while(m

if(m>=n) fprintf(fp, \else fprintf(fp, \

fprintf(fp, \ fclose(fp); }

2、编程实现:统计一行字符串中单词的个数,单词用1个或多个空格分割(尽量不要抄袭课堂上介绍的程序)。将原字符串和统计结果输入到文件中,并将本人学号输入到文件中)(C语言源程序文件名为82.c,程序运行结果文件名为82.txt) 【参考答案】

#include \void main()

{char s[81];int j,num=0;FILE *fp; fp=fopen(\ clrscr();gets(s); 将字符串输出到 fputs(s,fp); 文件中 for(j=1;s[j]!='\\0';j++) if(s[j-1]==' '&&s[j]!=' ')num++; 如果第一个单词前面没有空格,则单词数加1 if(s[0]!=' ')num++; fprintf(fp,\ fprintf(fp, \ fclose(fp); }

3、编程分别统计一个任意读入的字符串中字母字符、数字字符及其它字符的个数。(编程时请尽可能多用附录表中的有关字符操作函数,并将字符串及相关统计结果输出到文件中,最后将本人学号输入到文件中)(C语言源程序文件名为83.c,程序运行结果文件名为83.txt)。 【参考程序】

#include #include main()

{char c[50];

int i,alpha=0,numeric=0,other=0; FILE *fp; gets(c);

fp=fopen(\ for(i=0;c[i]!='\\0';i++)

{if(isalpha(c[i])) alpha++;

else if(isdigit(c[i])) numeric++; else other++;} fprintf(fp,\

fprintf(fp,\fprintf(fp, \fclose(fp); }

4、按下述排序方法编程实现对一维数组中n个元素的值从大到小排序。并将原数组及排序之后的数组输出到文件中,最后将本人学号输入到文件中)(C语言源程序文件名为84.c,程序运行结果文件名为84.txt)。

排序方法:先将a[0]~a[n-1]中的最大值和最小值分别交换到a[0]和a[n-1]中,再将a[1]~a[n-2]中的最大值和最小值分别交换到a[1]和a[n-2]中,??,其他依此类推。 【测试数据与运行结果】

测试数据:1 2 3 4 5 6 7 8 9 10 输出: 10 9 8 7 6 5 4 3 2 1 【 参考程序】 #include main()

{int n=10,i,j,middle,a[ ]={1,2,3,4,5,6,7,8,9,10}; int max,min,temp; FILE *fp; fp=fopen(\ for(i=0;i

{printf(\ printf(\ middle=n/2;

for(i=0; i<=middle-1;i++) {if (a[n-i-1]>a[i]) {temp=a[i];

a[i]=a[n-i-1]; a[n-i-1]=temp; }

max=a[i]; min=a[n-i-1];

for(j=i+1;jmax) {max=a[j]; a[j]=a[i]; a[i]=max; }

if(a[j]

a[j]=a[n-i-1]; a[n-i-1]=min; } } }

for(i=0;i

{printf(\ printf(\

fprintf(fp, \fclose(fp); }

5、现有10个十六进制数分别以字符串的形式存放在一个二维数组中,找出其中所有的素数,以十六进制形式和十进制形式将每个素数输出到文件中,最后将本人学号输入到文件中)(C语言源程序文件名为85.c,程序运行结果文件名为85.txt)。 【测试数据与运行结果】

测试数据:\输出: B3 179 11 17 1D 29 13 19 【参考程序】

#include main()

{char a[10][5]={\ int i,j,n,x; FILE *fp;

fp= fopen(\ for(i=0;i<10;i++) { n=0;

for(j=0;a[i][j]!='\\0';j++)

{if(a[i][j]>='A'&&a[i][j]<='Z')

x=a[i][j]-55; /* 'A'的ASCII码值为65 */ else

x=a[i][j]-48; /* 字符'0'的ASCII码值为48 */ n=n*16+x; /*将16进制数转换成10进制数*/ } x=2;

while(n%x!=0)x++; /*此循环判断n是否是素数*/ if(x==n) /*满足该条件表示n是素数*/ {printf(\ fprintf(fp,\ } }

fprintf(fp, \ fclose(fp); }

四、附加题:

6、编程实现下列功能:在字符串s中所有出现子串s1的后面插入子串s2。要求将原字符串s、s1、s2及结果s字符串输出到文件中,最后将本人学号输入到文件中)(C语言源程序文件名为86.c,程序运行结果文件名为86.txt)。 【测试数据与运行结果】

测试数据:s:"123452367" s1:"23" s2:"ab" 输出:123ab4523ab67 【参考程序】 #include #include main()

{char s[30]=\ int i=0,j,k,m,len2; FILE *fp;

fp= fopen(\

printf(\

fprintf(fp,\ len2=strlen(s2); /*求出字符串s2的长度*/ while(s[i]!='\\0') { j=0;

while(s[i]==s1[j]&&s1[j]!='\\0') /*在字符串s中找子串s1*/ { i++; j++; }

if(s1[j]=='\\0') /*该条件成立表示已在字符串s中找到了子串s1*/

{ for(k=strlen(s); k>=i; k--) /*此for循环的功能为在字符串s中出现子串s1 s[k+len2]=s[k]; 的后面挪出可以插入子串s2的位置*/

for(m=0;m

s[i+m]=s2[m]; 插入子串s2*/

}

i++; /*进入下一次循环,接着寻找s中还有没有子串s1*/ }

printf(\fprintf(fp, \fclose(fp); }

本文来源:https://www.bwwdw.com/article/3i9x.html

Top