C_2-简单算法与控制语句

一、输入与输出函数

1、格式化输出:printf(“控制字符串”, 输出项列表)
①控制字符串:必须由双引号括起来,由格式说明和普通字符两部分组成。
a、格式说明:%[<修饰符>]<格式字符>
注意;[]表示可选,<>表示必选。如%3d,其中3为修饰符,d为格式字符。
常见修饰符:
在这里插入图片描述

常见格式字符:
在这里插入图片描述
b、普通字符
普通字符主要用于提示用户的一些语句。如:
printf(“结果为:%d”, x),这里的‘结果为’就是普通字符。

②输出项列表
printf("%d", a),这里的a就是输出项列表。
2、格式化输入函数
格式为:scanf(“控制字符串”, 地址列表)
控制字符串的作用与printf()函数相同, 但是不能显示非格式字符串。在C语言中,用scanf()函数时最好不要用提示字符串,避免出错。
看几个例子:
①scanf("%3d", &a),输入12345,printf("%d", a)的结果为123。
②scanf(“a = %d, b = %d, c = %d”, &a, &b, &c)
输入格式应该为a = 12, b = 24, c = 36
注意:输入的时候,输入的格式完全和“”内的格式一样。
③抑制字符
scanf("%3d%*5d%f", &a, &b, &c)
输入:12345678765.43
结果为:a = 123 b未赋值 c = 765.430001
注意:在有多个输入项时,一般用空格或enter键作为分隔符。
④scanf("%d%c", &a, &ch)输入:32 q
结果为:a = 32, b为空格
解决方法:scanf("%d %c", &a, &ch)。%d %c中间的空格可以跳过在输入时字符q前的所有空格。
⑤scanf("%d:%d,%d", &a, &b, &c)
输入的正确格式为:12:30,4
输出为:a = 12 b = 30 c = 4
注意:在用scanf()输入浮点数时,一般不要在格式控制中指定小数部分的位数,否则会报错。

3、其他输入输出函数
①putchar()
向标准输出设备输出一个字符。
②getchar()
4、C语言语句
①控制语句
②函数调用语句
③表达式语句
④空语句
⑤复合语句
下面通过很多例子来阐释:
a、

#include<stdio.h>
int main()
{
	int x, y, max;
	scanf("%d%d", &x, &y);
	max = x > y ? x : y;
	printf("你输入的两个数是:%d,%d\n最大值为:%d\n", x, y, max);
	return 0;
}

在这里插入图片描述

b、

#include<stdio.h>
int main()
{
	int x;
	printf("please input a number:");//不用scanf()中的提示符进行输出
	scanf("%d", &x);
	if (x % 2 == 0)
		printf("该数为偶数为%d", x);
	else
		printf("该数是奇数%d", x);
	return 0;
}

在这里插入图片描述

c、

#include<stdio.h>
int main()
{
	int a, b, c, t;//先定思想:a<b<c
	printf("please input three number:");//不用scanf()中的提示符进行输出
	scanf("%d%d%d", &a, &b, &c);
	printf("输入的三个数为:%d %d %d\n", a, b, c);
	if (a > b)
	{
		t = a;
		a = b;
		b = t;
	}
	if (a > c)
	{
		t = a;
		a = c;
		c = t;
	}
	//到这里就保证了a是最小的,接下来比较b和c就可以了
	if (b > c)
	{
		t = b;
		b = c;
		c = t;
	}
	printf("从小到大排序为:%d<%d<%d", a, b, c);
	return 0;
}

在这里插入图片描述

d、

#include<stdio.h>
/*
function:已知12.1日为星期三,输入1~31输出该天对应星期几
*/
int main()
{
	int date;//命名最好能与这个变量相关
	printf("请输入1~31中的一个数字:");
	scanf("%d", &date);
	printf("**************************************\n");
	printf("  Sun  Mon  Tue  Wed  Thu  Fri  Sat\n");//间隔为两个空格
	printf("**************************************\n");
	if (date % 7 == 1)
		printf("%19d\n", date);
	else if (date % 7 == 2)
		printf("%24d\n", date);
	else if (date % 7 == 3)
		printf("%29d\n", date);
	else if (date % 7 == 4)
		printf("%34d\n", date);
	else if (date % 7 == 5)
		printf("%4d\n", date);
	else if (date % 7 == 6)
		printf("%9d\n", date);
	else
		printf("%14d\n", date);
	return 0;
}

在这里插入图片描述

e、

#include<stdio.h>
/*
function:输入三个正数,判断能不能组成三角形和组成什么三角形,
分为直角三角形,等边三角形,一般三角形。
*/
int main()
{
	int a, b, c;
	printf("请输入三个正数:");
	scanf("%d%d%d", &a, &b, &c);
	if ((a + b >= c) && (a + c >= b) && (c + b >= a))
	{
		if ((a * a + b * b == c * c) || (a * a + c * c == b * b) || (c * c + b * b == a * a))
			printf("直角三角形\n");
		else if (a == b == c)
			printf("等边三角形");
		else
			printf("一般三角形");
	}
	else
		printf("不能构成三角形\n");
	return 0;
}

f、

#include<stdio.h>
/*
function:输入分数,输出对应的等级。
*/
int main()
{
	int grade;
	printf("请输入一个0~100的整数:");
	scanf("%d", &grade);
	switch (grade / 10)
	{
		case 10:printf("优秀\n"); break;//每一句的break都必须有,因为switch(){}中只有遇到break或者dafult或者全部执行完才会退出。
		case 9:printf("优秀\n"); break;
		case 8:printf("良好\n"); break;
		case 7:printf("中等\n"); break;
		case 6:printf("及格\n"); break;
		default:printf("不及格\n"); break;
	}
	return 0;
}

switch()的注意事项;
①switch()括号里的表达式的值必须是整型或字符型。
②case后面必须是常量表达式,且值必须互不相同。如定义char A;
switch(‘A’):
{
case A:…//A是一个变量而不是一个常量
}
上面的这种形式是错误的。
③每个case语句后面可以有多条语句,且可以不用花括号括起来。
④当case后面的语句省略时,默认与下一个case后面的语句相同。如:
switch()
{
case 1:
case 2:printf(“2”);break;
default:…
}
等价于:
switch()
{
case 1:printf(“2”);break;
case 2:printf(“2”);break;
default:…
}
注意:不能将case后面的常量表达式合并写:如:
switch(…)
{
case 1,2,3,4:printf("…");
}
这种写法时错误的,因为1,2,3,4为表达式,而case后面必须为常量表达式。
g、

#include<stdio.h>
/*
function:输入一个正整数,将它反位组成一个新的数输出(如1234变成4321输出)。
*/
int main()
{
	int num,innum = 0,n;
	printf("请输入一个正整数:");
	scanf("%d", &num);
	while (num != 0)//只要num不为0就要持续取出个位进行操作
	{
		n = num % 10;//取出个位
		innum = innum * 10 + n;//个位赋值给innum,且赋值后的个位数在每运行一次乘以10
		num = num / 10;//取出个位前面的数,便于再次进行上面两步操作
	}
	printf("反位数为:%d\n", innum);
	return 0;
}

h、

#include<stdio.h>
/*
function:求两个数的最小公约数。
*/
int main()
{
	int min, max, r;//r在这个函数里的作用有两个,一个是充当交换的中间变量,另一个是存储余数
	printf("请输入两个正整数:");
	scanf("%d%d", &min, &max);//输入时有可能min>max
	if (min > max)
	{
		r = max;
		max = min;
		min = r;
	}
	do
	{
		r = max % min;//先得到余数
		max = min;//把min当成max
		min = r;//把余数当作被除数min
	} while (r != 0);//知道()里的值为0才结束。**注意这里句末有分号**,表示结束
	printf("最小公约数为:%d\n", max);
	return 0;
}

i、

#include<stdio.h>
/*
function:计算1!+2!+3!...+n!
*/
int main()
{
	int n, i, sum = 0, p = 1;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		p = p * i;//注意到i!*(i+1)==(i+1)!
		sum += p;
	}
	printf("%d的阶乘为%d", n, sum);
	return 0;
}

j、

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
/*
function:判断是否为素数
*/
int main()
{
	int num, m, i;
	printf("请输入一个正整数:");
	scanf("%d", &num);
	if (num <= 0)
	{
		printf("输入错误\n");
		exit(0);//这一句用到了stdlib这个头文件
	}
	m = sqrt(num);
	/*为什么是sqrt(num)可以用反证法和假设法来证明。设num从2到sqrt(num)都没有它的因数,
	假设num有一个因数m大于sqrt(num),则有一个整数n=num/m,即m=(num/n),又m>sqrt(num),
	所以n<sqrt(num),这和num从2到sqrt(num)没有它的因数矛盾*/
	for (i = 2; i <= m; i++)
	{
		if (num % i == 0)
			break;
	}
	if (i > m)
		printf("%d是素数\n", num);
	else
		printf("%d不是素数\n", num);
	return 0;
}

这里介绍一下continue和break:
continue:只能用于循环结构中,作用为跳出本次循环。如:

for (i = 0; i < 5; i++)
{
	if (i == 3)
		continue;
	printf("%4d", i);
}

结果为:在这里插入图片描述
break:跳出switch语句或者是结束本层循环。如:

for (i = 0; i < 5; i++)
	{
		if (i == 3)
			break;
		printf("%4d", i);
	}

结果为:
在这里插入图片描述

k、

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
/*
function:输出所有水仙花数(三位整数,各位数的立方和等于该数)
*/
int main()
{
	int ge, shi, bai, i;
	printf("全部的水仙花数位:");
	for (i = 100; i < 1000; i++)
	{
		ge = i % 10;
		shi = i / 10 % 10;
		bai = i / 100;
		if (pow(ge, 3) + pow(shi, 3) + pow(bai, 3) == i)
			printf("%4d", i);		
	}
	return 0;
}

最后一部分讲的很多例子,全部来源于课本的例子。自己敲一遍会更有收获的!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F l e

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值