【趣学C语言和数据结构100例】
问题描述
-
编写一个程序,将两个字符串 s1 和 s2 比较
-
编写一个程序,将字符数组 s2 中的全部字符复制到字符数组 s1 中,不用 strcpy 函数。复制时,‘0’ 也要赋值过去。“0”之后的字符不复制。
-
编写一个程序,求字符数组 s 的长度,不用 strlen 函数。数组 s 从键盘输入,长度不超过 50。
-
输入一行字符,统计其中有多少个单词,单词之间用空格分开。
-
利用递归方法求 5!
代码分析
21.字符串比较
分析:gets输入2个字符串s1和s2,如果s1>s2,输出一个整数:若 s1=s2,输出 0:若sl<s2,输出一个负数:输出的正数或负数的绝对值应是相比较的两个字符串相对应字符的 ASCI 码的差值。所以条件为!(ret=s1[index]-s2[index]) && s1[index]!=‘\0’ && s2[index]!=‘\0’。
22.字符串赋值,不用 strcpy 函数
分析:scanf输入2个字符串s1和s2,条件为s2[index] != ‘\0’,注意’0’ 也要赋值过去。跳出循环后, s1[index] = s2[index];。
23.字符串长度,不用 strlen 函数
分析:scanf输入1个字符串s1,条件为s[index++]!=‘\0’,用来计数。
24. 统计单词个数
分析:gets输入1个字符串s1,使用for循环,每次遇到’ '(空格),则计数。
25.初识递归
分析:递归在与定义func,并在func中使用func,和递归的结束条件。本题为递归求 5!,1.定义func(n),2.返回值为:return nfunc(n-1),递归的结束条件if(n1 || n0){return 1;} 否则一直return nfunc(n-1)
代码实现
#include <stdio.h>
//25的递归
int fact(int x){
int sum=0;
if(x==1 || x==0){
sum=1;
}
else{
sum=x*fact(x-1);
}
return sum;
}
int main()
{
// 21.编写一个程序,将连个字符串 s1 和 s2 比较,
// 如果s1>s2,输出一个整数:若 s1=s2,输出 0:若sl<s2,输出一个负数:
// 若s1>s2,输出一两个一个正数。不要用 strcmp 函数:字符串用 gets 函数读入。
// 输出的正数或负数的绝对值应是相比较的两个字符串相对应字符的 ASCI 码的差值。
// 例如,“A"和“C”相比,由于"A”<“℃”,应输出负数,同时由于'A'与'C的 ASCI 码差值为 2,
// 因此应输出"-2"。同理:“And”和"Aid"相比较,根据第2个字符比较结果,“n"比"i"大 5,因此应输出"5”
char s1[100] = {0};
char s2[50] = {0};
int index = 0,ret=0;
printf("输入字符串 s1: ");
gets(s1);
printf("输入字符串 s2: ");
gets(s2);
while(!(ret=s1[index]-s2[index]) && s1[index]!='\0' && s2[index]!='\0'){
index++;
}
printf("%d\n",ret);
// 22.编写一个程序,将字符数组s2 中的全部字符复制到字符数组 s1 中,不用 strcpy 函数。复制时, '0’也要赋值过去。“0’之后的字符不复制。
char s1[100] = {0};
char s2[50] = {0};
int index = 0;
printf("输入字符串 s1: ");
scanf("%s", s1);
printf("输入字符串 s2: ");
scanf("%s", s2);
while (s2[index] != '\0') {
s1[index] = s2[index];
index++;
}
s1[index] = s2[index];
printf("字符数组s2 中的全部字符复制到字符数组 s1的字符串:%s\n", s1);
// 23.编写一个程序,求字符数组s的长度,不用 stlen 函数。数组s山键盘输入,长度不超过 50.
char s[100] = {0};
int index = 0;
printf("输入字符串 s: ");
scanf("%s", s);
while(s[index++]!='\0'){
}
printf("宁符数组s的长度:%d\n", index-1);
// 24.输入一行字符,统计其中有多少个单词,单词之间用空格分开。
char s[100] = {0};
int num = 0;
printf("输入字符串 s: ");
gets(s);
for(int i=0;s[i]!='\0';i++){
if(s[i]==' '){
num++;
}
}
printf("宁符数组s的长度:%d\n", num);
// 25.利用递归方法求 5!
int n,num;
printf("输入递归方法的数:");
scanf("%d",&n);
num=fact(n);
printf("递归法求%d!的值为:%d",n,num);
return 0;
}