一、输入与输出函数
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;
}
最后一部分讲的很多例子,全部来源于课本的例子。自己敲一遍会更有收获的!