您好,欢迎来到九壹网。
搜索
您的当前位置:首页实验7数组

实验7数组

来源:九壹网


《C语言程序设计》实验报告

----------------------------------------------------------------------------------------------

实验7 数组(二)

一、实验目的

(1)掌握字符数组和字符串的概念 (2)掌握字符串函数的使用

二、实验内容和步骤

1.填空题 (1)输入下面的程序中缺少的部分并运行,观察程序的运行结果。 #include\"stdio.h\" 正确的运行结果:

int main() { char a[11]={\"I love you\"};

printf(\"%s\\n\ 如果把11改成10: return 0; }

(2)以下给定程序的功能是从键盘上输入一个数字组成的字符串,将该字符串转换成一个十进制数。

#include int main()

{ char s[10]; int i; int n=0; scanf(\"%s\ for(i=0;s[i]!='\\0';i++) n=n*10+s[i]-'0'; printf(\"n=%ld\\n\ return 0; }

(3)用strlen函数分别测量字符串str1和str2的长度,用strcmp函数比较两个字符串的大小,最后用strcat函数将字符串2连接到字符串1的后面并输出。

#include #include

int main()

{ char str1[80]=\"This Is a\ printf(\"String1 is:%s\\n\ printf(\"String2 is:%s\\n\ printf(\"Length of string1 is:%d\\n\strlen(str1)); printf(\"length of string2 is:%d\\n\strlen(str2)); if(strcmp(str1,str2)>0) printf(\"The max is:%s\\n\ else printf(\"The max is:%s\\n\ strcat(str1,str2); printf(\"Result is:%s\\n\ return 0; }

反思与总结:1.定义字符串数组的大小时,应多加上1(末尾的’\\0’);2.写字符串数组时,花括号{}可省略,’’’’不可省;3.用scanf()输入字符串数组时,a前面的&不带,因为数组名代表了数组的存储首地址,等价于&a[0];4. n=n*10+s[i]-'0'很欣赏的一个式子!

2.改错题 (1)将一个字符串中所有的大写字母转换为小写字母并输出。

#include int main()

{ char str[80]=\"This Is a c Program\"; int i; printf(\"String is:%s\\n\ for(i=0;str[i]!='\\0';i++) if(str[i]>='A'&&str[i]<='Z') str[i]=str[i]+32; printf(\"Result is:%s\\n\ return 0; }

(2)先将字符串S中的字符按正序存放到t中,然后把s中的字符按逆序连接到t串的后面。

#include

int main() 正确的运行结果: { char s[80],t[80]; int i,len; printf(\"\\nPlease enter string s:\"); scanf(\"%s\ len=strlen(s); 如果删去t[2*len]='\\0';一行: for(i=0;i}

t[len+i]=s[len-1-i]; t[2*len]='\\0';

printf(\"The result is:%s\\n\ return 0;

反思与总结:红色一行易漏掉,这里的t[]不能自动末尾加‘\\0’,所以在用到字符串数组时一定要记得加上!(编程题(3)的道理与这里一样)

3.编程题 (1)编写一个程序实现在一个字符串中查找指定的字符,并输出指定的字符在字符串中出现的次数及位置,如果该字符串中不包含指定的字符,请输出提示信息。

#include #include int main()

{ char a[30],ch;

int b[10],i,j=0,m,flag=0; gets(a); scanf(\"%c\ for(i=0;i<50;i++) if(a[i]==ch) { b[j]=i;j++;flag=1;} if(flag) { printf(\"次数为%d \ printf(\"位置分别为\\n\"); for(i=0;i(2)按照要求编写程序,有一行文字,不超过80个字符,分别统计其中英文大写字母,小写字母,数字,空格及其他字符的个数。

#include #include int main() { char str[80];

int i,d=0,x=0,s=0,k=0,q=0; gets(str); for(i=0;i<80;i++) { if(str[i]==32) k++; else if(str[i]>='A'&&str[i]<='Z') d++; else if(str[i]>='a'&&str[i]<='z') x++;

}

}

else if(str[i]==32) k++;

else if(str[i]>='0'&&str[i]<='9') s++; else q++;

printf(\"大写字母%d,小写字母%d \

printf(\"数字%d,空格%d,其他字符%d\\n\ return 0;

总结与反思:其他字符为68是因为str【80】,包括了‘\\0’

(3)要求程序的功能是将字符串逆序存放并输出。

#include #include int main()

{ char str1[20],str2[22]; int i,j; gets(str1); for(i=18,j=0;i>=0;i--,j++) str2[j]=str1[i]; str2[19]='\\0'; puts(str2); return 0; }

(4)下面程序的功能是将两个字符串连接起来并输出结果。

#include #include int main()

{ char str1[100],str2[10]; int i,j,k; gets(str1); gets(str2); for(i=0;;i+ if(str1[i]=='\\0') Chen空格bing回车键yu回车键 { k=i;break;} for(j=0;j<10;j++,k++) str1[k]=str2[j]; printf(\"%s\\n\ return 0; }

#include #include int main()

{ char str1[100],str2[10]; int i,j,k;

scanf(\"%s\ Chen空格bing回车键 scanf(\"%s\ for(i=0;;i++) if(str1[i]=='\\0') { k=i;break;} Chen空格bing空格yu回车键 for(j=0;j<10;j++,k++) str1[k]=str2[j]; printf(\"%s\\n\ return 0; }

总结与反思:1.有时候程序怎么都不对,可能是因为忘了break;2. scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:① 遇空格、“回车”、“跳格”键。② 遇宽度结束。③ 遇非法输入。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务