欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > C基础day9

C基础day9

2024/10/24 5:21:28 来源:https://blog.csdn.net/qq_55245263/article/details/140357126  浏览:    关键词:C基础day9

一、思维导图

二、课后练习

1> 使用递归实现 求 n 的 k 次方

#include<myhead.h>int Pow(int n,int k)
{if(k == 0 )  //递归出口{return 1;}else{return n*Pow(n,k-1);  	//递归主体}
}int main(int argc, const char *argv[])
{int n=0,k=0;printf("请输入n和k:");scanf("%d%d",&n,&k);int res = Pow(n,k);printf("%d的%d次方:%d\n",n,k,res);return 0;
}

2> 使用递归实现 strlen 的功能

#include<myhead.h>
#define Max_Size 100int Strlen_Dig(char str[Max_Size])
{char *ptr = str;if(*ptr == '\0') 	//递归出口{return 0;}else{return Strlen_Dig(ptr+1)+1; //指针偏移}
}int main(int argc, const char *argv[])
{while(1){printf("请输入字符串:");char str[Max_Size]; 	//定义字符数组gets(str); 				//输入字符数组int res = Strlen_Dig(str); //调用函数求数组长度printf("字符串的长度为:%d\n",res);}return 0;
}

3> 使用递归实现汉诺塔问题

#include<myhead.h>int Tower_Han(int n)
{//递归出口if(n == 1){return 1;}elsereturn Tower_Han(n-1)*2+1;
}int main(int argc, const char *argv[])
{int n = 0;printf("请输入汉诺塔的层数:");scanf("%d",&n);int res = Tower_Han(n);printf("%d层汉诺塔需要移动%d次\n",n,res);return 0;
}

4> 定义一个函数将一个字符串从大到小排序

#include<myhead.h>
#define Max_Size 100void Sort_Str(char str[Max_Size])
{char *ptr =str;int len = strlen(str); //求字符串长度//冒泡排序for(int i=1;i<len;i++){for(int j=0;j<len-i;j++){if(*(ptr+j) < *(ptr+j+1)) //降序排序{char temp = *(ptr+j);*(ptr+j) = *(ptr+j+1);*(ptr+j+1) = temp;}}}
}int main(int argc, const char *argv[])
{char str[Max_Size];//输入字符数组printf("请输入字符串");gets(str);//调用字符数组排序函数Sort_Str(str);//输出排序后的字符串puts(str);return 0;
}

5> 实现一个函数,用于检查一个字符串是否是回文字符串(正序和反序都相同)

#include<myhead.h>#define Max_Size 100void HuiWen(char str[Max_Size])
{//定义指针变量指向字符数组首位char *ptr = str;//求字符串长度int len = strlen(str);//判断上是否为回文字符串int i=0;for(i=0;i<len/2;i++){//判断字符串是否对称相等if(*(ptr+i) == *(ptr+len-1-i))continue;elsebreak;}//通过i判断上述判断进行位置if(i >= len/2)printf("该字符串是回文字符串\n");elseprintf("该字符串不是回文字符串\n");
}int main(int argc, const char *argv[])
{//定义一位字符数组存储字符串char str[Max_Size];//输入字符数组printf("请输入字符串:");gets(str);//调用函数判断HuiWen(str);return 0;
}

6> 使用指针完成判断自己的主机存储多字节整数时,是大端存储还是小端存储

#include<myhead.h>
int main(int argc, const char *argv[])
{int n =1;char *ptr = (char*)&n;if(*ptr == 1)printf("小端存储\n");elseprintf("大端存储\n");return 0;
}

7> 有一段文本,写一段程序统计其中的单词数。例如:Do one thing at a time, and do well.
(注意:单词间的间隔不一定是一个空格。)

#include<myhead.h>#define Max_size 100//判断字符是否为空白字符
int isWhitespace(char c) {return (c == ' ' || c == '\t' || c == '\n' || c == '\r');
}// 判断字符是否为标点符号
int isPunctuation(char c) {return (c == '.' || c == ',' || c == ';' || c == ':' || c == '!' || c == '?');
}// 计算文本中的单词数
int Num_Word(const char* str) {int inWord = 0;int wordCount = 0;while (*str) {// 跳过空白字符和标点符号while (isWhitespace(*str) || isPunctuation(*str)) {str++;}if (*str) { // 如果不是字符串末尾wordCount++; // 遇到单词的开始inWord = 1;// 继续往后找,直到遇到空白字符或标点符号while (*str && !isWhitespace(*str) && !isPunctuation(*str)) {str++;}}}return wordCount;
}int main(int argc, const char *argv[])
{//定义字符数组并输入char str[Max_size];printf("请输入字符串:");gets(str);//调用求单词数函数int res = Num_Word(str);printf("上述文本单词数量为:%d\n",res);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com