C语言编程练习1

题外话:我是一名五年制专转本学生,打算考晓庄软工。为了更有效地备考复习,我在优快云这个技术平台上分享一些自己做的C编程题。题目难免有疏漏之处,望大家多多指正!!!

1.编程求1+(1+2)+……+(1+2+……+n),n的值由键盘输入。要求使用for语句实现。
自己做题思路:(1)+(1+2)+(1+2+3),外循环确定有几对小括号。
在处理每对小括号内数字求和的时候,每对小括号内最大值由外循环的循环变量i来确定。
例如,当i为2,则内循环j从1自增到2,通过累加器s把第二个小括号内的数累加。
sum变量是把每次变量s累加到的值相加。最后实现累加的目的。
在这里插入图片描述
在这里插入图片描述

2.编写自定义函数main,函数功能是找出两个数的较小值。在主函数中输入两个数,分别保存在变量a和变量b,并且在主函数中调用函数min,输出a和b的较小值。
自己做题思路:这道题比较简单,自定义函数min里头我用到三目表达式(也称三元表达式)。当然也可以用双分支if来实现,选择三目表达式只是觉得它只用一行语句就能实现,语句精简,巧妙。主函数里头函数调用采用函数参数的形式,当然也可以选择函数语句或函数表达式。

在这里插入图片描述
在这里插入图片描述
3.利用递归方法求5!。
自己做题思路:首先5!=12345=120。再去分析一下,5!可以由4!乘上5得到,4!由3!乘上4得到,3!由2!乘上3得到,2!由1!乘上2得到,1!就是1本身(这也是唯一能确定的)。上述的方法就是递归法。递归就是一直调用该函数本身。

在这里插入图片描述
在这里插入图片描述
一般我们采用的是循环的方式来实现的,只需将自定义函数jiecheng里头改动一下,变量f是作为累成器,初始值必须是1,因为1乘上任何数为该数本身。如果f为0,最终的结果都是0。循环变量i也为1,因为阶乘是从1开始累乘的。以下是用循环实现的代码:
在这里插入图片描述
在这里插入图片描述

4.将一个数组逆序输出。
自己做题思路:这道题通过手动键盘输入10个数,再逆序输出。逆序输出的时候要注意,循环变量i是从N-1,即9的位置开始,再去自减,最后到0为止。sizeof()对应的格式字符应为%lu。若使用%d,会报错。%-3d是左对齐,即右补空格。

在这里插入图片描述
这里不知道为啥,当输入数组变量的时候,第一行的提示性文字会少了前一段内容,满是疑惑,可能是软件的问题。
在这里插入图片描述
在这里插入图片描述
5.下列程序中函数find_replace的功能是:在 s1指向的字符串中查找s2指向的字符串,并用s3指向的字符串替换在s1中找到的所有s2字符串。若s1字符串中没有出现s2字符串,则不做替换并使函数返回0,否则函数返回1。
自己做题思路:这道题就是替换指定的字符串。现对第一个test的替换进行简要分析。find_replace函数中for循环的目的是把s1数组里的每一个字符与s2数组中的字符依次比较是否相等。当i为10开始出现相等,故把i的值赋给j,以便确定test后一个字符的位置,该位置为14。s2[4]是等于\0的,条件成立,故把_program and test data.(其中_代表空格)复制到temp数组里头。再把actual复制到s1[10]开始的数组中,s1现存的数组元素为This is a actual。i=10+6=16,这个就是为了在替换好第一个test后(就是把i定位在actual的后面一个字符上),再次检索test字符串。最后,把temp数组连接到s1中,s1里面的数组元素为This is a actual program and test data.。后面的替换过程也是如此。

在这里插入图片描述
在这里插入图片描述

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值