目錄
每日更新5-10題,感興趣可以訂閱
一.理解函數、操作符、占位符
1.1 歡迎來到C語言的世界
?1.2 輸入和輸出
1.3 浮點數的打印
1.4 字符串的打印
1.14 I am iron man
1.5 求和運算
1.6 計算比例
1.7 求商求余
1.8 不同數位上的數字
1.8.1 求個位數
1.8.2 求十位數
1.9 地板函數的向下取整
1.10 兩點之間的距離
二.認識訓練循環語句
2.1數組內多組數據的計算求和
2.2 多組數據的輸入,理解while(scanf()!=EOF)
2.2.1 scanf函數詳解
每日更新5-10題,感興趣可以訂閱
一.理解函數、操作符、占位符
1.1 歡迎來到C語言的世界
請在編譯器上編寫一段程序,運行后輸出“Welcome to the world of C language” ,要求光標換行。
考察點:printf 函數和程序啟動的固定代碼 int main()
答案如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>int main()
{printf("Welcome to the world of C language\n");return 0;
}
除了printf函數外,還有一個函數puts也同樣能實現這個功能,下面表格會對比他們的使用差異
以下為puts函數的使用方式:
//省略了頭文件等相關信息,讀者自行添加
int main()
{puts("Welcome to the world of C language");return 0;
}
?1.2 輸入和輸出
我們懂得如何讓程序輸出一段字符信息,也應該學會如何讓計算機程序了解我們輸入的相關信息。
編寫一段程序,在鍵盤上輸入20后,程序會將20打印出來。
考察點:scanf 和 printf函數的聯合使用
?答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int n;//此處為變量的聲明,未初始化scanf("%d", &n);//取地址符號不能忘記printf("%d\n", n);return 0;
}
scanf 函數使用時容易出現的bug問題以及解決方法可以見如下文章
C語言————BUG的常見情況(持續更新)-CSDN博客
1.3 浮點數的打印
請輸入一個浮點數x,數值為3.156
考察點:浮點數類型? ?占位符號%f? ?限定占位符的表達形式
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{float x;//創建變量xscanf("%f", &x);//輸入浮點數printf("%f\n", x);return 0;
}
我們會發現輸出的浮點數,小數點后自然保留了六位,那么我們如果想僅輸出三位的話,可以在f前加上? ?.3? ?達到限制位數的作用
//省略了頭文件等相關信息,讀者自行添加
int main()
{float x;//創建變量xscanf("%f", &x);//輸入浮點數printf("%.3f\n", x);return 0;
}
1.4 字符串的打印
輸入一行字符串s,通過程序代碼將他打印出來,輸入內容為 CrazyThursday
考察點:字符串的占位符??
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{char str[100];scanf("%s", str);printf("%s", str);return 0;
}
注:使用scanf("%s",str)來讀取字符串時,只會讀取字符串直到遇到第一個空白字符(空格、制表符或換行符)。
1.14 I am iron man
編譯代碼,輸入I am iron man,輸出I am iron man。
考察點:循環語句? ?字符型的讀取??
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{char x;for (int i = 0; i < 14; i++)//讓編輯器逐步讀取每個字符{scanf("%c", &x);printf("%c", x);//逐個打印}printf("\n");return 0;
}
1.5 求和運算
輸入兩個整數10、20,用代碼打印出他們的和
考察點:算術操作符? 變量的聲明? scanf函數
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int a, b;//聲明多個變量時,中間要用,隔開scanf("%d%d", &a, &b);//輸入多個值時,不建議占位符之間加入空格printf("%d", a + b);return 0;
}
1.6 計算比例
在一個班級中,男生56人,女士37人,試計算女生的比例,輸出形式為百分比
考察點:數據類型的選用? 算術操作符? 百分數的轉換? %的打印
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int a;float b;//代表男生和女生的數量printf("男生的數量是 "); scanf("%d", &a);printf("女生的數量是 "); scanf("%f", &b);float c;//用以計算女生所占的比例c = b / (a + b);//雙目操作符/兩邊的數如果都是整型結果只保留整型部分//只有一方為浮點數,才能輸出浮點類型printf("女生的比例為%f%%\n", c * 100);return 0;
}
1.7 求商求余
輸入兩個整數18 和 7,求他們的商和余
考察點:算是操作符 scanf
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int a, b;scanf("%d%d", &a, &b);printf("商為%d\n", a / b);printf("余為%d\n", a % b);return 0;
}
1.8 不同數位上的數字
1.8.1 求個位數
輸入一個數字123,求他的個位數字3并輸出
考察點:算是操作符?
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int a;//聲明變量,輸入123scanf("%d", &a);printf("%d", a % 10);return 0;
}
1.8.2 求十位數
輸入一個數字123,求他的十位數字2并輸出
考察點:算是操作符?
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int a;//聲明變量,輸入123scanf("%d", &a);a = a / 10;//去除個位上數字printf("%d", a % 10);return 0;
}
?以上兩個例子,我們可以知道一個隨機的整數,如何輸出他們各自數位上的數字,那我們應該如何將他們每個數位上的數字依次打印呢?
輸入123,輸出3? 2??1
考察點:算術操作符和循環語句的總和運用
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int a;//聲明變量,輸入123scanf("%d", &a);while (a > 0)//while循環能夠讓a逐漸逼近這個條件{printf("%d ", a % 10);a = a / 10;//更新“個位”,把每一個數位的數字換到個位上}return 0;
}
1.9 地板函數的向下取整
輸入一個整數n如23,求他們開根號的地板函數值
地板函數:對于任意實數x,地板函數[x]表示不大于x的最大整數。簡單來說,就是把實數x向下取整到最接近的整數。
考察點:sqrt函數 數據類型的選擇? ?數據類型的強制轉換
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int a;scanf("%d", &a);printf("%d", (int)sqrt(a));//強制類型轉換return 0;
}
俗話說,強扭的?不甜,我們使?強制類型轉換都是萬不得已的時候使?,如果不需要強制類型轉化就能實現代碼,這樣?然更好的。
1.10 兩點之間的距離
輸入兩個點的坐標 (x1,y1)? ?(x2,y2),輸出兩點之間的距離
考察點:sqrt函數? pow函數 數據類型的辨別
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int x1, y1;//聲明坐標,輸入坐標scanf("%d%d", &x1, &y1);int x2,y2;scanf("%d%d", &x2, &y2);float de;//代表兩點之間的距離de = sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2));printf("%f", de);return 0;
}
?注:pow和sqrt返回的數值類型均為浮點型double
二.認識訓練循環語句
2.1數組內多組數據的計算求和
給定一個數字3,確認含有3組數據,每組中有2個數字,隨后輸入這6個數字,分別計算每組的數字之和,并分別輸入,示例如下:
輸入 | 2 | \n |
2 | 3 | |
4 | 5 | |
輸出 | 5 | \n |
9 | \n |
考察點:二維數組的元素類型? 循環語句的初步使用 多組數據的輸入
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main() {int i = 0;int j = 0;scanf("%d",&i);int arr[i][2];for(j = 0;j < i;j ++){scanf("%d %d",&arr[j][0],&arr[j][1]);printf("%d\n",arr[j][0] + arr[j][1]);}return 0;
}
2.2 多組數據的輸入,理解while(scanf()!=EOF)
2.2.1 scanf函數詳解
int scanf ( const char * format, ... );這是scanf函數的調用形式以及聲明,他的使用需要包含頭文件<stdio.h>,他是用來讀取我們鍵盤輸入的信息,他的使用語法與我們常用的printf類似,第一個參數都是格式化字符串。
在scanf函數的格式化字符串中,需要包含一定的占位符,而占位符數量的多少,就決定了后續參數的個數,在這里我們需要特別注意,用以替換占位符的參數形式是以地址的樣式體現的,我們需要用到一個重要的操作符————&(取地址操作符);因為scanf()傳遞的不是值,而是一個地址,即將變量i的地址指向用戶輸入的值。
注:如果這里的變量是指針變量(如字符串變量),那就不用加&。
scanf()處理用戶輸入的原理是,用戶的輸入會被放入緩存區,等到按下回車鍵后,按照占位符對緩存區進行解讀。
解讀用戶輸入時,會從上一次解讀遺留的第一個字符開始,直到讀完緩存,或者遇到第一個不符合條件的字符位置。
scanf()在處理數值占位符時,會自動過濾空白字符,包括空格、制表符、換行符等。
#include <stdio.h>
int main()
{int x;float y;// ??輸? " -13.45e12# 0"scanf("%d%f", &x, &y);return 0;
}
可以想想上述代碼最終輸出的x? 和? y的值,int決定了x為整型類型,根據上述對scanf()的描述,解讀會停留在小數點位置,導致x=-13,隨后開始讀取浮點數y,解讀會從小數點開始(類似.45這樣的形式會被默認為0.45),遇到e12后,會識別為科學技術法,那么我們可以知道y = 0.45 * 10^12
我們可以發現,他的結束需要返回int類型,那么這個整型應該如何計算呢?
scanf()返回的整型數值代表他所成功讀取的數據個數。
如果沒有讀取任何項,或者匹配失敗,則會返回0;
如果在成功讀取任何數據之前,發生了讀取錯誤或者遇到讀取文件到結尾的情況,則返回常量EOF(-1)。
EOF - end of file 文件結束標志
———————————————————————————————————————————
利用上述知識,我們繼續講解對while嵌套scanf的連續輸入。
while(scanf() != EOF),根據里面的判斷條件,我們知道只有當scanf在讀取中發生錯誤或者讀取到文件 的結尾時,這個循環才會結束,由此我們可以實現連續輸入多組數據,處理多組數據的任務。那么接下來我們解決下面的題目:
輸入多組兩個整數的數據,依次分別計算兩個整數之和,當和為0時則停止計算,結束輸入。
考察點:while語句和scanf的嵌套使用? break在循環語句里的使用
答案如下:
//省略了頭文件等相關信息,讀者自行添加
int main()
{int a,b;//定義輸入變量a,bwhile(scanf("%d%d",&a,&b) != EOF)
{if(a + b )
printf("%d",a + b);
else
break;
}
return 0;
}
_____________________________________________________________________________
持續更新中.........................................................................................................................................