C 基礎知識簡要複習
“歡迎回到C語言的世界”
這是我時隔好幾個月再次開啟VS Code後,腦中出現的低沉你而又智慧的陌生聲音。這個聲音帶有驅動和鼓勵,又帶有一絲不滿與勉勵。這個聲音推動人繼續敲擊鍵盤,用指尖點選字母方塊,編織出自己奇妙的王國。
話不多說,繼續在這裡記錄吧。此篇權當是迴歸篇,簡要複習一下基礎,找回手感。
字串和格式化輸入輸出
eg.1:
//演示與使用者互動
#include<stdio.h>
#include<string.h> //提供strlen()函式
#include<windows.h>
#define DENSITY 62.4 //人體密度
int main(void)
{
float weight,volume;
int size,letters;
char name[40];
printf("Hi,what's your first name?\n");
scanf("%s",&name);
printf("%s,what's your weight in pounds?\n",name);
scanf("%f",&weight);
size = sizeof(name);
letters = strlen(name);
volume = weight/DENSITY;
printf("Well,%S,your volume is %2.2f cubic feet.\n",name,volume);
printf("Also,your first name has %d letters,\n",letters);
printf("and we have %d bytes to store it.\n",size);
system("pause");
return 0;
}
eg.2:
//一些不匹配的整形轉換
#include<stdio.h>
#include<windows.h>
#define PAGES 336
#define WORDS 65618
int main(void)
{
short num = PAGES;
short mnum = -PAGES;
printf("num as short and unsigned short: %hd %hu\n",num,num);
printf("-num as short and unsigned short:%hd %hu\n",num,num);
printf("num as int and char:%d %c\n",num,num);
printf("WORDS as int,short,and char:%d %hd %c\n",WORDS,WORDS,WORDS);
system("pause");
return 0;
}
//short 型別與 int 型別的區別:
1)位元組數不同
2)資料範圍不同
eg.3:
//不匹配的浮點型別轉換
#include<stdio.h>
int main(void)
{
float n1 = 3.0;
double n2 = 3.0;
long n3 = 2000000000;
long n4 = 1234567890;
printf("%.le %.le %.le %.le\n",n1,n2,n3,n4);
printf("%ld %ld\n",n3,n4);
printf("%ld %ld %ld %ld\n",n1,n2,n3,n4);
getchar();
return 0;
}
//關於引數傳遞與型別轉換
eg.4:
//input.c---何時使用&
#include<stdio.h>
#include<windows.h>
int main(void)
{
int age;
float assets;
char pet[30];
printf("Enter your age,assets,and favorite pet:\n");
scanf("%d %f",&age,&assets);//scanf()讀取基本變數型別的值,在變數名前加上一個&
scanf("%s",pet);//scanf()把字串讀入字元陣列中,不要使用&
printf("%d $%2.2f %s\n",age,assets,pet);
system("pause");
return 0;
}
eg.5:
//varwid.c---使用變寬輸出欄位
#include<stdio.h>
#include<windows.h>
int main(void)
unsigned width,precision;
int number = 256;
double weight = 242.5;
printf("Enter a field wigth:\n");
scanf("%d",&width);
printf("The number is :%*d.\n",width,number);
printf("Now enter a width and a precision:\n");
scanf("%d %d",&width,&precision);
printf("weight = %*.*f\n",width,precision,weight);
printf("Done!\n");
system("pause");
return 0;
}
/*printf()中可以用*修飾符代替字元寬度
而scanf()中,*則表示跳過相應輸入項*/
運算子、表示式和語句
eg.1:
//shoes.c---計算多個不同鞋碼對應的腳長
#include<stdio.h>
#define ADJUST 7.31
int main(void)
{
const double SCALE = 0.333;
double shoe,foot;
printf("Shoe size(men's) foot length\n");
shoe = 3.0;
while(shoe<18.5)
{
foot = SCALE*shoe+ADJUST;
printf("%10.lf %15.2f inches\n",shoe,foot);
shoe = shoe+1.0;
}
printf("If the shoe fits,wear it.\n");
getchar();
return 0;
}
eg.2:
//sizeof.c---sizeof()的使用
#include<stdio.h>
int main(void)
{
int n = 0;
size_t intsize;
intsize = sizeof(int);
printf("n = %d,n has %zd bytes;all ints have %zd bytes.\n",n,sizeof n,intsize);
getchar();
return 0;
}
/*sizeof返回size_t型別的值
typedef機制允許為現有型別建立別名
'typedef double real'
這樣,real就是double的別名*/
eg.3:
//pound.c---定義一個帶引數的函式
#include<stdio.h>
void pound(int n);//n 為int型別變數
int main(void)
{
int times = 5;
char ch = '!';
float f = 6.0;
pound(times);
pound(ch);
pound(f);
getchar();
return 0;
}
void pound(int n)
{
while(n-->0)
printf("#");
printf("\n");
}
迴圈控制語句
eg.1:
//suming.c--根據使用者鍵入的整數求和
#include<stdio.h>
int main(void)
{
long num;
long sum =0L;//long 型別後要加L
int status;
printf("please enter an integer to be summed");
printf("(q to quit):");
status = scanf("%ld",&num);
while(status == 1)
{
sum += num;
printf("Please enter next integer(q to quit):");
status = scanf("%ld",&num);
}
printf("Those integer sum to %ld.\n",sum);
getchar();
return 0;
}
//注意,scanf()返回值賦給status,如果scanf讀取一個整數,則返回1;若讀取的不是數字,則返回0
eg.2:
//cmpflt.c---浮點數比較
#include<stdio.h>
#include<math.h>
int main(void)
{
const double ANSWER = 3.14159;
double response;
printf("What is the value of pi?\n");
scanf("%lf",&response);
while(fabs(response-ANSWER)>0.01)//fabs()取精度更高的double、float型別的絕對值,在math標頭檔案裡
{
printf("Try again!\n");
scanf("%lf",&response);
}
printf("Close enough!\n");
getchar();
return 0;
}
eg.3:
//truth.c---哪些值是為真
#include<stdio.h>
int main(void)
{
int n=3;
while(n)
printf("%2d is true.\n",n--);
printf("%2d is false.\n",n);
n = -3;
while(n)
{
printf("%2d is true.\n",n++);
}
printf("%2d is false.\n",n);
getchar();
return 0;
}
Ps:關於for語句:
for語句使用三個表示式控制迴圈過程
for(initialize;test;update)
statement
initialize表示式在執行for語句之前執行一次,然後對test表示式求值,接著對update求值。
eg.4:
//entry.c---入口條件迴圈
#include<stdio.h>
int main(void)
{
const int secret_code =13;
int code_entered;
printf("To enter the triskaidekaphobia therapy club,\n");
printf("please enter the secret code number:");
scanf("%d",&code_entered);
while(code_entered != secret_code)
{
printf("To enter the ttc,\n");
printf("please enter the secret code number:");
scanf("%d",&code_entered);
}
printf("Congratulations!You a cured!\n");
return 0;
}
eg.5:
//power.c---計算數的整數冪
#include<stdio.h>
double power(double n,int p);
int main(void)
{
double x,xpow;
int exp;
printf("Enter a number and the positive integer power\n");
printf("to which the number will be raised.Enter q to quit.");
while(scanf("%lf %d",&x,&exp)==2)
{
xpow = power(x,exp);
printf("%.3g to the power %d is %.5g\n",x,exp,xpow);
printf("enter next pair of numbers or q to quit.\n");
}
printf("hope you enjoyed this power trip--byebye!\n");
getchar();
return 0;
}
double power(double n,int p)
{
double pow=1;
int i;
for(i = 1;i<=p;i++)
pow*=n;
return pow;
}
分支和跳轉控制語句
eg.1:
//colddays---統計寒冷天氣百分比
#include<stdio.h>
#include<windows.h>
int main(void)
{
const int FREEZING = 0;
float temperature;
int cold_days = 0;
int all_days = 0;
printf("Enter the list of daily low temperatures.\n");
printf("Use Celsius,and enter q to quit.\n");
while(scanf("%f",&temperature)==1)
{
all_days++;
if(temperature<FREEZING)
{
cold_days++;
}
}
if(all_days!=0)
printf("%d days total:%.lf%% were below freezing.\n",all_days,100.0 * (float) cold_days/all_days);
if(all_days == 0)
printf("No data entered!\nplz try again!");
system("pause");
return 0;
}
eg.2:
//divisors.c---使用巢狀if語句顯示一個數的約數
#include<stdio.h>
#include<stdbool.h>
#include<windows.h>
int main(void)
{
unsigned long num;//待測試的數
unsigned long div;//可能的約束
bool isPrime;
printf("Please enter an integer for analysis;");
printf("Enter q to quit.\n");
while(scanf("%lu",&num)==1)
{
for(div = 2,isPrime = true;(div*div)<=num;div++)
{
if(num%div==0)
{
if((div*div)!=num)
printf("%lu is divsible by %lu and %lu.\n",num,div,num/div);
else
printf("%lu is divisible by %lu and %lu.\n",num,div);
isPrime = false;//該數不是素數
}
}
if(isPrime)
printf("%lu is is prime.\n",num);
printf("Please enter another integer for analysis;");
printf("Enter q to quit.\n");
}
printf("byebye!\n");
system("pause");
return 0;
}
此外關於C語言中分支與跳轉還有許多方法,例如if語句,switch語句,break、continue、goto語句等跳轉語句,用法都類似,貫徹迴圈重複執行任務的思想。
函式
//lethead1.c
#include<stdio.h>
#define NAME "GALATHINK,INC."
#define ADDRESS "101 MEGABUCK PLAZA"
#define PLACE "MEGApolis,CA 94904"
#define WIDTH 40
void starbar(void);
int main(void)
{
starbar();
printf("%s\n",NAME);
printf("%s\n",ADDRESS);
printf("%s\n",PLACE);
starbar();
return 0;
}
void starbar(void)//簡單地用這個函式做個邊框
{
int count;
for(count = 1;count<=WIDTH;count++)
putchar('*');
putchar('\n');
}
相關推薦
C 基礎知識簡要複習
“歡迎回到C語言的世界” 這是我時隔好幾個月再次開啟VS Code後,腦中出現的低沉你而又智慧的陌生聲音。這個聲音帶有驅動和鼓勵,又帶有一絲不滿與勉勵。這個聲音推動人繼續敲擊鍵盤,用指尖點選字母方塊,編織出自
C語言修仙大法!基礎知識全複習(純乾貨)!!!
▓資料型別: 常量:常量包括字面常量、直接常量和符號常量; 變數:C語言規定標誌符只能由字母、數字和下劃線三種字元組成,且第一個字元必須是字母或者下劃線;必須壓迫先定義後使用;每一個變數被定義以確定型別
C# 基礎知識系列- 9 字串的更多用法(一)
0. 前言 在前面的文章裡簡單介紹了一下字串的相關內容,並沒有涉及到更多的相關內容,這一篇將嘗試講解一下在實際開發工作中會遇到的字串的很多操作。
C# 基礎知識系列- 11 委託和事件
0. 前言 事件和委託是C#中的高階特性,也是C#中很有意思的一部分。出現事件的地方,必然有委託出現;而委託則不一定會有事件出現。那為什麼會出現這樣的關係呢?這就需要從事件和委託的定義出發,瞭解其中的內在。
C# 基礎知識系列- 13 常見類庫介紹(二)日期時間類
0. 前言 上一篇內容介紹了Console類和Math類,這篇內容著重介紹一下C#中時間日期的處理方式。
C# 基礎知識系列- 14 IO篇 檔案的操作
@目錄0. 前言1. 檔案、目錄和路徑1.1 File和FileInfo1.1.1 File工具類1.1.2 FileInfo 物件類1.2 Directory和DirectoryInfo1.2.1 Directory1.2.2 DirectoryInfo
C# 基礎知識系列- 14 IO篇 流的使用
0. 前言 繼續之前的C# IO流,在前幾篇小短片中我們大概看了下C# 的基礎IO也對檔案、目錄和路徑的操作有了一定的瞭解。這一篇開始,給大家演示一下流的各種操作。以檔案流為例,一起來看看如何操作吧。
c#基礎知識---委託,匿名函式,lambda
前言: C# 中的委託(Delegate)類似於 C 或 C++ 中函式的指標。委託是存有對某個方法的引用的一種引用型別變數。引用可在執行時被改變。委託(Delegate)特別用於實現事件和回撥方法。所有的委託都派生自 System.D
c++基礎知識-double 四捨五入保留N位小數
兩種方法 方法1: 乘10法 去掉整數部分後,剩餘小數*10,乘N次,加上0.5後再除回去,最後return 整數部分+小數部分
C#基礎知識之Partial
https://www.cnblogs.com/qtiger/p/11177036.html C# 2.0 可以將類、結構或介面的定義拆分到兩個或多個原始檔中,在類宣告前新增partial關鍵字即可。
C++基礎知識
C++面向物件程式設計的三大特性:封裝,繼承,多型。 1.封裝:隱藏物件的屬性和實現細節,只對外開放介面。呼叫者只需關心如何使用介面,通過介面獲得想要的結構。
C++基礎知識篇:C++ 常量
常量是固定值,在程式執行期間不會改變。這些固定的值,又叫做字面量。 常量可以是任何的基本資料型別,可分為整型數字、浮點數字、字元、字串和布林值。
C++基礎知識篇:C++ 迴圈
有的時候,可能需要多次執行同一塊程式碼。一般情況下,語句是順序執行的:函式中的第一個語句先執行,接著是第二個語句,依此類推。
C#基礎知識(6)
技術標籤:c#c#抽象類多型介面 一、抽象 1.抽象類 用關鍵字abstract來修飾的類 抽象類是特殊的類,只是不能被例項化;除此以外,具有類的其他特性;重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方
C#基礎知識(5)
技術標籤:c#c#面向物件程式設計 一、列舉 列舉:是一種資料型別,列舉適用於取值範圍有限的資料
【C++基礎知識】C++中引用的知識點解析
技術標籤:C++ C++中的引用 引用的概念 建立引用的作用通常是為變數起另一個名字,變數的引用通常被認為是變數的別名。
C++基礎知識篇:C++ 陣列
C++ 支援陣列資料結構,它可以儲存一個固定大小的相同型別元素的順序集合。陣列是用來儲存一系列資料,但它往往被認為是一系列相同型別的變數。
c++ 基礎知識(一) 指標
技術標籤:# c++基礎專欄 目錄 一、指標的基本概念 二、智慧指標 1、auto_ptr: 三、函式指標與指標函式
c++ 基礎知識(二) 函式
技術標籤:# c++基礎專欄 一、函式的傳遞方式 1、值傳遞 形參是實參的拷貝,改變形參的值並不會改變外面實參的值,從一定的角度來說,值傳遞是單向的---------(實參---》形參),引數的值只能傳入,不能傳出。
C++基礎知識篇:C++ 引用
引用變數是一個別名,也就是說,它是某個已存在變數的另一個名字。一旦把引用初始化為某個變數,就可以使用該引用名稱或變數名稱來指向變數。