man手册看什么
包含头文件
函数传参
函数返回值
DECRIPTION(函数说明)
CONFORMING——遵循哪些标准(C89 C99——移植性好)
BUGS
RETURN(返回值)
一、输入输出
1.printf
用法:printf("format",var...);
format:%[修饰符]格式符
返回值:成功打印字符个数
示例:
int main()
{
int i = 1234;
float f = 3.333;
char ch = 'x';
double d = 6.666;
int ret;
ret = printf("Hello World!\n");
printf("RET:%d\n",ret);
printf("%d %.1f %c %.2lf %s\n",i,f,ch,d,"hello");
printf("---i = %2d---\n",i);
printf("%.3s\n","1234567890");
printf("Hello!\n");
//exit(0);
}
2.scanf
用法:scanf("format",&var...);
format:%[修饰符]格式符
返回值:成功被输入赋值的对象个数
示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 4;
float f = 3.333;
char ch = 'a';
double d = 6.666;
int ret;
// printf("%d\n",ch + i);
ret = scanf("%d%f%c",&i,&f,&ch);
// printf("%d--%f--%d\n",i,f,ch);
printf("RET : %d\n",ret);
exit(0);
}
3.getchar
描述:从标准输入 stdin 获取一个字符(一个无符号字符),这等同于 getc 带有 stdin 作为参数。
声明:
int getchar(void)
返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
4.putchar
描述:把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中
声明:
int putchar(int char)
返回值:该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF。
示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch;
ch = getchar();
putchar(ch);
exit(0);
}
5.puts
描述:把一个字符串写入到标准输出 stdout,直到空字符,但不包括空字符。换行符会被追加到输出中
返回值:如果成功,该函数返回一个非负值为字符串长度(包括末尾的 \0),如果发生错误则返回 EOF。
6.gets
描述:从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
返回值:如果成功,该函数返回 str。如果发生错误或者到达文件末尾时还未读取任何字符,则返回 NULL。
示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[5];
gets(str);
puts(str);
exit(0);
}
程序忌讳
- 数组越界
- 野指针——指针已经不知道指到哪了,还在使用这个指针
二、程序流程结构
最基本的三种程序运行结构:顺序结构、选择结构、循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
1.选择结构
1)if语句
作用:执行满足条件的语句
if语句的三种形式
-
单行格式if语句
-
多行格式if语句
-
多条件的if语句
- 单行格式if语句:
if(条件){ 条件满足执行的语句 }
- 多行格式if语句:
if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };
- 多条件的if语句:
if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
注意:
- if条件表达式后不要加分号
- 一句语句可以省略大括号 {},多句语句必须要加大括号 {}
- if else 语句中 else 只会匹配到与其最近的if
示例:
#include <stdio.h>
#include <stdlib.h>
/*
if( exp )
{
;
;
}
if(exp)
{
}
else // exp == 0
{
}
*/
int main()
{
int a = 1,b = 1,c = 2;
if(a == b)
{
if(b == c)
printf("a == b == c\n");
}
else
printf("a != b\n");
/*
int a = 8,b = 9,c = 0;
if(a > b && b <= 0)
c = 100;
printf("c = %d\n",c);
if(a++ >= b && !b-- || c != 0)
printf("1\n");
else
printf("2\n");
*/
exit(0);
}
2)switch语句
作用:执行多条件分支语句
语法:
switch(exp)
{
case 常整形1: //3 25 'a' '\n'
;
;
break;
case 常整形2:
;
;
break;
...
default:
break;
}
注意1:switch语句中表达式类型只能是整型或者字符型
注意2:case里如果没有break,那么程序会一直向下执行
注意3:break语句只会跳出所在层的switch
总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间
2.循环结构
1)while循环语句
作用:满足循环条件,执行循环语句
语法:while(循环条件){ 循环语句 }
解释:只要循环条件的结果为真,就执行循环语句
示例:
int main()
{
int i = 1,sum = 0;
while (i <= 100)
{
sum += i;
i++;
}
printf("sum = %d\n",sum);
exit(0);
}
注意:在执行循环语句时候,程序必须提供跳出循环的出口,否则出现死循环
2)do…while循环语句
作用: 满足循环条件,执行循环语句
语法: do{ 循环语句 } while(循环条件);
注意:与while的区别在于do…while会先执行一次循环语句,再判断循环条件
示例:
int main()
{
int i = 1,sum = 0;
do
{
sum += i;
i++;
} while (i <= 10);
printf("sum = %d\n",sum);
exit(0);
}
总结:与while循环区别在于,do…while先执行一次循环语句,再判断循环条件
3)for循环语句
作用: 满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }
示例:
int main()
{
int i = 1,sum = 0;
for( ; i <= 100; i++)
{
sum += i;
}
printf("sum = %d\n",sum);
exit(0);
}
注意:for循环中的表达式,要用分号进行分隔
总结:while , do…while, for都是开发中常用的循环语句,for循环结构比较清晰,比较常用
4)嵌套循环
作用: 在循环体中再嵌套一层循环,解决一些实际问题
例如我们想在屏幕中打印如下图片,就需要利用嵌套循环
示例:
int main()
{
int i,j;
//外层循环执行1次,内层循环执行1轮
for (i = 0; i < 5; i++)
{
for (j = 0; j < 10; j++)
{
printf("x");
}
printf("\n");
}
exit(0);
}
3.跳转语句
1)break语句
作用: 用于跳出选择结构或者循环结构
break使用的时机:
- 出现在switch条件语句中,作用是终止case并跳出switch
- 出现在循环语句中,作用是跳出当前的循环语句
- 出现在嵌套循环中,跳出最近的内层循环语句
示例:
int main()
{
//在循环语句中用break
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break; //跳出循环语句
}
printf("i");
}
exit(0);
}
示例3:
int main()
{
//在嵌套循环语句中使用break,退出内层循环
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 5)
{
break;
}
printf("x");
}
printf("\n");
}
exit(0);
}
2)continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
示例:
int main()
{
int i = 4,j = 10;
while(i < j)
{
printf("AA%d\n",i);
if(i % 3 == 0)
{
i++;
continue;
}
printf("BB%d\n\n",i);
i++;
}
printf("CC\n");
exit(0);
}
注意:continue并没有使整个循环终止,而break会跳出循环
3)goto语句
作用:可以无条件跳转语句
语法: goto 标记;
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
示例:
int main()
{
int i = 1,sum = 0;
loop:
sum += i;
i++;
if(i <= 100)
goto loop;
printf("sum = %d\n",sum);
exit(0);
}
注意:在程序中不建议使用goto语句,以免造成程序流程混乱
随堂练习
1.if-else练习
练习一
实现级别判断(score)
我的代码:
#include <stdio.h>
int main()
{
float score;
printf("请输入您的成绩:\n");
if(scanf("%f",&score) != 1)
return 1;
if(score > 100 || score < 0)
{
printf("成绩输入有误\n");
}
else if(90 <= score && score <= 100)
{
printf("优秀!!!!\n");
}
else if(80 <= score && score <90)
{
printf("良好!!!\n");
}
else if(70 <= score && score <80)
{
printf("中等!!\n");
}
else if(60 <= score && score < 70)
{
printf("及格!\n");
}
else
{
printf("不及格\n");
}
return 0;
}
演示:
练习二
闰年(leap year)的计算,判断是否为闰年的条件:能被4整除但不能被100整除或者能被400整除。
我的代码:
#include <stdio.h>
int main()
{
int year;
printf("请输入年份:\n");
if(scanf("%d",&year) != 1)
return 1;
if(year%4 == 0 && year%100 != 0 || year%400 == 0)
{
printf("是闰年\n");
}
else
{
printf("不是闰年\n");
}
}
演示:
老师的代码:
#include <stdio.h>
#include <stdlib.h>
void leapyear()
{
int year;
scanf("%d",&year);
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf("%d is a leap year.\n",year);
}
void score()
{
int s;
scanf("%d",&s);
if(s > 100 || s < 0)
{
printf("Input error.\n");
return ;
}
// [0,100]
if(s >= 90)
printf("A\n");
else // s < 90
{
if(s >= 80)
printf("B\n");
else
{
if(s >= 70)
printf("C\n");
else
{
if(s >= 60)
printf("D\n");
else
printf("E\n");
}
}
}
/*
if(s <= 100 && s >= 90)
printf("A\n");
if(s < 90 && s >= 80)
printf("B\n");
if(s < 80 && s >= 70)
printf("C\n");
if(s < 70 && s >= 60)
printf("D\n");
if(s < 60)
printf("E\n");
*/
}
int main()
{
// leapyear();
score();
exit(0);
}
2.switch部分练习
练习一
根据输入的字母进行以该字母为开关的动物信息的输出
老师的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch;
ch = getchar();
switch(ch)
{
case 'a':
case 'A':
printf("Ant:a small insect which lives in group.\n");
break;
case 'b':
case 'B':
printf("Bee:a small flying insect which dangerous.\n");
break;
case 'c':
case 'C':
printf("Cobra:a type of snake which very dangerous.\n");
break;
case 'd':
case 'D':
printf("Donkey:a lovely animal which has long ears and shourt legs.\n");
break;
default:
printf("Input Error.\n");
break;
}
exit(0);
}
练习二
完成分数分等级
我的代码:
#include <stdio.h>
int main()
{
float score;
int t;
printf("请输入您的成绩:\n");
if(scanf("%f",&score) != 1)
return 1;
t = score/10;
if(score > 100 || score <0)
{
printf("成绩输入有误\n");
}
else
{
switch(t)
{
case 10:
printf("满分!!!!!\n");
break;
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;
}
老师的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int s;
scanf("%d",&s);
if(s > 100 || s < 0)
{
printf("Input error.\n");
return 1;
}
switch(s/10)
{
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("E\n");
break;
}
exit(0);
}