標準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個整數,輸出最大最小的整數是誰?