3. C语言预备知识
3.1 字符常量
题目:
熟悉 C 语言程序的字符常量输出的基本编写
源代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
int a1 = 20, a2 = 345, a3 = 700, a4 = 22;
int b1 = 56720, b2 = 9999, b3 = 20098, b4 = 2;
int c1 = 233, c2 = 205, c3 = 1, c4 = 6666;
int d1 = 34, d2 = 0, d3 = 23, d4 = 23006783;
printf("%d %d %d %d\n", a1, a2, a3, a4);
printf("%d %d %d %d\n", b1, b2, b3, b4);
printf("%d %d %d %d\n", c1, c2, c3, c4);
printf("%d %d %d %d\n", d1, d2, d3, d4);
return 0;
}
运行结果:
3.2 字符常量输出(2
题目:
熟悉 C 语言程序的字符常量输出的基本编写
说明:
%-9d中,d 表示以十进制输出,9 表示最少占 9 个字符的宽度,宽度不足以空格补齐,-表示左对齐。
综合起来,%-9d表示以十进制输出,左对齐,宽度最小为 9 个字符。
源代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
int a1 = 20, a2 = 345, a3 = 700, a4 = 22;
int b1 = 56720, b2 = 9999, b3 = 20098, b4 = 2;
int c1 = 233, c2 = 205, c3 = 1, c4 = 6666;
int d1 = 34, d2 = 0, d3 = 23, d4 = 23006783;
printf("%-9d %-9d %-9d %-9d\n", a1, a2, a3, a4);
printf("%-9d %-9d %-9d %-9d\n", b1, b2, b3, b4);
printf("%-9d %-9d %-9d %-9d\n", c1, c2, c3, c4);
printf("%-9d %-9d %-9d %-9d\n", d1, d2, d3, d4);
return 0;
}
运行结果:
3.3 字符常量输出(3
题目:
熟悉 C 语言程序的字符常量输出的基本编写
说明:
n 的指定输出宽度为 10,234 的宽度为 3,所以前边要补上 7 个空格
f 的指定输出宽度为 12,9.800000 的宽度为 8,所以前边要补上 4 个空格
str 的指定输出宽度为 8,“http://c.biancheng.net” 的宽度为 22,超过了 8,所以指定输出 宽度不再起作用,而是按照 str 的实际宽度输出
源代码:
int main(){
int n = 234;
float f = 9.8;
char c = '@';
char *str = "http://c.biancheng.net";
printf("%10d%12f%4c%8s", n, f, c, str);
return 0;
}
运行结果:
3.4 字符常量输出(4
题目:
熟悉 C 语言程序的字符常量输出的基本编写
说明:
对于n,.precision 表示最小输出宽度。n 本身的宽度为 6,当 precision 为 9 时,大于 6, 要在 n 的前面补 3 个 0;当 precision 为 4 时,小于 6,不再起作用
对于f,.precision 表示输出精度。f 的小数部分有 6 位数字,当 precision 为 2 或者 4 时, 都小于 6,要按照四舍五入的原则截断小数;当 precision 为 10 时,大于 6,要在小数的 后面补四个 0
对于str,.precision 表示最大输出宽度。str 本身的宽度为 9,当 precision 为 5 时,小 于 9,要截取 str 的前 5 个字符;当 precision 为 15 时,大于 9,不再起作用
源代码:
int main() {
int n = 123456;
double f = 882.923672;
char* str = "abcdefghi";
printf("n: %.9d %.4d\n", n, n);
printf("f: %.2lf %.4lf %.101f\n", f, f, f);
printf("str: %.5s %.15s\n", str, str);
return 0;
}
运行结果:
3.5 字符常量输出(5
题目:
熟悉 C 语言程序的字符常量输出的基本编写
说明:
当以%10d 输出 m 时,是右对齐,所以在 192 前面补七个空格;当以%-10d 输出 m 时, 是左对齐,所以在 192 后面补七个空格
m 是正数,以%+d 输出时要带上正号;n 是负数,以%+d 输出时要带上负号
m 是正数,以% d 输出时要在前面加空格;n 是负数,以% d 输出时要在前面加负号
%.0f 表示保留 0 位小数,也就是只输出整数部分,不输出小数部分
默认情况下,这种输 出形式是不带小数点的,但是如果有了#标志,那么就要在整数的后面“硬加上”一个小数点, 以和纯整数区分开
源代码:
int main() {
int m = 192, n = -943;
float f = 84.342;
printf("m=%10d,m=%-10d\n", m, m);//演示 - 的用法
printf("m=%+d,n=%+d\n", m, n);//演示 + 的用法
printf("m = % d, n = % d\n", m, n);//演示空格的用法
printf("f=%0.f,f=%#0.f\n", f, f);//演示#的用法
return 0;
}
运行结果:
4. 顺序结构程序设计
4.1 scanf 函数的用法
题目:
熟悉 C 语言程序的scanf 函数的用法
说明:
从键盘输入 12,按下回车键,scanf() 就会读取输入数据并赋值给变量 a;本次输入结束,接着执行下一个 scanf() 函数,再从键盘输入 60,按下回车键,就会将 60 赋值 给变量 b,都是同样的道理。
第 8 行代码中,scanf() 有两个以空格分隔的%d,后面还跟 着两个变量,这要求我们一次性输入两个整数,并分别赋值给 c 和 d。
注意"%d %d"之间 是有空格的,所以输入数据时也要有空格。
对于 scanf(),输入数据的格式要和控制字符串 的格式保持一致。
源代码:
#include <stdio.h>
#include <stdlib.h>
//案例1
int main()
{
int a = 0,b = 0,c = 0,d = 0;
scanf("%d",&a);
scanf("%d",&b);
printf("a+b=%d\n",a+b);
scanf("%d %d",&c,&d);
printf("c*d=%d\n",c*d);
return 0;
}
运行结果:
4.2 %p格式控制符
题目:
熟悉 C 语言程序的%P格式控制符用法
说明:
%p 是一个新的格式控制符,它表示以十六进制的形式(带小写的前缀)输出数据的地址。
如果写作%P,那么十六进制的前缀也将变成大写形式
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 'F';
int b = 12;
int c = 452;
printf("&a=%p,&b=%p,&c=%p\n",&a,&b,&c);
return 0;
}
运行结果:
4.3 格式控制字符串的用法
题目:
熟悉 C 语言程序的格式控制字符串的用法
说明:
第一个 scanf() 的格式控制字符串为"%d %d",中间有一个空格,而我们却输入了 10 20, 中间有多个空格
第二个 scanf() 的格式控制字符串为"%d %d",中间有多个空格,而 我们却输入了 100 200,中间只有一个空格。这说明 scanf() 对输入数据之间的空格的处 理比较宽松,并不要求空格数严格对应,多几个少几个无所谓,只要有空格就行
第三个 scanf() 的控制字符串为"%d, %d, %d",中间以逗号分隔,所以输入的整数也要以逗号分 隔
第四个 scanf() 要求整数之间以 is bigger than 分隔。 用户每次按下回车键,程序就会认为完成了一次输入操作,scanf() 开始读取用户输入的内 容,并根据格式控制字符串从中提取有效数据,只要用户输入的内容和格式控制字符串匹配, 就能够正确提取。
本质上讲,用户输入的内容都是字符串,scanf() 完成的是从字符串中提取有效数据的过程
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
printf("a+b=%d\n", a+b);
scanf("%d %d",&a,&b);
printf("a+b=%d\n",a+b);
scanf("%d %d %d",&a,&b,&c);
printf("a+b+c=%d\n",a+b+c);
scanf("%d is bigger than %d",&a,&b);
printf("a-b=%d\n",a-b);
return 0;
}
运行结果:
4.4 变量赋值的用法
题目:
熟悉 C 语言程序的变量赋值的用法
说明:
前两个整数被正确读取后,剩下了 a10,而第三个 scanf() 要求输入两个十进制的整数,a10 无论如何也不符合要求,所以只能读取失败。
输出结果也证明了这一点,c 和 d 的值并没有被改变。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 1,b = 2,c = 3,d = 4; //修改处:给变量赋予不同的初始值
scanf("%d",&a);
scanf("%d",&a);
printf("a=%d,b=%d\n",a,b);
scanf("%d %d",&c,&d);
printf("c=%d,d=%d\n",c,d);
return 0;
}
运行结果:
4.5 scanf 函数的用法(2
题目:
熟悉 C 语言程序的变量赋值的用法
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char letter;
int age;
char url[30];
float price;
scanf("%c",&letter);
scanf("%d",&age);
scanf("%s",url);
scanf("%f",&price);
printf("26个英文字母最后一个是 %c \n",letter);
printf("我的网站已经成立%d年了,网站是%s,开通VIP会员的价格是 %g \n", age,url,price);
return 0;
}
运行结果:
4.6 三个数找最大值
题目:
三个数找最大值
源代码:
#include <stdio.h>
#include <stdlib.h>
int max(int x,int y){
int t;
t=x>y?x:y;
return t;
}
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int maxs=max(a,max(b,c));
printf("%d",maxs);
}
运行结果:
4.7 素数判断
题目:
素数判断
源代码:
#include <stdio.h>
int main() {
int n;
printf("请输入一个1-100之间的整数:\n");
scanf("%d", &n);
int m = 0;
for (int i = 2; i < n; i++ ) {
if(n % i == 0) {
m++;
}
}
if (m == 0) {
printf("%d是素数\n", n);
} else {
printf("%d不是素数\n", n);
}
return 0;
}
运行结果:
4.8 编程输出如图所示的三角形
题目:
编程输出如图所示的三角形
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b;
for(a=0;a<4;++a){
for(b=0;b<=a;++b){
printf("☆");
}
printf("\n");
}
return 0;
}
运行结果:
4.9 求圆面积和圆周长,给定圆半径值为5
题目:
编程求圆面积和圆周长 给定圆半径值为 5
(1)定义浮点型变量使用关键字 double
(2)浮点型数据输出的格式控制符是 %lf
(3)C 语言中没有∏这个符号,编写程序时直 接使用 3.14159
(4)C 语言中没有求次方的运算符,半径的平 方需用乘号(r*r)
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
double radius;//半径
double area;//面积
double perimeter;//周长
printf("圆半径: ");
scanf("%lf",&radius);
//printf("圆半径: %lf \n",&radius);
area = 3.14159 *(radius*radius);
printf("圆面积: %lf \n",area);
perimeter = 2 * 3.14159 * radius;
printf("圆周长: %lf \n",perimeter);
return 0;
}
运行结果:
5. 顺序结构程序设计
5.1 printf( )函数的编程练习
题目:
编程输出如图所示的三角形
源代码:
#include <stdio.h>
#include <stdlib.h>
//printf实现五角星
int main()
{
printf("*\n");
printf("**\n");
printf("***\n");
printf("****\n");
return 0;
}
运行结果:
5.2 scanf( )函数编程练习、练习除号的使用规则(1
题目:
编写一个摄氏温度与华氏温度之间的转换程序, 转换公式是:F=9/5C+32
该公式中的“C”是一个从键盘输入的已知量; “F”是通过公式计算并打印出来的未知量。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float c,f;
printf("请输入一个摄氏温度值:");
scanf("%f",&c);
f=(9.0/5.0*c)+32.0;
printf("对应的华氏温度是:%f\n",f);
return 0;
}
运行结果:
5.3 scanf( )函数编程练习、练习除号的使用规则(2
题目:
编写程序,从键盘上输入两个电阻值,求它们并联电阻值和串联电阻值,输 出结果保留两位小数
提示:
并联电阻 RP = R1*R2/R1+R2
串联电阻 RS = R1+R2
(1)scanf( )函数可以写成 scanf("%d,%d", &r1, &r2);
(2)结果保留两位小数的格式说明符是“%.2lf”。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r1,r2;
double rp,rs;
printf("请输入两个电阻值:");
scanf("%d,%d",&r1,&r2);
rp=1.0/(1.0/r1+1.0/r2);
rs=r1+r2;
printf("并联电阻值:%.2lf\n",rp);
printf("串联电阻值:%.2lf",rs);
return 0;
}
运行结果:
5.4 scanf( )函数编程练习、练习除号的使用规则(3
题目:
从键盘输入两个两位的正整数,按照以下格式组装成一个四位的正整数。例如:输入12和34,组装成的四位数是1324。
提示:
(1)首先利用“除号”和“求余号”分别把两个两位正 整数的十位数、个位数分离开;再经过数学运算组装成一个四位数。
(2)scanf( )函数可以写成 scanf("%d%d", &a, &b);
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c,d,e,f,j,h;
printf("请输入两个两位的正整数:");
scanf("%d%d",&a,&b);
//个
c=a%10;
d=b%10;
//十
e=a/10;
f=b/10;
j=c*10+d;
h=e*10+f;
printf("组合成的四位正整数是:%d%d\n",h,j);
return 0;
}
运行结果:
5.5 字符的输入和输出(1
题目:
使用以下指定的方法编写程序,打印如图所示图形。
提示:
使用 printf 函数的“%c”格式打印该图形。
用“%c”打印字符时,一个“%c”只能打印一个字符。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a,b,c,d;
a='a';
b='b';
c='c';
d='d';
printf("%c\n",a);
printf("%c",b);
printf("%c\n",b);
printf("%c",c);
printf("%c",c);
printf("%c\n",c);
printf("%c",d);
printf("%c",d);
printf("%c",d);
printf("%c\n",d);
return 0;
}
运行结果:
5.6 字符的输入和输出(2
题目:
从键盘输入3个数字字符,将它们分别转换为对应的整数值 (即字符’0’转换为整数0,字符’1’转换为整数1,依次类推),然后求3个整数的 平均值。
提示:
本题的变量定义可参考如下:
char a, b, c; //变量a,b,c保存输入的3个数字字符
int x, y, z; //变量x,y,z保存转换后的3个整数
double aver; //变量aver保存求出的平均值
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a,b,c;
int x,y,z;
double aver;
printf("请输入3个数字字符:");
scanf("%c%c%c",&a,&b,&c);
x=a-48;
y=b-48;
z=c-48;
aver=(x+y+z)/3.0;
printf("平均值 = %2lf",aver);
return 0;
}
运行结果:
5.7 数学函数的使用
题目:
输入三角形的三条边长,求三角形的面积。
提示:
(1)本题的变量定义可参考如下: int a, b, c; double x, s;
(2)scanf( )函数可以写成 scanf("%d,%d,%d", &a, &b, &c);
(3)计算三角形面积的公式是:
s = x ∗ ( x − a ) ∗ ( x − b ) ∗ ( x − c ) 其 中 x = 1 2 ∗ ( a + b + c ) s = \sqrt{x*(x - a)*(x - b)*(x - c)}其中 x = \frac{1}{2}*(a + b + c) s=x∗(x−a)∗(x−b)∗(x−c)其中x=21∗(a+b+c)
(4)求 x 的开方值的库函数是 sqrt(x),使用时需包含头文件 math.h
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a,b,c;
double x,s;
printf("请输入三角形的三边:");
scanf("%d,%d,%d",&a,&b,&c);
x=1.0/2.0*(a+b+c);
s=sqrt(x*(x-a)*(x-b)*(x-c));
printf("三角形面积为:%lf",s);
return 0;
}
运行结果:
6. 选择结构程序设计
6.1 单分支 if 语句编程练习
题目:
从键盘任意输入 3 个整数,选出其中的最大数并打印。
提示:
(1) 要判断最大数,需对每两个数作两两比较。
(2) 可以使用 3 个单分支 if 语句编写程序。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;
printf("请输入3个整数:");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b&&c<a)
printf("最大数是:%d",a);
if(b>c&&b>a)
printf("最大数是:%d",b);
if(c>a&&c>b)
printf("最大数是:%d",c);
return 0;
}
运行结果:
6.2 双分支 if 语句编程练习
题目:
从键盘输入三个正整数,判断否能构成三角形的三边?
如果能,就按照以下 提示的数学公式计算三角形的面积;如果不能,就输出“不能构成三角形”的 提示信息。
提示:
(1) 该题属于“双分支 if-else 语句”结构。
(2) 能构成三角形的逻辑条件是:任意的两边之和均要大于第三边。
(3) 计算三角形面积的公式是:
s = x ∗ ( x − a ) ∗ ( x − b ) ∗ ( x − c ) 其 中 x = 1 2 ∗ ( a + b + c ) s = \sqrt{x*(x - a)*(x - b)*(x - c)}其中 x = \frac{1}{2}*(a + b + c) s=x∗(x−a)∗(x−b)∗(x−c)其中x=21∗(a+b+c)
(4)本题的变量定义可参考如下:int a, b, c; double x, s;
(5)本题要用到求开方值的数学库函数 sqrt( ),需包含头文件 math.h
例如:写成 sqrt(x) 即能够求出 x 的开方值。
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a,b,c;
double x,s;
printf("请输入三个整数:");
scanf("%d,%d,%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a){
x=1.0/2.0*(a+b+c);
s=sqrt(x*(x-a)*(x-b)*(x-c));
printf("三角形面积为:%lf",s);
}else{
printf("不能构成三角形");
}
return 0;
}
运行结果:
6.3 多分支 if 语句编程练习
题目:
从键盘输入一个合法的算术运算符(+、-、*、/)及两个实数,使用 if 语句 编写程序,根据输入的运算符判断对这两个实数进行何种运算,并打印运算结果(要求结果保留两位小数)。
提示:
(1)该题属于“多分支 if 语句”结构。
(2)运算符是字符,存放运算符的变量是 char 型,scanf( )输入时应使用%c。
(3)本题的变量定义可参考如下:char fu; double x, y, z;
(4)但是不允许使用 switch 语句编写该题程序。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char fu;
double x,y,z;
printf("请输入1个算术运算符和2个浮点数:");
scanf("%c,%lf,%lf",&fu,&x,&y);
if(fu=='+'){
z=x+y;
printf("%lf + %lf = %lf",x,y,z);
}else if(fu=='-'){
z=x-y;
printf("%lf - %lf = %lf",x,y,z);
}else if(fu=='*'){
z=x*y;
printf("%lf * %lf = %lf",x,y,z);
}
else if(fu=='/'){
z=x/y;
printf("%lf / %lf = %lf",x,y,z);
}else{
printf("运算符非法,无法参与运算");
}
//printf("%c\n",fu);
//printf("%lf和%lf",x,y);
return 0;
}
运行结果:
6.4 if 语句的嵌套结构编程练习
题目:
从键盘输入3个正整数,判断否能构成三角形的三边?
如果能,判断是构成 哪一种三角形(正三角形,还是等腰三角形,还是直角三角形,还是普通三角形);
如果不能,就输出“不能构成三角形”的提示信息。
提示:
(1)该题属于“if 语句的嵌套”结构。
(2)外层 if 语句是双分支结构,判断能否构成三角形(能构成三角形的逻辑条 件是:任意两边之和均要大于第三边)。
(3)内层 if 语句是多分支结构,第一步判断等边三角形,第二步判断等腰三角形,第三步判断直角三角形,最后是普通三角形。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;
printf("请输入三个整数:");
scanf("%d,%d,%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a){
if(a==b&&b==c){
printf("能构成等边三角形");
}else if(a==b&&b!=c){
printf("能构成等腰三角形");
}else if(a<b&&b<c){
printf("能构成直角三角形");
}else{
printf("能构成普通三角形");
}
}else{
printf("不能构成三角形");
}
return 0;
}
运行结果:
6.5 switch 语句编程练习
题目:
输入一个年份和一个月份,使用 switch 语句编程判断并打印该月的天数。
提示:
(1)本题先使用if语句判断输入月份的有效性,如果月份有效,再使用switch 语句判断月份对应的天数。
(2)为简化题目难度,本题不对年份作有效性判断,默认输入的是一个有效年 份。只对月份作有效性判断,当输入月份无效时,要给出提示信息。 (3)对于2月份的处理需要判断闰年,闰年的判断参考教材P62例3.8。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year,month;
printf("请输入一个年份和一个月份:");
scanf("%d,%d",&year,&month);
if(month<13){
switch(month){
case 1:
printf("%d年%月有31天",year,month);break;
case 2:
if((year%4==0&&year%100!=0)||(year%400==0)){
printf("%d年%月有29天",year,month);
}else{
printf("%d年%月有28天",year,month);break;
}
case 3:
printf("%d年%月有31天",year,month);break;
case 4:
printf("%d年%月有30天",year,month);break;
case 5:
printf("%d年%月有31天",year,month);break;
case 6:
printf("%d年%月有30天",year,month);break;
case 7:
printf("%d年%月有31天",year,month);break;
case 8:
printf("%d年%月有31天",year,month);break;
case 9:
printf("%d年%月有30天",year,month);break;
case 10:
printf("%d年%月有31天",year,month);break;
case 11:
printf("%d年%月有30天",year,month);break;
case 12:
printf("%d年%月有31天",year,month);break;
}
}else{
printf("输入的月份为非法值\n");
}
return 0;
}
运行结果:
7. 循环结构程序设计
7.1 while语句编程练习
题目:
使用 while 语句编程计算 “1+2+3+4+ … +100 ”
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 1,sum = 0;
while(i<=100)
{
sum=sum + i;
i++;
}
printf("1+2+3+4...+100=%d\n",sum);
return 0;
}
运行结果:
7.2 while语句编程练习(2
题目:
从键盘输入一行字符(以回车作为输入结束标志),统计输入字符 的个数。(使用 while 语句)
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char c;
i=0;
printf("键盘输入一行字符:");
c=getchar();
while(c!='\n'){
c=getchar();
i++;
}
printf("%d",i);
return 0;
}
运行结果:
7.3 do-while语句编程练习(1
题目:
使用 do-while 语句编程计算 “1+2+3+4+ … +100 ”
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=1,sum=0;
do{
sum = sum+i;
i++;
}while(i<=100);
printf("1+2+3+4...+100=%d\n",sum);
return 0;
}
运行结果:
7.5 while语句编程练习(3
题目:
根据以下公式求∏ 的值,当某项小于 0.0005 时停止迭代。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
double s=1;
float pi,sum=0,t=1,n=1;
while(fabs(s)>=1e-6){
pi+=s;
t=n/(2*n+1);
s*=t;
n++;
}
pi=pi*2;
printf("pi=%lf",pi);
return 0;
}
运行结果:
7.6 for语句编程练习(1
题目:
编程求斐波拉契数列的前 20 项。
(斐波拉契数列的第 1、2 项分别 为 0、1,以后各项的值都是前两项之和)
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int f1=0,f2=1,f3;
int i;
printf("%d\t%d",f1,f2);
for(i=3;i<=20;i++){
f3=f1+f2;
printf("%d\t",f3);
f1=f2;
f2=f3;
}
return 0;
}
运行结果:
7.7 for语句编程练习(2
题目:
编程求所有的水仙花数。(所谓水仙花数是指一个三位数,其各位 数字的立法和等于该数本身。例如:153 是水仙花数,因为 153=13+53+33)
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int ge,shi,bai,i,sum;
for(i=100;i<1000;i++){
ge=i%10;
shi=i%100/10;
bai=i/100;
sum=pow(ge,3)+pow(shi,3)+pow(bai,3);
if(i==sum){
printf("%d\t",i);
}
}
return 0;
}
运行结果:
7.8 while语句编程练习(4
题目:
使用 while 语句编程求 100 以内能被 5 整除但不能同时被 7 整除的数,并统 计找到的数的个数。
提示:
(1)该题变量可定义为:int i, sum=0;
(2)整除问题使用求余号“%”。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,sum=0;
printf("100以内能被5整除但不能同时被7整除的数是:\n");
i=1;
while(i<101){
if(i%5==0&&i%7!=0){
printf("%d\t",i);
sum++;
}
i++;
}
printf("\n符合条件的数有%d个",sum);
return 0;
}
运行结果:
7.9 while语句编程练习(5
题目:
使用 while 语句编程计算π的近似值,公式如下,直到最后一项的绝对值小 于
E = 1 0 − 6 E=10^-6 E=10−6
为止。
π 4 ≈ 1 − 1 3 + 1 5 − 1 7 + . . . . . \frac {π}{4}≈1-\frac {1}{3}+\frac {1}{5}-\frac {1}{7}+..... 4π≈1−31+51−71+.....
提示:
(1) 本题变量可定义为 double zi, mu, t, sum; // zi, mu, t 分别用来保存分子、分母、当前项 请同学自己思考这些变量的初值各为多少?
(2) 本题需用到求绝对值的库函数 fabs( ),并包含头文件 math.h
(3) 本题的循环体里有 4 个通式:
①分子的通式、②分母的通式、③当前项 的通式、④求和的通式
(4)可以将 +1、-1、+1、-1 …… 依次看作每一项的分子。
源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float pi,sum=0,t=1,n=1;
int sign=1;
while(fabs(t)>=1e-6){
sum+=t;
n+=2;
sign*=-1;
t=sign/n;
}
pi=sum*4;
printf("pai的近似值=%lf",pi);
return 0;
}
运行结果:
7.10 while语句编程练习(6
题目:
使用 while 语句编程求以下表达式的值,直到某一项的值小于 10 -6就结束循环,即
E = 1 0 − 6 E=10^-6 E=10−6
若 x=2.5,函数值 f(x)为:12.182493。
f ( x ) = 1 + x + x 2 2 ! + . . . . . + x n n ! f(x)=1+x+\frac {x^2}{2!}+.....+\frac {x^n}{n!} f(x)=1+x+2!x2+....