天天看點

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

函數不安全報錯

#include <stdio.h>
int main() {
	int age = 0;
	printf("請輸入你的年齡:\n");
	scanf("%d",&age);
	printf("你的年齡為:%d",age);
	return 0;
}
           

在使用scanf()函數時,編譯器報錯如下:

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

解決辦法:

  1. 使用scanf_s() 替換scanf()函數

缺點:scanf_s()是vs編輯器提供的,如果移植到其它編譯器将不能識别。

  1. 使用在代碼第一行加上==#define _CRT_SECURE_NO_WARNINGS 1==
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符
  1. 在項目屬性中設定預處理器定義中加上:_CRT_SECURE_NO_WARNINGS
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符
  1. 避免每次寫代碼都需要手動添加

找到vs安裝目錄下的這個檔案:

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

編輯檔案,加上這一行代碼:==#define _CRT_SECURE_NO_WARNINGS 1==

儲存并退出。這樣在建立的源檔案中将自動添加這句話。

1. 常量

  • 字面常量
  • ==const==修飾的常變量
  • #define 定義的辨別符常量
  • 枚舉常量
#include <stdio.h>
#define MAX 100 //3.define定義的辨別符常量
int main() {
	3;//1.字面常量
	const int var = 10;//2.const 修飾的常變量
	//4. 枚舉常量
	enum Color 
	{
		Red,
		Blue,
		Yellow
	};
	enum Sex {
		Man=1,//可以手動修改起始的數值
		Woman,
	};
	enum Color color = Red;
	enum Sex she = Woman;
	printf("%d\n",color);//enum 内部從0開始
	printf("%d\n",she);//輸出2
	return 0;
}
           

2.字元串

  • 定義

由雙引号引起來的==一串字元==稱為字元串字面值,簡稱字元串。

字元串的結束标志是一個\0的轉義字元。在計算字元串長度時,\0是結束标志,不會算作字元串内容。

#include <stdio.h>
int main() {
	char arr[] = "abcdefg";//用數組存放字元串
	printf("%s\n",arr);
	return 0;
}
           

1.1 列印字元串和一串字元

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符
  • 為什麼出現亂碼?

在列印字元數組a時,列印是從字元 'a' 開始,直到字元串結束标志 \0,這時列印就結束了。

而再列印字元數組b時,列印從字元 'a' 開始,在列印完字元 'c' 後并==沒有字元串結束标志==,這時列印就會繼續,因為數組都是存儲在記憶體當中的,列印會一直向下進行,直到碰到字元串結束标志才會停止列印。

  • 如果給數組b手動加上結束标志?

成功消除亂碼。

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

1.2 計算字元串長度函數strlen()

strlen()用于計算字元串長度。

#include <stdio.h>
int main() {
	char a[] = "abc";//用數組存放字元串
	char b[] = { 'a','b','c' };
	int len_a = strlen(a);
	int len_b = strlen(b);

	printf("%s\n",a);
	printf("%d\n", len_a);

	printf("%s\n",b);
	printf("%d\n", len_b);
	return 0;
}
           
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

用大括号括起來的字元的數組長度是随機值(不确定值)。

1.3 用sizeof函數求取數組長度:

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

3. 轉義字元\

常用轉義字元 含義
\t 水準制表符
\v 垂直制表
\o 空字元
\n 換行符
\’ 代表一個單引号字元
\” 代表一個雙引号字元
\\ 代表一個反斜線字元"\"

4.注釋

c語言風格注釋

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

==這種注釋是不支援嵌套的==

c++風格注釋:

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符
  • vs批量注釋快捷鍵:

注釋:Ctrl + K,Ctrl + C;==(c代表comment,注釋)==

取消注釋: Ctrl +K,Ctrl + U;==(u代表uncomment,取消注釋)==

5. if -else

  1. 符号判斷器:輸入一個值,判斷是正數還是負數;
#include <stdio.h>
int main() {
	int var = 0;
	scanf("%d",&var);
	if (var >= 0) {
		printf("這是個正數.\n");
	}
	 if (var == 0) {
		printf("這是0.\n");
	}
	else {
		printf("這是個負數!\n");
	}
	return 0;
}
           
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符
  1. 成績判斷器:給成績分等級
#include <stdio.h>
int main() {
	int score = 0;
	scanf("%d", &score);
	if (score <=100&&score>0) {
		printf("成績有效\n");
		if (score >= 85) {
			printf("成績優秀\n");
		}
		else if (score >= 70) {
			printf("成績一般\n");
		}
		else if (score >= 60) {
			printf("成績合格!\n");
		}
		else {
			printf("不合格!\n");
		}
	}
	return 0;
}
           
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

6. while

#include <stdio.h>
int main() {
	int i = 10;
	while (i>=0) {
		printf("%d\t",i);
		i--;
	}
	return 0;
}
           

while()括号内是條件,隻要滿足條件,就執行大括号内的代碼;

如果括号内為常量,例如while(1),while(true),while(3>2)

則循環沒有跳出的條件,視為死循環。

# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

7. do - while

#include <stdio.h>
int main() {
	int i = 0;
	while (i>=10) {
		printf("while");
		i--;
	}
	int j = 0;
	do {
		printf("do-while");
		j++;
	} while (j >= 10);

	return 0;
}
           
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

do -while 無論是否滿足while括号内的條件都會執行一次do裡面的内容。

8. for

  • 九九乘法表:
#include <stdio.h>
int main() {
	for (int i = 1; i <= 9; i++) {
		for (int j = 1; j <= i; j++) {
			int pro = i * j;
			printf("%d * %d = %d\t",j,i,pro);		
		}
		printf("\n");
	}
	return 0;
}
           
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

9. switch-case

  • 電腦:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int demo09() {
	int num1, num2;
	char operator;
	while (1) {
		scanf("%d %c %d", &num1, &operator,&num2);
		switch (operator)
		{
		case '+':
			printf("%d %c %d = %d\n", num1, operator,num2, num1 + num2);
			break;

		case '-':
			printf("%d %c %d = %d\n", num1, operator,num2, num1 - num2);
			break;

		case '*':
			printf("%d %c %d = %d\n", num1, operator,num2, num1 * num2);
			break;

		case '/':
			printf("%d %c %d = %.2f\n", num1, operator,num2, (float)num1 / (float)num2);
			break;
		default:
			break;
		}
		

	}
	
	return 0;
}
           
# C語言複習第二天1. 常量2.字元串3. 轉義字元\4.注釋5. if -else6. while7. do - while8. for9. switch-case10 算術運算符

10 算術運算符

10.1 單目運算符

  • !:邏輯反操作
  • &:取位址
  • sizeof:操作數的類型長度(以位元組為機關)
  • ~:對一個二進制數按位取反

10.2 關系操作符

  • || :或
  • &&:與
  • !:非

10.3 三目操作符

#include <stdio.h>
int main() {
	int max = 0;
	int a, b;
	scanf("%d %d",&a,&b);
	max = a > b ? a : b;
	printf("max=%d\n",max);
	return 0;
}