循環(huán)語句
swicth語句
- switch語句即是一個(gè)變量有多種值的情況下全度,不同的值對(duì)應(yīng)的情況不同肋演,根據(jù)不同的值執(zhí)行不同的語句阅仔。而且表達(dá)時(shí)必須是一個(gè)常量(int,char類型等)或枚舉類型台谊。表達(dá)式與常量表達(dá)式必須都是相同的數(shù)據(jù)類型蓉媳。當(dāng)表達(dá)式的值等于某個(gè)常量表達(dá)式之后, 執(zhí)行該表示之后的語句锅铅。當(dāng)語句中出現(xiàn)break時(shí)酪呻,語句中斷,并跳出switch語句盐须。如果case語句不包含break玩荠,控制流將會(huì)繼續(xù)后續(xù)的case,直至遇到break為止丰歌,一個(gè)switch語句可以有一個(gè)可選的 default case姨蟋,出現(xiàn)在switch的結(jié)尾屉凯。
#include <stdio.h>
int main(){
int a = 0;
printf("請(qǐng)輸入一個(gè)數(shù)字 1 - 3 : ") ;
scanf("%d",&a);
switch(a){
case 1:
printf("你輸入的是1\n");
break;
case 2:
printf("你輸入的是2\n");
break;
default:
printf("你輸入的是3\n");
break;
}
return 0 ;
}
for循環(huán)
- 循環(huán)控制的變量的定義和初始化之執(zhí)行一次立帖,表達(dá)式1,表達(dá)是2悠砚,表達(dá)式3之間使用分號(hào)( 晓勇;) 隔開,但是for(表達(dá)式灌旧;表達(dá)是2绑咱;表達(dá)式3)的后面不能加分號(hào)( ;)枢泰。for循環(huán)的循環(huán)條件是決定循環(huán)的次數(shù)描融,注意:for(; 衡蚂;)與while(1)等價(jià)窿克,都是死循環(huán)骏庸,是不會(huì)停止的執(zhí)行語句。
#include <stdio.h>
/**
for(循環(huán)控制變量;運(yùn)行的條件;控制變量的變化)
for循環(huán)中間條件是必須要年叮,其他部分可以省略
分號(hào)不能省略
for(; 1 < 2; )
for(int i = 0; i < 10; i++)
*/
int c = 10;
int main(){
//輸出1-10 之間的整數(shù)
for(int i = 1; i <=10; i++){
printf("i = %d\n", i);
}
/*
循環(huán)控制變量的定義和初始化只執(zhí)行一次
變量的作用域:
局部變量 :{
int a
{
int a;
printf(a);
}
}
全局變量
靜態(tài)變量
循環(huán)控制變量什么時(shí)候變化/執(zhí)行具被?
i++ i-- j++ j--
i+=2
當(dāng)這一次循環(huán)結(jié)束之后 再變化/執(zhí)行
*/
//int i = 1;
for(int i = 1; i <= 10; i++){
printf("i = %d\n", i);
if(i == 10){
i = 0;
}
//i++;
}
//不斷輸出1-10之間的整數(shù)
return 0;
}
while循環(huán)
- while語句是先計(jì)算“表達(dá)式”的值,當(dāng)值為真時(shí)只损,執(zhí)行”語句塊“一姿。執(zhí)行完“語句塊”,再次計(jì)算表達(dá)式的值跃惫,如果為真叮叹,繼續(xù)執(zhí)行“語句塊”,重復(fù)這個(gè)過程爆存,直到表達(dá)式的值為假時(shí)衬横,才會(huì)停止并退出語句這個(gè)循環(huán),再執(zhí)行while語句后面的語句终蒂。
while語句訓(xùn)練-------進(jìn)制之間的轉(zhuǎn)換
#include <stdio.h>
int main(){
/*
for(int i = 0; i < 10; i++)
while(1)
int i = 0;
while(i < 3){
i++;
}
do{
}while(i < 3);
*/
/*
2進(jìn)制 1010 10100
8進(jìn)制 12 24
10進(jìn)制 10 20
16進(jìn)制 0A 14
請(qǐng)輸入數(shù)字:56
2進(jìn)制為:111000
8進(jìn)制為:70
16進(jìn)制為:38
*/
int num;
printf("請(qǐng)輸入數(shù)字:");
scanf("%d",&num);
int jinzhi = 16;
//二進(jìn)制
int wei = 1;
long long sum = 0;
while(1){
//取余 10100
// 00101
// 1*0 + 10*0 + 100*1 + 1000*0 + 10000*1
// 10100
int yu = num % jinzhi;
num = num / jinzhi; //10 5
//目前的總和:當(dāng)前位數(shù)的值 + 之前的值
sum = sum + yu * wei;//0
wei = wei * 10 ;//1*10 100 1000
if(num < jinzhi){
sum = sum + num * wei;
break;
}
}
printf("%d\n", sum);
return 0;
}
Break與Continue關(guān)鍵字
- Break
在switch語句中蜂林,遇到break時(shí),將不再執(zhí)行switch中的任何語句
在while拇泣,for循環(huán)中噪叙,遇到break時(shí),將終止當(dāng)前循環(huán)而執(zhí)行整個(gè)循環(huán)后面的代碼 - Continue
跳過循環(huán)體中剩余的語句并強(qiáng)制進(jìn)入下一次循環(huán)(只用于while霉翔,for循環(huán)語句中)
數(shù)組
- 數(shù)組用于儲(chǔ)存多個(gè)想同類型數(shù)據(jù)的集合
注意:
- 能夠儲(chǔ)存數(shù)據(jù)睁蕾,就必須要有內(nèi)存
- 如何定義一個(gè)數(shù)值的同時(shí)為它分配內(nèi)存
- 數(shù)組定義是必須明確直到數(shù)組的大小
- 數(shù)組名就是數(shù)組的首地址
聲明數(shù)組
在C語言中,聲明一個(gè)數(shù)組债朵,需要指定元素的類型和元素的數(shù)量
初始化數(shù)組
C語言中子眶,可以逐個(gè)初始化數(shù)組,也可以使用一個(gè)初始化語句序芦。大括號(hào) { } 之間的值的數(shù)目不能大于我們?cè)跀?shù)組聲明時(shí)在 [ ] 中指定的元素
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//4.Demo - 產(chǎn)生4個(gè)(不同)隨機(jī)數(shù) 保存到數(shù)組 輸出
int main(){
int array[4] = {};
srand(time(NULL));
//生成數(shù)組
//產(chǎn)生隨機(jī)數(shù)的同時(shí)去比較是否重復(fù)
//如果重復(fù)就重新再產(chǎn)生一個(gè)隨機(jī)數(shù)
//如果不重復(fù)就保存
//每次i的值正好可以用來判斷已經(jīng)有幾個(gè)了
//1
//i = 1
// 2
int i;
for ( i = 0; i < 4; i++){
int temp = rand() % 4;
if (i == 0){//第一個(gè) 直接保存
array[i] = temp;
}else{
//判斷前面是否已經(jīng)存在了
int j = 0;
for(; j <i; j++){
//比較j對(duì)應(yīng)的值和temp是否相同
if(array[j] == temp){
//重復(fù)了
printf("重復(fù)了:%d\n",temp);
break;
}
}
//判斷是怎么出來的
if (j == i){
//將i前面的比較一遍都沒發(fā)現(xiàn)重復(fù)的
//保存temp值
array[i] = temp;
}else{
//重復(fù)了
//重新回到當(dāng)前這一次
i--;
}
}
}
//輸出
int n;
for ( n = 0; n< 4; n++){
printf("%d ", array[n]);
}
return 0;
}
rand()和srand()函數(shù)
- rand()函數(shù)
函數(shù)頭文件:stdio.h
函數(shù)定義:int rand()
函數(shù)功能:產(chǎn)生一個(gè)隨機(jī)數(shù)
返回值:返回0至RAND_MAX之間的隨機(jī)整值
- srand()函數(shù)
函數(shù)頭文件:stdio.h
函數(shù)定義:void srand(unsigned int seed)
函數(shù)功能:設(shè)置隨機(jī)種子
通常用time(NULL)(獲得當(dāng)前系統(tǒng)的時(shí)間信息)來充當(dāng)種子臭杰,來保持每次運(yùn)行時(shí)種子是不一樣的
訓(xùn)練小游戲----最強(qiáng)大腦
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int main(){
int count = 3; //記錄每次生成多少個(gè)隨機(jī)數(shù)
while(1){
unsigned int seed = time(NULL); //1000
//設(shè)置隨機(jī)數(shù)的種子
srand(seed);
int i;
for( i = 0; i < count; i++){
//生成一個(gè)隨機(jī)數(shù)
int temp2 = rand() % 9 + 1;
printf("%d ",temp2);
}
printf("\n");
// 延時(shí)2s
Sleep(2000);
//for(int i = 0; i < 10000000000/15*2; i++);
//刷新屏幕
system("cls");
/* mac
for(int i = 0; i < 20; i++){
printf("\n");
}
*/
int temp;
printf("請(qǐng)輸入:");
//重新設(shè)種子和之前生成時(shí)的種子一樣
srand(seed);
//接收用戶輸入 一個(gè)一個(gè)接收
// 1 2 3
// 1 2 4
int n;
for( n = 0; n < count; n++){
scanf("%d", &temp);
//獲取對(duì)應(yīng)的生成的隨機(jī)數(shù)
int old = rand() % 9 + 1;
//比較輸入的和隨機(jī)數(shù)是否相同
printf("old:%d\n", old);
if (temp != old){
printf("錯(cuò)誤 退出!\n");
exit(EXIT_SUCCESS);
}
}
count ++;
printf("正確!\n");
}
return 0;
}
通關(guān)達(dá)標(biāo)訓(xùn)練-----ATM機(jī)
#include <stdio.h>
#include <stdlib.h>
/*
getchar();從終端接收一個(gè)字符
注意:當(dāng)上一次有輸入的情況下 必須要將上一次緩沖區(qū)
里面的內(nèi)容清空
scanf("%d");
123\n;
\n
方式一:
getchar(); //拿走\(yùn)n
getchar();
方式二:
fflush(stdin);//刷新輸入流
return; 結(jié)束當(dāng)前這個(gè)函數(shù)/方法
exit()導(dǎo)入頭文件<stdlib.h> 直接退出程序
main(){
1
2
3
}
add(){
retrun;
}
for(){
switch(){
return 1;
exit();
break;
}
}
*/
int main(){
int old = 123;//原始密碼
int input;//輸入密碼
int wrongTime = 3; //錯(cuò)誤次數(shù)
int total = 1000; //金額
printf("**********************\n");
printf(" 歡迎使用建設(shè)銀行系統(tǒng)\n");
printf("**********************\n");
//int i = 1;
printf("請(qǐng)輸入密碼:");
int i;
for( i = 1;i <= wrongTime; i++){
scanf("%d", &input);
//判斷密碼
if(input == old){
//密碼正確
break;
}
if(i == wrongTime){
printf("錯(cuò)誤次數(shù)過多谚中!\n");
return 1;
}
//密碼不正確
printf("密碼不正確,請(qǐng)重新輸入密碼:");
}
int choice;//接收用戶選擇
char goon;//是否繼續(xù)
for(; 1 < 2;){
//主界面
printf("*****************************\n");
printf("1.存款\n");
printf("2.取款\n");
printf("3.查詢\n");
printf("4.更改密碼\n");
printf("5.退出\n");
printf("*****************************\n");
//提示用戶選擇
printf("請(qǐng)選擇操作:");
scanf("%d", &choice);
//判斷操作
switch(choice){
case 1: //存款
int temp;
printf("請(qǐng)輸入存款金額:");
scanf("%d", &temp);
total += temp;
//total = total + temp;
printf("存款成功!可用余額為:%d\n",total);
break;
case 2: //取款
int temp2;
for(;1<2;){
printf("輸入取款金額:");
scanf("%d", &temp2);
if(temp2 > total){
printf("余額不足 ");
}else{
total -= temp2;
printf("取款成功 余額為%d\n",total);
break;
}
}
break;
case 3: //查詢余額
printf("當(dāng)前余額為:%d\n",total);
break;
case 4: //更改密碼
int n1;
int n2;
for(;1<2;){
printf("請(qǐng)輸入新密碼:");
scanf("%d", &n1);
printf("請(qǐng)確認(rèn)密碼:");
scanf("%d", &n2);
if (n1 == n2){
printf("密碼設(shè)置成功!\n");
old = n1;
break;
} else{
printf("兩次輸入不一致渴杆!");
}
}
break;
default://退出
return 1;
//exit(EXIT_FAILURE);
break;
}
//提示是否繼續(xù)
for(;1<2;){
printf("是否繼續(xù)(y/n):");
getchar();
scanf("%c", &goon);
if(goon == 'y'){
break;
}
if (goon == 'n'){
return 1;
}
printf("輸入無效 ");
}
}
return 0;
}