《C语言程序设计》实验报告
----------------------------------------------------------------------------------------------
实验7 数组(二)
一、实验目的
(1)掌握字符数组和字符串的概念 (2)掌握字符串函数的使用
二、实验内容和步骤
1.填空题 (1)输入下面的程序中缺少的部分并运行,观察程序的运行结果。 #include\ 正确的运行结果:
int main() { char a[11]={\};
printf(\ 如果把11改成10: return 0; }
(2)以下给定程序的功能是从键盘上输入一个数字组成的字符串,将该字符串转换成一个十进制数。
#include
{ char s[10]; int i; int n=0; scanf(\ for(i=0;s[i]!='\\0';i++) n=n*10+s[i]-'0'; printf(\ return 0; }
(3)用strlen函数分别测量字符串str1和str2的长度,用strcmp函数比较两个字符串的大小,最后用strcat函数将字符串2连接到字符串1的后面并输出。
#include
int main()
{ char str1[80]=\ printf(\ printf(\ printf(\strlen(str1)); printf(\strlen(str2)); if(strcmp(str1,str2)>0) printf(\ else printf(\ strcat(str1,str2); printf(\ return 0; }
反思与总结:1.定义字符串数组的大小时,应多加上1(末尾的’\\0’);2.写字符串数组时,花括号{}可省略,’’’’不可省;3.用scanf()输入字符串数组时,a前面的&不带,因为数组名代表了数组的存储首地址,等价于&a[0];4. n=n*10+s[i]-'0'很欣赏的一个式子!
2.改错题 (1)将一个字符串中所有的大写字母转换为小写字母并输出。
#include
{ char str[80]=\ int i; printf(\ for(i=0;str[i]!='\\0';i++) if(str[i]>='A'&&str[i]<='Z') str[i]=str[i]+32; printf(\s\\n\ return 0; }
(2)先将字符串S中的字符按正序存放到t中,然后把s中的字符按逆序连接到t串的后面。
#include
int main() 正确的运行结果: { char s[80],t[80]; int i,len; printf(\ scanf(\ len=strlen(s); 如果删去t[2*len]='\\0';一行: for(i=0;i } t[len+i]=s[len-1-i]; t[2*len]='\\0'; printf(\ return 0; 反思与总结:红色一行易漏掉,这里的t[]不能自动末尾加‘\\0’,所以在用到字符串数组时一定要记得加上!(编程题(3)的道理与这里一样) 3.编程题 (1)编写一个程序实现在一个字符串中查找指定的字符,并输出指定的字符在字符串中出现的次数及位置,如果该字符串中不包含指定的字符,请输出提示信息。 #include { char a[30],ch; int b[10],i,j=0,m,flag=0; gets(a); scanf(\ 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 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++;