标准c基础知识笔记二
流程
if (条件)
{
}else
{
}
#include <stdio.h>
int main()
{
int age;
printf("please input your age:");
scanf("%d",&age);//age的地址,这里一定是&,要不后期可能会出问题
if (age<0 || age>1000)
{
printf("This is not human\n");
}
else if(age<16)
{
printf("smaller,dont move");
}
else if (age>100)
{
printf("you are order");
}
else
{
printf("welcome to here\n");
}
return 0;
}
vi自动缩进:set autoindent
switch(int,表达式)
{
case int字面量(或者short,char):
case int字面量:
}
首先先计算表达式,得到一个结果;然后再根据结果与case入口对比,执行后面的语句
break;出口语句;如果没有break,会执行case入口后的所有的语句,直到碰到break
default;可选入口;
#include <stdio.h>
int main()
{
printf("我们这里有如下课程:\n");
printf("1---c++\n");
printf("2---嵌入式\n");
printf("3---java\n");
printf("你想学哪一门");
char ch;
scanf(" %c",&ch);
switch(ch){
case '1': //思考为什么这里不是case 1: 缘由上面定义的ch为字符
printf("学会c++,有饭吃\n");
break;
case '2':
printf("学会嵌入式,有肉吃\n");
break;
case '3':
printf("学会java,吃香的喝辣的\n");
break;
default:
printf("你想学什么呢");
break;
}
}
循环(迭代)
while(条件){...}
do{...}while(条件);//至少做一次
#include <stdio.h>
int main()
{
double money;
printf("来到游戏厅\n");
printf("你现在有多少钱?\n");
scanf("%lf",&money);
while(money>=10){
printf("换10元游戏币\n");//或者puts("换10元游戏币");
money-=10;
puts("玩游戏..........游戏币用完");
}
printf("钱不够了,回家喽\n");
}
//常规性的写无限次循环,用while(1)
vi dowhile.c
//考驾照
#include <stdio.h>
int main()
{
int score;
do{
printf("考试完毕,输入成绩:");
}while(score<60);
printf("恭喜你通过考试!\n");
return 0;
}
scanf不是直接从键盘读取数据,而是键盘输入信息之后,存在键盘缓冲区内,一旦敲入回车后,数据就存储到输入缓冲区中;
使用scanf时,会按照对应类型一个个的从输入缓冲区中提取数据
如果输入的数据多了,会供下次读取使用,而不是丢弃。如果真想丢弃剩下的内容,可以用
scanf("%d",&score);
scanf("%*[^\n]%*c");//清除输入缓冲区剩余的字符
#include <stdio.h>
int main()
{
int score;
do{
printf("考试完毕,输入成绩:");
if (scanf("%d",&score)==1)
{
printf("成绩是%d\n",score);
}
else
{
printf("输入无效\n");
}
}while(score<60);//成绩小于60重新再考
printf("恭喜你通过考试!\n");
return 0;
}
变量的作用范围:在{}之内定义的,本{}之外就不能用了。
for(准备;条件;调整)
{
循环体
}
从键盘输入10个成绩,输出其平均成绩
vi for.c
#include <stdio.h>
int main()
{
int score;
int sum=0;
int i;
for (i=0;i<10;i++)
{
printf("请输入%d个成绩",i+1);
scanf("%d",&score);
sum+=score;
}
printf("平均成绩为:%f\n",(float)sum/10);//sum/10.0
return 0;
}
无限循环用:for(;;){}
vi for1.c
#include <stdio.h>
int main()
{
int score;
int sum=0;
int i;
for (i=0;i<10;i++)
{
printf("请输入%d个成绩",i+1);
if(scanf("%d",&score)!=1){
printf("输入无效!\n");
scanf("%*[^\n]%*c");
//什么意思呢?
//判断用户输入的是1个有效还是多个有效输入,如果是一个则继续
--i;//考虑到下面continue调整部分照常执行,而有时我们并不希望他这样执行
continue;//跳过循环体中剩余的内容;调整部分照常执行
//循环体执行到此为止,不再执行下面内容
}
if (score<0 || score>100)
{
break;//跳出循环;switch case和for循环中可以使用break
}
sum+=score;
}
printf("平均成绩为:%f\n",(double)sum/i);//sum/10.0
return 0;
}
goto让程序变的比较乱,程序中尽量少使用goto。如果费用,则在同一个函数或者从里层跳到外层使用
要求输入1-9之间的整数,如果不是的话,重来?do{....}while()
然后再根据输入的数字,来输出99表
vi inttest.c
#include <stdio.h>
int main()
{
int m=0;
int cnt;
//1读取一个1-9的整数
//1.1读取一个整数
//1.2清除缓冲区
//1.3只要输入无效或者不在1-9之间就重来,回到1.1
//2以那个数为行数输出九九表
//2.1反复m次,每次输出一行
//2.2反复根据是第几行决定输出几列
//2.3每个乘法式:小x大=积
//2.4乘法式后面输出逗号或者换行
do{
printf("请输入一个0-10以内的整数:\n");
cnt=scanf("%d\n",&m);
scanf("%*[^\n]%*c");
}while(cnt!=1||m<1||m>9);
int i,j;
for(i=1;i<=m;i++)//理解2.1
{
for(j=1;j<=i;j++)//理解2.2
{
printf("%d*%d=%d%c",j,i,j*i,j!=i?',':'\n');
//理解2.3,2.4
}
}
return 0;
}
//在C语言中可以用名字代替一段什么东西
方法一:#define CPP '1'
方法二:枚举enum,可以定义一些枚举常量,只能是整数;也可以用字符
c语言里面可以定义一些枚举
比如,我们可以用枚举来实现一个bool类型;(用0和1不如用true和false直观)
#include <stdio.h>
//#define true 1
//#define false 0
enum bool{true,false};//我们自定义的枚举类型,bool为类型名,{}为枚举常量,也是字面量
//在这里true和false为枚举常量;第一个是0,后面一个是前一个值+1
//从0开始,一次加1
//也可以自己指定enum bool{true=1,false=0,adc}
//true为1,false为0,adc为1
enum mode{UREAD=0400,UWRITE=0400,UEXEC=0100,GREAD=0040,GWRITES=0020,GEXEC=0010,OREAD=0004,OWRITE=0002,OEXEC=0001,NONE=0000};
enum course{CPP,JAVA,DOTNET,TEST};
int main()
{
printf("%d\n",true);
printf("%d,%d,%d,%d\n",CPP,JAVA,DOTNET,TEST);
printf("%d--C++\n",CPP);
printf("%d--JAVA\n",JAVA);
printf("%d--.NET\n",DOTNET);
printf("%d--测试\n",TEST);
printf("请选择:");
int n;
scanf("%d",&n);
switch(n){
case CPP:puts("C++课程");break;
case JAVA:puts("java课程");break;
case DOTNET:puts(".net课程");break;
case TEST:puts("测试课程");break;
default:puts("无效");break;
}
enum bool a;//定义变量
typedef enum bool BL;//给类型起别名
BL b;
b=false;
a=true;
printf("a=%d,b=%d",a,b);
return 0;
}
从键盘输入一个整数,输出它的二进制形式
vi bin.c
#include <stdio.h>
int main()
{
const int bits=sizeof(int)*8;//int有多少位
unsignedint mask=0x80000000; //unsigned int mask=1<<bits-1
int n;
printf("input an integer:");
scanf("%d",&n);
int i;
for(i=0;i<bits;i++)
{
printf("%c",n&mask?'1':'0');
//mask=mask>>1;
n<<=1;
}
printf("\n");
return 0;
}
练习:
从键盘输入1个有效日期,如果无效重来;输出这个日期是这一年的第几天?
从键盘输入10个整数,输出最大最小的整数是谁?