C语言编程 菜鸟练习100题(41-50)
【练习41】字符串翻转
0. 题目:
字符串翻转
1. 分析:
学习递归思想和方法。
2. 程序:
方法一:
#include <stdio.h>
void reverseSentence();
int main()
{
printf("输入一个字符串(非中文): ");
reverseSentence();
return 0;
}
void reverseSentence()
{
char c;
scanf("%c", &c);
if( c != '\n')
{
reverseSentence();
printf("%c",c);
}
}
【 解析】 这个程序非常简单巧妙:通过递归方法,不断读入当前的字符,直到字符串结束(读到回车符),然后逐次输出最近读入的字符,实现输出翻转的字符串。
方法二 :
#include <stdio.h>
#include <string.h>
int main()
{
char cInput[40];
printf("请输入字符串:");
scanf("%[^\n]s",cInput);
int j=strlen(cInput);
printf("strlen = %d\n",j);
do{
printf("%c",cInput[j-1]);
j--;
} while(j);
return 0;
}
【 解析】 这个程序更容易理解。注意 scanf()会在遇到的第一个空白字符空格(blank)、制表符(tab)或者换行符(newline)处停止读取,使用 scanf("%[^\n]s",cInput) 可以设置只有在读入回车符时才终止读取。
3. 输入输出:
输入一个字符串(非中文): Hello world!
!dlrow olleH
【练习42】计算数组元素的平均值
0. 题目:
计算数组元素平均值
1. 分析:
使用 for 循环。
2. 程序:
#include <stdio.h>
int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum, loop;
float avg;
sum = avg = 0;
for(loop = 0; loop < 10; loop++) {
sum += array[loop];
}
avg = (float)sum / loop;
printf("平均值为 %.2f", avg);
return 0;
}
3. 输入输出:
平均值为 4.50
【练习43】输出数组
0. 题目:
输出数组
1. 分析:
使用 for 循环输出数组。
2. 程序:
#include <stdio.h>
int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop;
for(loop = 0; loop < 10; loop++)
{
printf("%d ", array[loop]);
}
return 0;
}
3. 输入输出:
1 2 3 4 5 6 7 8 9 0
【练习44】计算数组元素之和
0. 题目:
计算数组元素之和
1. 分析:
使用 for 循环。
2. 程序:
#include <stdio.h>
int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum=0, loop;
for(loop = 9; loop >= 0; loop--)
{
sum = sum + array[loop];
}
printf("数组元素的和为:%d", sum);
return 0;
}
3. 输入输出:
数组元素的和为:45
【练习45】查找数组元素中的最大值
0. 题目:
查找数组元素中的最大值
1. 分析:
使用 for 循环。
2. 程序:
方法一:
#include <stdio.h>
int main() {
int array[10] = {3,2,1,4,7,6,5,8,0,9};
int loop, largest;
largest = array[0];
for(loop=1; loop<10; loop++)
{
if( largest < array[loop] )
largest = array[loop];
}
printf("数组的最大值为 %d", largest);
return 0;
}
方法二:
#include <stdio.h>
int main() {
int array[] = {3,2,1,4,7,6,5,8,0,9};
int loop, largest;
for(loop=0; loop<10; loop++)
largest=(array[loop] > largest)? array[loop] : largest;
printf("数组的最大值为 %d", largest);
return 0;
}
3. 输入输出:
数组的最大值为 9
4. 解析:
条件运算符?: 是三元运算符,语法为:条件表达式?表达式1:表达式2。该操作首先求出条件表达式的值(bool类型),true 执行表达式1,flase 执行表达式2。
【练习46】查找数组元素中的最小值
0. 题目:
查找数组元素中的最小值
1. 分析:
使用 for 循环。
2. 程序:
#include <stdio.h>
int main() {
int loop, nLen, nSmallest;
int array[] = {3,2,1,4,7,6,5,8,0,9};
nLen = sizeof(array)/sizeof(array[0]);
nSmallest = array[0];
for(loop = 1; loop < nLen; loop++)
{
if(nSmallest > array[loop])
nSmallest = array[loop];
}
printf("数组的最小值为 %d", nSmallest);
return 0;
}
3. 输入输出:
数组的最小值为 0
4. 解析:
使用关键字 sizeof 获取数组长度:用 sizeof 可以获得数据类型或变量在内存中所占的字节数,也可以获得整个数组在内存中所占的字节数。因为数组中元素的类型相同,在内存中所占的字节数也相同,所以数组总的字节数除以一个元素所占的字节数就是数组的长度。数组 array 是 int 型,每个元素占 4 字节,长度为 10 的数组在内存中所占的字节数就是 40。
【练习47】数组拆分
0. 题目:
将一个数组拆分为两个数组,一个为奇数数组,一个为偶数数组。
1. 分析:
使用 if...else...条件分支结构。
2. 程序:
#include <stdio.h>
int main() {
int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int even[10], odd[10];
int loop, e, d;
e = d = 0;
for(loop = 0; loop < 10; loop++)
{
if(array[loop]%2 == 0)
{
even[e] = array[loop];
e++;
}
else
{
odd[d] = array[loop];
d++;
}
}
printf(" 原始数组 --> ");
for(loop = 0; loop < 10; loop++)
printf(" %d", array[loop]);
printf("\n 偶数 --> ");
for(loop = 0; loop < e; loop++)
printf(" %d", even[loop]);
printf("\n 奇数 --> ");
for(loop = 0; loop < d; loop++)
printf(" %d", odd[loop]);
return 0;
}
3. 输入输出:
原始数组 --> 0 1 2 3 4 5 6 7 8 9
偶数 --> 0 2 4 6 8
奇数 --> 1 3 5 7 9
【练习48】数组拷贝
0. 题目:
将一个数组复制给另外一个数组
1. 分析:
数组复制属于值传递,复制的数组具有新的地址,复制后原数组与新数组的变化互不影响。
2. 程序:
#include <stdio.h>
int main() {
int original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int copied[10];
int loop;
for(loop = 0; loop < 10; loop++)
{
copied[loop] = original[loop];
}
printf("原数组 -> 拷贝数组 \n");
for(loop = 0; loop < 10; loop++)
{
printf("%2d\t%2d\n", original[loop], copied[loop]);
}
return 0;
}
3. 输入输出:
原数组 -> 拷贝数组
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
0 0
【练习49】计算标准偏差
0. 题目:
计算数组元素之和
1. 分析:
标准差(Standard Deviation)也称为标准偏差,反映一个数据集的离散程度。
2. 程序:
#include <stdio.h>
#include <math.h>
float calSD(float data[],int nLen);
int main()
{
int i,nLen;
float data[100];
printf("请输入数组长度: ");
scanf("%d", &nLen);
for(i=0; i < nLen; ++i)
{
printf("输入第 %d 个元素: ", i+1);
scanf("%f", &data[i]);
}
printf("\n标准偏差 = %.6f", calSD(data,nLen));
return 0;
}
float calSD(float data[],int nLen)
{
int i;
float sum, mean, standardDeviation;
sum = 0.0;
for(i=0; i<nLen; ++i)
sum += data[i];
mean = sum/nLen;
standardDeviation = 0.0;
for(i=0; i<nLen; ++i)
standardDeviation += pow(data[i] - mean, 2);
standardDeviation /= nLen;
return sqrt(standardDeviation);
}
3. 输入输出:
请输入数组长度: 10
输入第 1 个元素: 1
输入第 2 个元素: 2
输入第 3 个元素: 3
输入第 4 个元素: 4
输入第 5 个元素: 5
输入第 6 个元素: 6
输入第 7 个元素: 7
输入第 8 个元素: 8
输入第 9 个元素: 9
输入第 10 个元素: 10
标准偏差 = 2.872281
【练习50】两个矩阵相加
0. 题目:
使用多维数组将两个矩阵相加。
1. 分析:
练习使用 for 循环嵌套,多维数组的表达。
2. 程序:
#include <stdio.h>
int main()
{
int rows, cols, a[100][100], b[100][100], sum[100][100], i, j;
printf("输入行数 ( 1 ~ 100): ");
scanf("%d", &rows);
printf("输入列数 ( 1 ~ 100): ");
scanf("%d", &cols);
printf("\n输入第一个数组的元素:\n");
for(i=0; i<rows; ++i)
for(j=0; j<cols; ++j)
{
printf("输入元素 a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}
printf("输入第二个数组的元素:\n");
for(i=0; i<rows; ++i)
for(j=0; j<cols; ++j)
{
printf("输入元素 b%d%d: ",i+1, j+1);
scanf("%d", &b[i][j]);
}
// 相加
for(i=0;i<rows;++i)
for(j=0;j<cols;++j)
sum[i][j] = a[i][j] + b[i][j];
// 显示结果
printf("\n二个数组相加结果: \n\n");
for(i=0;i<rows;++i)
{
for(j=0;j<cols;++j)
printf("%d\t",sum[i][j]);
printf("\n\n");
}
return 0;
}
3. 输入输出:
输入行数 ( 1 ~ 100): 2
输入列数 ( 1 ~ 100): 3输入第一个数组的元素:
输入元素 a11: 2
输入元素 a12: 3
输入元素 a13: 4
输入元素 a21: 5
输入元素 a22: 2
输入元素 a23: 3
输入第二个数组的元素:
输入元素 b11: -4
输入元素 b12: 5
输入元素 b13: 3
输入元素 b21: 5
输入元素 b22: 6
输入元素 b23: 3二个数组相加结果:
-2 8 7
10 8 6
版权说明:
题目和例程 源于 菜鸟教程,作者重新编写了程序、注释和算例,并增加了难点分析。
C语言编程 菜鸟练习100题(41-50)的更多相关文章
- C语言编程 菜鸟练习100题(21-30)
[练习21]计算自然数的和 0. 题目: 计算自然数的和 1. 分析: 练习使用 for 循环结构.for 循环允许一个执行指定次数的循环控制结构. 2. 程序: #include <stdio ...
- C语言编程 菜鸟练习100题(51-60)
[练习51]矩阵转置 0. 题目: 矩阵的转置 1. 分析: 练习使用 for 循环嵌套,多维数组的表达. 2. 程序: #include <stdio.h> int main() { i ...
- C语言编程 菜鸟练习100题(31-40)
[练习31]判断质数 0. 题目: 判断质数 1. 分析: 质数(prime number),指大于 1的.且除 1 和本身以外没有其他因数的自然数. 2. 程序: #include <stdi ...
- C语言编程 菜鸟练习100题(11-20)
[练习11]计算 int, float, double 和 char 字节大小 0. 题目: 计算 int, float, double 和 char 字节大小 1. 分析: 使用 sizeof 操作 ...
- C语言编程 菜鸟练习100题(01-10)
[练习1]输出 "Hello, World!" 0. 题目: 输出 "Hello, World!" 1. 分析: 使用 printf() 输出 "He ...
- C语言编程学习打造——做题游戏
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 数据结构+算法面试100题~~~摘自CSDN
数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...
- Go面试题精编100题
Golang精编100题 选择题 1. [初级]下面属于关键字的是()A. funcB. defC. structD. class 参考答案:AC 2. [初级]定义一个包内全局字符串变量,下 ...
- 华为C语言编程规范
DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...
随机推荐
- 2021年HW0day-奇安信 网康下一代防火墙 RCE漏洞细节
漏洞信息: 漏洞名称:奇安信 网康下一代防火墙 RCE漏洞. 漏洞性质:远程命令执行 漏洞利用特点:命令执行之后没有回显 利用方式:防火墙使用linux进行开发的,可以使用echo xxx >1 ...
- Semaphore自白:限流器用我就对了!
大家好,我是 Semaphore,我的中文名字叫"信号量",我来自 JUC(java.util.concurrent)家族. 我们家族有很多优秀的成员,比如:CountDownLa ...
- Mediapipe 在RK3399PRO上的初探(二)(自定义Calculator)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 机器学习03-sklearn.LinearRegression 源码学习
在上次的代码重写中使用了sklearn.LinearRegression 类进行了线性回归之后猜测其使用的是常用的梯度下降+反向传播算法实现,所以今天来学习它的源码实现.但是在看到源码的一瞬间突然有种 ...
- IDEA的Debug技巧
01_Debug简介和意义 什么是程序DeBug? Debug,是程序开发人员必会的一项调试程序的技能. 企业中程序开发和程序调试的比例为1:1.5,可以说如果你不会调试程序,你就没有办法从事编程工作 ...
- [BUAA2021软工助教]案例分析作业总结
目录 一.作业链接 二.优秀作业推荐 A+作业推荐 A作业推荐 三.总结 所有案例分析总结 特色与优点 问题与建议 不同类产品案例分析Bug汇总 CSDN问答社区.Stack Overflow.Seg ...
- hdu4665 DFS
题意: 给你一个字符串,问你能不能拆成两个相同的字符串,顺序不能改变. 思路: 咋一看数据有点大,搜索过不去,但想想优化的地方很多,而且每个字母最多出现四次,所以多几个剪纸应该 ...
- 基于Xposed Hook实现的Android App的协议算法分析小工具-CryptoFucker
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80962121 在进行Android应用的网络协议分析的时候,不可避免涉及到网络传 ...
- hdu3449 有依赖的背包问题
题意: 给你一些物品,每个物品有自己的价值和花费,每个物品都对应一个箱子,每个箱子有价钱,买这个物品必须买相应的箱子,给你一个价钱,问最多可以获得多少价值 <提示:多个物品可能同时对 ...
- PowerShell-6.文件操作
1.显示文本内容 Get-Content "°C:\\Program Files (x86)\\PsUpdate\\b.dat" 2.得到b.dat文件内容,然后把里面的所有'C' ...