此筆記由個人整理
尚觀C語言
一、流程控制簡介
-
順序
- 定義:語句逐句執行
-
選擇
- 定義:出現了一種以上的情況
-
循環
- 定義:在某個條件成立的前提下,重複執行某個動作
-
關鍵詞
- 選擇:if-else、switch-case
- 循環:while、do-while、for、if-goto
- 輔助控制:continue、break
二、語法詳解
1)if-else
- 格式
if(exp)
cmd1;//如果成立執行cmd1
else
cmd2;//如果不成立執行cmd2
- 案例1
#include "stdio.h"
#include "stdlib.h"
int main()
{
int a = 9,b = 10;
if(b++ < a)
printf("1\n");
else
printf("0\n");
printf("a = %d,b = %d\n",a,b);//b比a大所以打印“0"",判斷完成後b自加1爲11,a不變
exit(0);
}
- 結果
- 案例2:else與離得最近的if相匹配
#include "stdio.h"
#include "stdlib.h"
int main()
{
int a = 1,b = 1,c = 2;
if(a==b)
if(b == c)
printf("a == b ==c\n");//a等於b,但不等於c,
else
printf("a != b");
exit(0);
}
//結果:a != b
//else與離得最近的if相匹配
- 結果
- 案例3:成績判斷
#include "stdio.h"
#include "stdlib.h"
/* score [90-100] A
* [80-90] B
* [70-80] C
* [60-70] D
* [0-60] E
**/
int main()
{
int score;
printf("Enter a score:[0,100]:");//顯示提示信息
scanf("%d",&score);
if(score < 0 || score > 100)
{
fprintf(stderr,"Input error!\n");
exit(1);
}
/*判斷方式一
if(score > 90)
puts("A");
else if(score > 80)
puts("B");
else if(score > 70)
puts("C");
else if(score > 60)
puts("D");
else
puts("E");
*/
/*判斷方式二
if(score <= 100 || score >= 90)
puts("A");
if(score < 90 || score >= 80)
puts("B");
if(score < 80 || score >= 70)
puts("C");
if(score < 70 || score >= 60)
puts("D");
if(score < 60 || score >= 0)
puts("E");
*/
exit(0);
}
- 結果
- 案例4:閏年判斷
#include "stdio.h"
#include "stdlib.h"
/* 當前年份能被4整除但不能被100整除,或者能被400整除
**/
int main()
{
int year;
printf("please enter year:\n");
scanf("%d",&year);
if((year % 4 == 0 ) && (year % 100 != 0) || (year %400 == 0))
printf("%d is leap year.\n",year);
else
printf("%d is not leap year.\n",year);
exit(0);
}
- 結果
2)switch-case
- 格式
switch(exp)
{
case 常量或常量表達式:
break;
case 常量或常量表達式;
break;
......
default:
}
- 案例1
#include "stdio.h"
#include "stdlib.h"
int main()
{
int score;
printf("Please enter:");
scanf("%d",&score);
if(score < 0 || score > 100)
{
fprintf(stderr,"EINVAL\n");
exit(1);
}
switch(score/10)
{
case 10:
case 9:
puts("A");
break;
case 8:
puts("B");
break;
case 7:
puts("C");
break;
case 6:
puts("D");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
puts("E");
break;
default:
break;
}
exit(0);
}
- 結果
- 案例2
#include "stdio.h"
#include "stdlib.h"
int main()
{
int ch;
ch = getchar();
switch(ch)
{
case 'a':
case 'A':
printf("Ant:a small insect that lives in group.\n");
case 'b':
case 'B':
printf("Butterfly:a flying insect with a long thin body.\n");
case 'c':
case 'C':
printf("Cobra:a highly dangerius snake.\n");
case 'd':
case 'D':
printf("Donkey:a animal with short legs.\n");
default:
printf("Input error!/n");
break;
}
}
//沒有break程序不會跳出選擇,而是繼續執行之後的語句
- 結果
3)while(最少執行0次)
- 格式
while(exp)
loop;//判斷是否成立,成立運行循環體
- 案例1:1-100的和
#include "stdio.h"
#include "stdlib.h"
#define LEFT 1
#define RIGHT 100
int main()
{
int i;
int sum = 0;
i = LEFT;
while(i <= RIGHT)
{
sum += i;
i++;
}
printf("sum = %d\n",sum);
exit(0);
}
- 結果
- 案例2
#include "stdio.h"
#include "stdlib.h"
#define LEFT 1
#define RIGHT 100
int main()
{
int start,end = 10;
int sum = 0;
printf("please enter start number:")
scanf("%d",&start)
while(start <= end)
{
sum += start;
start++;
}
printf("start = %d\n",start);
printf("sum = %d\n",sum);
exit(0);
}
//輸入:9
//輸出:start = 11
// sum = 19
//輸入:20
//輸出:start = 20
// sum = 0
- 結果
4)do-while(最少執行1次)
- 格式
do
{
loop;
}while(exp);
- 案例1:1-100的和
#include "stdio.h"
#include "stdlib.h"
#define LEFT 1
#define RIGHT 100
int main()
{
int i;
int sum = 0;
i = LEFT;
do
{
sum += 1;
i++;
}while(i <= RIGHT)
printf("sum = %d\n",sum);
exit(0);
}
//結果:5050
- 結果
- 案例2
#include "stdio.h"
#include "stdlib.h"
#define LEFT 1
#define RIGHT 100
int main()
{
int start,end = 10;
int sum = 0;
printf("please enter start number:")
scanf("%d",&start)
do
{
sum += start;
start++;
}while(start <= end);
printf("start = %d\n",start);
printf("sum = %d\n",sum);
exit(0);
}
//輸入:9
//輸出:start = 11
// sum = 19
//輸入:20
//輸出:start = 21
// sum = 20
- 結果
5)for(最少循環次數爲0次)
- 格式
for(exp1;exp2;exp3)
loop;//執行完exp1,判斷exp2是否成立,成立執行exp3進入循環
//執行完exp1,判斷exp2是否成立,不成立退出循環
- 案例1:1-100的和
#include "stdio.h"
#include "stdlib.h"
#define LEFT 1
#define RIGHT 100
int main()
{
int i;
int start,end = 10;
int sum = 0;
for(i = LEFT;i <= RIGHT;i++)
{
sum += i;
}
printf("sum = %d\n",sum);
}
//結果:5050
#include "stdio.h"
#include "stdlib.h"
#define LEFT 1
#define RIGHT 100
int main()
{
int i;
int start,end = 10;
int sum = 0;
i =LEFT;
for( ; ; )
{
sum += i;
i++;
if(i > RIGHT)
break;
}
printf("sum = %d\n",sum);
}
//結果:5050
6)if-goto(慎用:goto實現無條件的跳轉,不能實現跨函數跳轉)
- 案例1
#include "stdio.h"
#include "stdlib.h"
#define LEFT 1
#define RIGHT 100
int main()
{
int i;
int start,end = 10;
int sum = 0;
i =LEFT;
loop:
sum += i;
i++;
if(i <= RIGHT)
goto loop;
printf("sum = %d\n",sum);
}
//結果:5050
7)死循環
- while(1);
- for(;😉;
三、練習
1)A以10%的單利息投資了100美元,B以每年5%的複合利息投資了100美元。編寫程序計算需要多少年B的投資總額才能超過A的,並且顯示出到那個時刻爲止兩個人的各自的資產總額是多少
#include "stdio.h"
#include "stdlib.h"
#define INIT 100
#define SIMP 0.10
#define MULT 0.05
static void test1(void)
{
int year = 0;
double suma = INIT,sumb = INIT;
while(sumb <= suma)
{
suma += INIT * SIMP;
sumb += MULT * sumb;
year ++;
}
printf("year = %d\n",year);
printf("suma = %f\tsumb = %f\n",suma,sumb);
}
int main()
{
test1();
exit(0);
}
- 結果
2)從終端讀入數據,直到輸入0值爲止,計算出其中的偶數的個數及平均值和奇數的個數及平均值
#include "stdio.h"
#include "stdlib.h"
static void test2(void)
{
int n;
int ct_odd = 0,ct_even = 0;
double sum_odd = 0,sum_even = 0;
while(scanf("%d",&n) == 1 && n != 0)
{
if(n % 2 ==1)
{
ct_odd ++;
sum_odd += n;
}
else
{
ct_even ++;
sum_even += n;
}
}
printf("odd:%d,AVE:%f\n",ct_odd,sum_odd/ct_odd);
printf("even:%d,AVE:%f\n",ct_even,sum_even/ct_even);
}
int main()
{
test2();
exit(0);
}
- 結果
3)從終端輸入若干個字符,對其中的元音字母進行統計
#include "stdio.h"
#include "stdlib.h"
static void test3(void)
{
int ct_a = 0,ct_e = 0,ct_i = 0,ct_o = 0,ct_u = 0;
int ch;
while((ch = getchar()) != '#')
{
switch(ch)
{
case 'a':
case 'A':
ct_a ++;
break;
case 'e':
case 'E':
ct_e ++;
break;
case 'i':
case 'I':
ct_i ++;
break;
case 'o':
case 'O':
ct_o ++;
break;
case 'u':
case 'U':
ct_u ++;
break;
}
}
printf("%d %d %d %d %d\n",ct_a,ct_e,ct_i,ct_o,ct_u);
}
int main()
{
test3();
exit(0);
}
- 結果
4)斐波那契數列的前四十項(不能用數組實現)
#include "stdio.h"
#include "stdlib.h"
static void test4(void)
{
long int f1 = 1,f2 = 1;
int i;
for(i = 1;i <= 20;i++)
{
printf("%12ld %12ld",f1,f2);
if(i % 2 == 0)
printf("\n")
f1 += f2;
f2 += f1;
}
}
int main()
{
test4();
exit(0);
}
- 結果
5)輸出九九乘法表
#include "stdio.h"
#include "stdlib.h"
static void test5(void)
{
int i,j;
for(i = 1;i < 10;i++)
{
for(j = 1;j < 10;j++)
{
if(j == 9)
printf("%d*%d=%d\n",i,j,i*j);
else
printf("%d*%d=%d\t",i,j,i*j);
}
}
}
int main()
{
test5();
exit(0);
}
- 結果
6)雞翁一,值錢五;雞母一,值錢三;三雛雞,值錢一,百錢買百雞,問雞翁、雞母、雛雞各幾何?
#include "stdio.h"
#include "stdlib.h"
static void test6(void)
{
int i,j,k;
for(i = 0;i < 100/5;i++)
{
for(j = 0;j < 100/3;j++)
{
k = 100 - i -j;
if(k % 3 == 0 && 5*i+3*j+k/3 == 100 )
{
printf("%d %d %d\n",i,j,k);
}
}
}
}
int main()
{
test6();
exit(0);
}
- 結果
7)求出1000以內的水仙花數:153=1+125+27
#include "stdio.h"
#include "stdlib.h"
static void test7(void)
{
int i;
int a,b,c;
for(i = 100;i < 1000;i++)
{
a = i/100;
b = i%100/10;
c = i%10;
if(i == a*a*a + b*b*b + c*c*c)
printf("%d\n",i);
}
}
int main()
{
test7();
exit(0);
}
- 結果
8)求出1000以內的所有的質數:2、3、5、7、11、13、17、19…
#include "stdio.h"
#include "stdlib.h"
static void test8(void)
{
int i,j,mark;
for(i = 2;i <= 1000;i++)
{
mark = 1;
for(j = 2;j <= i/2;j++)
{
if(i %j == 0)
{
mark = 0;
break;
}
}
if(mark)
printf("%d is a prime\n",i);
}
}
int main()
{
test8();
exit(0);
}
9)在終端上實現如下結果:
ABCDEF
BCDEF
CDEF
DEF
EF
F
#include "stdio.h"
#include "stdlib.h"
static void test9(void)
{
int line = 6,i,chars = 6;
char ch;
for(i = 0;i < line;i++)
{
for(ch = 'A'+i;ch < 'A'+chars;ch++)
{
printf("%c",ch);
}
printf("\n");
}
}
int main()
{
test9();
exit(0);
}
- 結果
10)從終端輸入N個數(以字母Q/q作爲終止),求和
#include "stdio.h"
#include "stdlib.h"
static void test10()
{
int num;
int sum = 0;
printf("please enter the first integet(q to quit):");
while(scanf("%d",&num) == 1)
{
sum += num;
printf("please enter the next integet(q to quit):");
}
printf("sum = %d\n",sum);
}
int main()
{
test10();
exit(0);
}
- 結果
11)從半徑爲1開始,輸出圓的面積,直到面積大於100爲止
#include "stdio.h"
#include "stdlib.h"
#define PI 3.14
static void test11()
{
int r;
float area=0;
for(r = 1; ; r++)
{
area = PI * r * r;
if(area > 100)
break;
printf("area = %f\n",area);
}
}
int main()
{
test11();
exit(0);
}
- 結果