【练习41】字符串翻转
0. 题目:
字符串翻转
1. 分析:
学习递归思想和方法。
2. 程序:
方法一:
#include
void reverseSentence();
int main()
{
printf("输入一个字符串(非中文): ");
reverseSentence();
return 0;
}
void reverseSentence()
{
char c;
scanf("%c", &c);
if( c != '\n')
{
reverseSentence();
printf("%c",c);
}
}
【 解析】 这个程序非常简单巧妙:通过递归方法,不断读入当前的字符,直到字符串结束(读到回车符),然后逐次输出最近读入的字符,实现输出翻转的字符串。
方法二 :
#include
#include
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
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 &#61; 0; loop <10; loop&#43;&#43;) {
sum &#43;&#61; array[loop];
}
avg &#61; (float)sum / loop;
printf("平均值为 %.2f", avg);
return 0;
}
3. 输入输出&#xff1a;
平均值为 4.50
【练习43】输出数组
0. 题目&#xff1a;
输出数组
1. 分析&#xff1a;
使用 for 循环输出数组。
2. 程序&#xff1a;
#include
int main() {
int array[10] &#61; {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop;
for(loop &#61; 0; loop <10; loop&#43;&#43;)
{
printf("%d ", array[loop]);
}
return 0;
}
3. 输入输出&#xff1a;
1 2 3 4 5 6 7 8 9 0
【练习44】计算数组元素之和
0. 题目&#xff1a;
计算数组元素之和
1. 分析&#xff1a;
使用 for 循环。
2. 程序&#xff1a;
#include
int main() {
int array[10] &#61; {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum&#61;0, loop;
for(loop &#61; 9; loop >&#61; 0; loop--)
{
sum &#61; sum &#43; array[loop];
}
printf("数组元素的和为&#xff1a;%d", sum);
return 0;
}
3. 输入输出&#xff1a;
数组元素的和为&#xff1a;45
【练习45】查找数组元素中的最大值
0. 题目&#xff1a;
查找数组元素中的最大值
1. 分析&#xff1a;
使用 for 循环。
2. 程序&#xff1a;
方法一&#xff1a;
#include
int main() {
int array[10] &#61; {3,2,1,4,7,6,5,8,0,9};
int loop, largest;
largest &#61; array[0];
for(loop&#61;1; loop<10; loop&#43;&#43;)
{
if( largest largest &#61; array[loop];
}
printf("数组的最大值为 %d", largest);
return 0;
}
方法二&#xff1a;
#include
int main() {
int array[] &#61; {3,2,1,4,7,6,5,8,0,9};
int loop, largest;
for(loop&#61;0; loop<10; loop&#43;&#43;)
largest&#61;(array[loop] > largest)? array[loop] : largest;
printf("数组的最大值为 %d", largest);
return 0;
}
3. 输入输出&#xff1a;
数组的最大值为 9
4. 解析&#xff1a;
条件运算符&#xff1f;: 是三元运算符&#xff0c;语法为&#xff1a;条件表达式&#xff1f;表达式1&#xff1a;表达式2。该操作首先求出条件表达式的值(bool类型)&#xff0c;true 执行表达式1&#xff0c;flase 执行表达式2。
【练习46】查找数组元素中的最小值
0. 题目&#xff1a;
查找数组元素中的最小值
1. 分析&#xff1a;
使用 for 循环。
2. 程序&#xff1a;
#include
int main() {
int loop, nLen, nSmallest;
int array[] &#61; {3,2,1,4,7,6,5,8,0,9};
nLen &#61; sizeof(array)/sizeof(array[0]);
nSmallest &#61; array[0];
for(loop &#61; 1; loop {
if(nSmallest > array[loop])
nSmallest &#61; array[loop];
}
printf("数组的最小值为 %d", nSmallest);
return 0;
}
3. 输入输出&#xff1a;
数组的最小值为 0
4. 解析&#xff1a;
使用关键字 sizeof 获取数组长度&#xff1a;用 sizeof 可以获得数据类型或变量在内存中所占的字节数&#xff0c;也可以获得整个数组在内存中所占的字节数。因为数组中元素的类型相同&#xff0c;在内存中所占的字节数也相同&#xff0c;所以数组总的字节数除以一个元素所占的字节数就是数组的长度。数组 array 是 int 型&#xff0c;每个元素占 4 字节&#xff0c;长度为 10 的数组在内存中所占的字节数就是 40。
【练习47】数组拆分
0. 题目&#xff1a;
将一个数组拆分为两个数组&#xff0c;一个为奇数数组&#xff0c;一个为偶数数组。
1. 分析&#xff1a;
使用 if...else...条件分支结构。
2. 程序&#xff1a;
#include
int main() {
int array[10] &#61; { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int even[10], odd[10];
int loop, e, d;
e &#61; d &#61; 0;
for(loop &#61; 0; loop <10; loop&#43;&#43;)
{
if(array[loop]%2 &#61;&#61; 0)
{
even[e] &#61; array[loop];
e&#43;&#43;;
}
else
{
odd[d] &#61; array[loop];
d&#43;&#43;;
}
}
printf(" 原始数组 --> ");
for(loop &#61; 0; loop <10; loop&#43;&#43;)
printf(" %d", array[loop]);
printf("\n 偶数 --> ");
for(loop &#61; 0; loop printf(" %d", even[loop]);
printf("\n 奇数 --> ");
for(loop &#61; 0; loop printf(" %d", odd[loop]);
return 0;
}
3. 输入输出&#xff1a;
原始数组 --> 0 1 2 3 4 5 6 7 8 9
偶数 --> 0 2 4 6 8
奇数 --> 1 3 5 7 9
【练习48】数组拷贝
0. 题目&#xff1a;
将一个数组复制给另外一个数组
1. 分析&#xff1a;
数组复制属于值传递&#xff0c;复制的数组具有新的地址&#xff0c;复制后原数组与新数组的变化互不影响。
2. 程序&#xff1a;
#include
int main() {
int original[10] &#61; {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int copied[10];
int loop;
for(loop &#61; 0; loop <10; loop&#43;&#43;)
{
copied[loop] &#61; original[loop];
}
printf("原数组 -> 拷贝数组 \n");
for(loop &#61; 0; loop <10; loop&#43;&#43;)
{
printf("%2d\t%2d\n", original[loop], copied[loop]);
}
return 0;
}
3. 输入输出&#xff1a;
原数组 -> 拷贝数组
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
0 0
【练习49】计算标准偏差
0. 题目&#xff1a;
计算数组元素之和
1. 分析&#xff1a;
标准差(Standard Deviation)也称为标准偏差&#xff0c;反映一个数据集的离散程度。
2. 程序&#xff1a;
#include
#include
float calSD(float data[],int nLen);
int main()
{
int i,nLen;
float data[100];
printf("请输入数组长度: ");
scanf("%d", &nLen);
for(i&#61;0; i {
printf("输入第 %d 个元素: ", i&#43;1);
scanf("%f", &data[i]);
}
printf("\n标准偏差 &#61; %.6f", calSD(data,nLen));
return 0;
}
float calSD(float data[],int nLen)
{
int i;
float sum, mean, standardDeviation;
sum &#61; 0.0;
for(i&#61;0; i
sum &#43;&#61; data[i];
mean &#61; sum/nLen;
standardDeviation &#61; 0.0;
for(i&#61;0; i
standardDeviation &#43;&#61; pow(data[i] - mean, 2);
standardDeviation /&#61; nLen;
return sqrt(standardDeviation);
}
3. 输入输出&#xff1a;
请输入数组长度: 10
输入第 1 个元素: 1
输入第 2 个元素: 2
输入第 3 个元素: 3
输入第 4 个元素: 4
输入第 5 个元素: 5
输入第 6 个元素: 6
输入第 7 个元素: 7
输入第 8 个元素: 8
输入第 9 个元素: 9
输入第 10 个元素: 10
标准偏差 &#61; 2.872281
【练习50】两个矩阵相加
0. 题目&#xff1a;
使用多维数组将两个矩阵相加。
1. 分析&#xff1a;
练习使用 for 循环嵌套&#xff0c;多维数组的表达。
2. 程序&#xff1a;
#include
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&#61;0; i
for(j&#61;0; j
{
printf("输入元素 a%d%d: ",i&#43;1,j&#43;1);
scanf("%d",&a[i][j]);
}
printf("输入第二个数组的元素:\n");
for(i&#61;0; i
for(j&#61;0; j
{
printf("输入元素 b%d%d: ",i&#43;1, j&#43;1);
scanf("%d", &b[i][j]);
}
// 相加
for(i&#61;0;i
for(j&#61;0;j
sum[i][j] &#61; a[i][j] &#43; b[i][j];
// 显示结果
printf("\n二个数组相加结果: \n\n");
for(i&#61;0;i
{
for(j&#61;0;j
printf("%d\t",sum[i][j]);
printf("\n\n");
}
return 0;
}
3. 输入输出&#xff1a;
输入行数 ( 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
版权说明&#xff1a;
题目和例程 源于 菜鸟教程&#xff0c;作者重新编写了程序、注释和算例&#xff0c;并增加了难点分析。
![b739ec46bb5c46d9c0aa4ce35ba1ea56.png](https://img8.php1.cn/3cdc5/156ea/696/966bdbcda2f9a069.x-ms-bmp)
关于找一找教程网
本站文章仅代表作者观点&#xff0c;不代表本站立场&#xff0c;所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章&#xff0c;希望广大程序员努力学习&#xff0c;让我们用科技改变世界。
[C语言编程 菜鸟练习100题(41-50)]http://www.zyiz.net/tech/detail-159554.html