【练习21】计算自然数的和

0. 题目:

计算自然数的和

1. 分析:

练习使用 for 循环结构。for 循环允许一个执行指定次数的循环控制结构。

2. 程序:

#include <stdio.h>
int main()
{
int i, iNum, iSum; printf("输入一个正整数: ");
scanf("%d",&iNum); iSum = 0;
for(i=1; i <= iNum; i++)
{
iSum += i; // iSum = iSum + i;
}
printf("Sum = %d",iSum); return 0;
}

3. 输入输出:

输入一个正整数: 10

Sum = 55


【练习22】输出九九乘法口诀表

0. 题目:

输出九九乘法口诀表

1. 分析:

练习使用嵌套 for 循环。对于嵌套的循环结构,执行顺序是从内到外:先执行内层循环,再执行外层循环。

2. 程序:

#include<stdio.h>
int main()
{
int i = 0; //外层循环变量,控制行
int j = 0; //内层循环变量,控制列 for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%dx%d=%d\t",j,i,i*j);
//printf("%dx%d=%-4d",j,i,i*j); // %-4d 表示左对齐,4个字符位
}
printf("\n"); //每行输出完后换行
} return 0;
}

3. 输入输出:

1x1=1

1x2=2 2x2=4

1x3=3 2x3=6 3x3=9

1x4=4 2x4=8 3x4=12 4x4=16

1x5=5 2x5=10 3x5=15 4x5=20 5x5=25

1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36

1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49

1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64

1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81


【练习23】阶乘

0. 题目:

阶乘

1. 分析:

自然数 n 的阶乘写作n!,n!=1×2×3×...×n。

阶乘也可以递归方式定义:0!=1,n!=(n-1)!×n。

本题练习使用递归方法。

2. 程序:

#include <stdio.h>
long int multiplyNum(int n); // 声明子程序 int main()
{
int n;
printf("输入一个整数: ");
scanf("%d", &n);
printf("%d! = %ld", n, multiplyNum(n));
return 0;
} long int multiplyNum(int n)
{
if (n >= 1)
return n * multiplyNum(n-1); // n!=n*(n-1)!
else
return 1; // 0!=1
}

3. 输入输出:

输入一个整数: 10

10! = 3628800


【练习24】斐波那契数列

0. 题目:

斐波那契数列

1. 分析:

斐波那契数列以兔子繁殖为例引入,从第3项开始每一项都等于前两项之和。

可以使用循环方法求解,也可以使用递归方法求解。

2. 程序:

2.1 程序1:循环方法

#include <stdio.h>
int main()
{
int i, iNum, iFibOne, iFibTwo, nextTerm; printf("输出几项: ");
scanf("%d", &iNum); printf("斐波那契数列: ");
iFibOne = 1;
iFibTwo = 1;
for (i = 1; i <= iNum; i++)
{
printf("%d, ", iFibOne);
nextTerm = iFibOne + iFibTwo;
iFibOne = iFibTwo;
iFibTwo = nextTerm;
}
return 0;
}

2.2 程序2:递归方法

#include <stdio.h>
int Fibonacci(int n); // 声明子程序
int main() //递归方法
{
int i, iNum, iFibOne, iFibTwo, nextTerm; printf("输出几项: ");
scanf("%d", &iNum); printf("斐波那契数列: ");
for (i = 1; i <= iNum; i++)
{
printf("%d, ", Fibonacci(i));
}
return 0;
} int Fibonacci(int n)
{
return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2);
}

3. 输入输出:

输出几项: 10

斐波那契数列: 1, 1, 2, 3, 5, 8, 13, 21, 34,55,

【注意!】 虽然斐波那契数列经常被用做递归方法的练习,但循环方法的时间复杂度为O(n)、空间复杂度为O(1),都优于递归方法的时间复杂度为O(n^2)、空间复杂度为O(n)。求解斐波那契数列还可以使用通项公式方法、矩阵乘法实现,算法的性能更好。


【练习25】求两数的最大公约数

0. 题目:

求两数的最大公约数

1. 分析:

求两数的最大公约数,无论在求解算法还是编程方法上都有很多方法,本例程针对初学者给出的是最简单和便于理解的方法。

2. 程序:

#include <stdio.h>
int main()
{
int i, iNum1, iNum2, iGcd; printf("输入两个正整数,以空格分隔: ");
scanf("%d %d", &iNum1, &iNum2); for(i=1; i <= iNum1 && i <= iNum2; i++)
{
if(iNum1%i==0 && iNum2%i==0) // 判断 i 是否为最大公约数
iGcd = i;
} printf("%d 和 %d 的最大公约数是 %d", iNum1, iNum2, iGcd); return 0;
}

3. 输入输出:

输入两个正整数,以空格分隔: 81 153

81 和 153 的最大公约数是 9


【练习26】求两数最小公倍数

0. 题目:

求两数最小公倍数

1. 分析:

本例程练习使用 while 循环、简化的条件判断。

2. 程序:

#include <stdio.h>

int main()
{
int iNum1, iNum2, iMinMultiple;
printf("输入两个正整数,以空格分隔: ");
scanf("%d %d", &iNum1, &iNum2); // 判断两数较大的值,并赋值给 minMultiple
iMinMultiple = (iNum1>iNum2) ? iNum1 : iNum2; while(1) // 条件为 true
{
if( iMinMultiple%iNum1==0 && iMinMultiple%iNum2==0 )
{
printf("%d 和 %d 的最小公倍数为 %d", iNum1, iNum2,iMinMultiple);
break;
}
iMinMultiple++;
} return 0;
}

3. 输入输出:

输入两个正整数: 45 120

45 和 120 的最小公倍数为 360


【练习27】 循环输出26个字母

0. 题目:

循环输出26个字母

1. 分析:

学习 for 循环的格式:for(循环变量赋初值;循环条件;循环变量增值)

其中常用的循环变量类型是整数或浮点数,但也可以是其它类型,例如本例中的字符型变量。

此外,字符值是以 ASCII 码形式存放在内存单元中。C语言允许字符变量参与数值运算,即用字符的 ASCII 码参与运算。但 ASCII 码参与运算时需要注意避免数据溢出等错误。

2. 程序:

#include <stdio.h>
int main()
{
char cInput, cOut; printf("输入 U 显示大写字母,输入 L 显示小写字母: ");
scanf("%c", &cInput); if(cInput== 'U' || cInput== 'u')
{
for(cOut = 'A'; cOut <= 'Z'; cOut++)
printf("%c ", cOut);
}
else if (cInput== 'L' || cInput== 'l')
{
for(cOut = 'a'; cOut <= 'z'; cOut++)
printf("%c ", cOut);
}
else
printf("Error! 输入非法字符。"); return 0;
}

3. 输入输出:

输入 U 显示大写字母,输入 L 显示小写字母: L

a b c d e f g h i j k l m n o p q r s t u v w x y z


【练习28】判断数字为几位数

0. 题目:

判断数字为几位数

1. 分析:

学习 while 循环的基本格式:while(表达式){语句块}

2. 程序:

#include <stdio.h>
int main()
{
long lNum;
int iCount = 0; printf("输入一个整数: ");
scanf("%ld", &lNum);
printf("数字 %ld 是", lNum); while(lNum != 0)
{
lNum /= 10;
iCount++;
} printf(" %d 位数。", iCount);
return 0;
}

3. 输入输出:

输入一个整数: 1234500

数字是 7 位数。

【注意!】 由于例程中 lNum 的值被改变,因此在前后使用了两个 printf 语句进行输出。


【练习29】 计算一个数的 n 次方

0. 题目:

计算一个数的 n 次方

1. 分析:

学习 while 循环的基本格式:while(表达式){语句块}。

2. 程序:

#include <stdio.h>
int main()
{
int iBase, iExponent;
long lResult = 1; printf("请输入基数(整数): ");
scanf("%d", &iBase);
printf("请输入指数(整数): ");
scanf("%d", &iExponent); printf("power(%d,%d) ", iBase,iExponent);
while (iExponent != 0)
{
lResult *= iBase;
iExponent--;
}
printf(": %ld", lResult); return 0;
}

3. 输入输出:

请输入基数(整数): 2

请输入指数(整数): 10

power(2,10) : 1024


【练习30】判断回文数

0. 题目:

判断回文数

1. 分析:

如果将一个自然数各位数字反向排列后所得到的自然数与原数相等,则称为回文数。例如:1234321 是回文数,1234567不是回文数。

例程1 先对原数反序得到新数,再比较反序后的新数与原数的数值是否相等,这种方法思路简单,容易理解。例程1 并不产生新数,直接比较原数的正向、反向对应位置数字是否相同,这种方法更加简洁高效。

2. 程序:

2.1 程序1:比较反序后的新数与原数的数值是否相等

#include <stdio.h>
int main()
{
int iNum, iOriginal, iReversed, iRemainder; printf("输入一个整数: ");
scanf("%d", &iNum); iOriginal = iNum;
iReversed = 0;
// 将输入整数 iNum 的各位数字反向排列得到 iReversed
while( iNum!=0 )
{
iRemainder = iNum % 10; // 取个位数
iReversed = iReversed*10 + iRemainder;
iNum /= 10;
} // 判断反序后与原数是否相等
if (iOriginal == iReversed)
printf("%d 是回文数。", iOriginal);
else
printf("%d 不是回文数。", iOriginal); return 0;
}

2.2 程序2:直接比较原数的正向、反向对应位置字符是否相同

#include <stdio.h>
#include <string.h> // 字符数组操作
int main()
{
char cStr[99]; // 定义字符数组(字符串)
int i, iLen, iMark; printf("输入一个整数(或字符串): ");
gets(cStr); // 可以输入整数,但也是按字符串保存 iMark = 1; // 判断标志
iLen = strlen(cStr); // 字符串长度
for(int i=0;i<iLen/2;i++)
{
if (cStr[i]!=cStr[iLen-i-1]) // 比较原数的正反向对应位置字符
iMark = 0;
} if(iMark)
printf("%s 是回文串", cStr);
else
printf("%s 不是回文串", cStr);
return 0;
}

3. 输入输出:

输入一个整数: 1230321

1230321 是回文数


版权说明:

题目和例程 源于 菜鸟教程,作者重新编写了程序、注释和算例,并增加了难点分析。

C语言编程 菜鸟练习100题(21-30)的更多相关文章

  1. C语言编程 菜鸟练习100题(51-60)

    [练习51]矩阵转置 0. 题目: 矩阵的转置 1. 分析: 练习使用 for 循环嵌套,多维数组的表达. 2. 程序: #include <stdio.h> int main() { i ...

  2. C语言编程 菜鸟练习100题(31-40)

    [练习31]判断质数 0. 题目: 判断质数 1. 分析: 质数(prime number),指大于 1的.且除 1 和本身以外没有其他因数的自然数. 2. 程序: #include <stdi ...

  3. C语言编程 菜鸟练习100题(41-50)

    [练习41]字符串翻转 0. 题目: 字符串翻转 1. 分析: 学习递归思想和方法. 2. 程序: 方法一: #include <stdio.h> void reverseSentence ...

  4. C语言编程 菜鸟练习100题(11-20)

    [练习11]计算 int, float, double 和 char 字节大小 0. 题目: 计算 int, float, double 和 char 字节大小 1. 分析: 使用 sizeof 操作 ...

  5. C语言编程 菜鸟练习100题(01-10)

    [练习1]输出 "Hello, World!" 0. 题目: 输出 "Hello, World!" 1. 分析: 使用 printf() 输出 "He ...

  6. C语言编程学习打造——做题游戏

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  7. 数据结构+算法面试100题~~~摘自CSDN

    数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...

  8. Go面试题精编100题

    Golang精编100题 选择题 1.   [初级]下面属于关键字的是()A. funcB. defC. structD. class 参考答案:AC 2.   [初级]定义一个包内全局字符串变量,下 ...

  9. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

随机推荐

  1. Kubernets二进制安装(1)集群,软件,IP规划

    1.Kubernetes节点信息情况 主机名 简称 角色 IP地址 操作系统 mfyxw10.mfyxw.com mfyxw10 K8S代理节点1 192.168.80.10 CentOS7.7 mf ...

  2. 8.rabbitmq RPC模拟微服务架构中的服务调用

    标题 : 8.rabbitmq RPC模拟微服务架构中的服务调用 目录 : RabbitMQ 序号 : 8 { var connectionFactory = new ConnectionFactor ...

  3. Leetcode(337)-打家劫舍III

    小偷又发现一个新的可行窃的地点. 这个地区只有一个入口,称为"根". 除了根部之外,每栋房子有且只有一个父房子. 一番侦察之后,聪明的小偷意识到"这个地方的所有房屋形成了 ...

  4. Bootstrap微章

    给链接.导航等元素嵌套 span class="badge" 元素,可以很醒目的展示新的或未读的信息条目. <a href="#">Inbox &l ...

  5. docker镜像拉取、运行、删除

    1.拉取hello-world镜像并运行 docker pull hello-world 拉取hello-world镜像Using default tag: latestlatest: Pulling ...

  6. uni-app in action

    uni-app in action uni-app 实战 $ npm run dev:%PLATFORM% $ npm run build:%PLATFORM% app-plus app平台生成打包资 ...

  7. Apple iOS 触控按钮 自动关闭 bug

    Apple iOS 触控按钮 自动关闭 bug bug 轻点 iPhone 背面可执行操作 您可以轻点两下或轻点三下 iPhone 背面以执行某些操作,如向上或向下滚动.截屏.打开"控制中心 ...

  8. LeetCode 题解 593. Valid Square (Medium)

    LeetCode 题解 593. Valid Square (Medium) 判断给定的四个点,是否可以组成一个正方形 https://leetcode.com/problems/valid-squa ...

  9. website text select notes menu

    website text select notes menu website 文字选择笔记菜单(下划线, 标记, 复制, 分享) 下划线, 标记 https://time.geekbang.org/ ...

  10. CSS3 & Grid Layout All In One

    CSS3 & Grid Layout All In One W3C https://www.w3.org/TR/css-grid-1/ Grid Layout is a new layout ...