沈陽公司網(wǎng)站制作廣告軟文范例大全100
我的個(gè)人主頁:☆光之夢(mèng)☆的博客_CSDN博客-C語言基礎(chǔ)語法(超詳細(xì))領(lǐng)域博主
歡迎各位 👍點(diǎn)贊 ?收藏 📝評(píng)論
特別標(biāo)注:本博主將會(huì)長(zhǎng)期更新c語言的語法知識(shí),初學(xué)c語言的朋友們,可以收藏訂閱一下我的<C語言基礎(chǔ)語法>專欄。 關(guān)注博主,學(xué)習(xí)不迷路哦
目錄
?編輯
一、交換兩個(gè)變量的值
二、C語言細(xì)節(jié)考察題(易錯(cuò))
練習(xí)(1)
練習(xí)(2)
三、逆序的三位數(shù)
四、兩個(gè)數(shù)比較大小
【方案1】
【方案2】
?五、計(jì)算階乘
【方案1】
【方案2】?
六、計(jì)算平均數(shù)
七、猜數(shù)游戲
八、數(shù)的逆序輸出(本文最難)
需要掌握的知識(shí)點(diǎn)
方案1(700——7, 007——7) ?
方案2(700——007) ?
九、學(xué)習(xí)路上遇到的常見錯(cuò)誤
一、交換兩個(gè)變量的值
核心代碼:
t = a;
a = b;
b = t;
#include <stdio.h>int main()
{int a = 5;int b = 6;//新建第三方變量 int t;printf("原來:a = %d,b = %d\n",a,b);//交換兩個(gè)變量的值 t = a;a = b;b = t;printf("現(xiàn)在:a = %d,b = %d\n",a,b);return 0;
}
二、C語言細(xì)節(jié)考察題(易錯(cuò))
練習(xí)(1)
寫出以下代碼執(zhí)行后,t1和t2的值,以空格隔開:
int a=14;
int t1 = a++; // a = 15,t1 = 14
int t2 = ++a; // a = 16,t1 = 16
答案:14 16
練習(xí)(2)
寫出以下表達(dá)式的結(jié)果,結(jié)果之間間隔一個(gè)空格:
6 + 5 / 4 - 2???????????????????????????????????????????????????????????????????????????????????????????????????// 7 - 2
2 + 2 * (2 * 2 - 2) % 2 / 3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 2 + 0
10 + 9 * ((8 + 7) % 6) + 5 * 4 % 3 * 2 + 3 ?????????????????????????????????????????????????????// 10 + 27 + 4 + 3
1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10? ? // 3 + 7 * (2/8-9)* 10? ? 3 + 7 * (0-9)* 10 ????????3-630
答案:5 2 44 -627
注:先括號(hào),再從左到右乘除,最后加減
三、逆序的三位數(shù)
逆序的三位數(shù)
程序每次讀入一個(gè)正三位數(shù),然后輸出逆序的數(shù)字。注意,當(dāng)輸入的數(shù)字含有結(jié)尾的0時(shí),輸出不應(yīng)帶有前導(dǎo)的0。比如輸入700,輸出應(yīng)該是7
提示:用%10可以得到個(gè)位數(shù),用/100可以得到百位數(shù)...。將這樣得到的三個(gè)數(shù)字合起來:百位100+十位10+個(gè)位,就得到了結(jié)果。
代碼示例:
#include <stdio.h>int main()
{int a;int ge,shi,bai;printf("請(qǐng)輸入一個(gè)三位數(shù):");scanf("%d",&a);ge = a %10;shi = a % 100 / 10;bai = a / 100;//printf("ge=%d,shi=%d,bai=%d\n",ge,shi,bai);printf("%d\n",ge*100+shi*10+bai);return 0;
}
注:
關(guān)系運(yùn)算符的結(jié)果只有0和1
所有的關(guān)系運(yùn)算符的優(yōu)先級(jí)比算術(shù)運(yùn)算的低,但是比賦值運(yùn)算的高
四、兩個(gè)數(shù)比較大小
【方案1】
#include <stdio.h>int main(){// 方案1 int a,b;printf("請(qǐng)輸入兩個(gè)整數(shù):");scanf("%d %d",&a,&b);int max = b;if(a > b){max = a;}printf("大的那個(gè)是%d\n",max);return 0;
}
【方案2】
#include <stdio.h>int main(){// 方案2int a,b;printf("請(qǐng)輸入兩個(gè)整數(shù):");scanf("%d %d",&a,&b);int max = 0;if (a > b){max = a;} else {max = b;}printf("大的那個(gè)是%d\n",max);return 0;
}
?tips:
測(cè)試數(shù)據(jù)(測(cè)試所編寫的代碼或者方法有沒有問題)
測(cè)試程序常使用邊界數(shù)據(jù),如
有效范圍兩端的數(shù)據(jù)
特殊的倍數(shù)等個(gè)位數(shù);
10
0
負(fù)數(shù)
?五、計(jì)算階乘
n!=1×2×3×4×..×n 寫一個(gè)程序,讓用戶輸入,然后計(jì)算輸出 n!
變量:
顯然讀用戶的輸入需要一個(gè) int 的 n,然后計(jì)算的結(jié)果需要用一個(gè)變量保存,可以是 int 的 factor,在計(jì)算中需要有一個(gè)變量不斷地從 I 遞增到 n,那可以是 int 的?
【方案1】
#include <stdio.h>int main()
{int n;scanf("%d",&n);int fact = 1;int i = 1;while(i <= n){fact *= i;i++;}printf("%d!=%d\n",n,fact);return 0;
}
【方案2】?
#include <stdio.h>int main()
{int n;scanf("%d",&n);int fact = 1;int i = 1;for(i = 1; i <= n; i++){fact *= i;}printf("%d!=%d\n",n,fact);return 0;
}
算法小套路
做求和的程序時(shí),記錄結(jié)果的變量應(yīng)該初始化為 0,而做求積的變量時(shí),記錄結(jié)果的變量應(yīng)該初始化為
六、計(jì)算平均數(shù)
需求:讓用戶輸入一系列的正整數(shù),最后輸入-1表示輸入結(jié)束,然后程序計(jì)算出這些數(shù)字的平均數(shù),輸出輸入的數(shù)字的個(gè)數(shù)和平均數(shù)
實(shí)現(xiàn)思路:
只需要每讀到一個(gè)數(shù),就把它加到一個(gè)累加的變量里,到全部數(shù)據(jù)讀完,再拿它去除讀到的數(shù)的個(gè)數(shù)就可以了
一個(gè)變量記錄累加的結(jié)果,一個(gè)變量記錄讀到的數(shù)的個(gè)數(shù)
算法
初始化變量 sum 和 count 為 0;
讀入 number;
如果 number 不是 -l,則將 number 加入 sum,并將 count.加 l,回到2;
如果 number 是 -l,則計(jì)算和打印出 sum/count (注意換成浮點(diǎn)來計(jì)算)
代碼實(shí)現(xiàn):
#include <stdio.h>int main()
{int number;int sum = 0;//求和 int count = 0;//統(tǒng)計(jì)輸入的個(gè)數(shù)printf("請(qǐng)輸入要計(jì)算平均數(shù)的數(shù):");scanf("%d",&number);while(number != -1){sum += number;count++;scanf("%d",&number);}printf("%f\n",1.0*sum/count);//將結(jié)果轉(zhuǎn)化成浮點(diǎn)數(shù) return 0;
}
七、猜數(shù)游戲
猜數(shù)游戲
需求:讓計(jì)算機(jī)來想一個(gè)數(shù),然后讓用戶來猜用戶每輸入一個(gè)數(shù),就告訴它是大了還是小了,直到用戶猜中為止,最后還要告訴用戶它猜了多少次。 因?yàn)樾枰粩嘀貜?fù)讓用戶猜,所以需要用到循環(huán)
核心重點(diǎn)是循環(huán)的條件
人們往往會(huì)考慮循環(huán)終止的條件
步驟
計(jì)算機(jī)隨機(jī)想一個(gè)數(shù),記在變量 number 里;
一個(gè)負(fù)責(zé)計(jì)次數(shù)的變量 count 初始化為 0;
讓用戶輸入一個(gè)數(shù)字 a;
counti 遞增(加一);
判斷 a 和 number 的大小關(guān)系,如果 a 大,就輸出“大”;如果 a 小就輸出“小”;
如果 a 和 number:是不相等的(無論大還是小),程序轉(zhuǎn)回到第 3 步;
否則,程序輸出“猜中”和次數(shù),然后結(jié)束。
需要掌握的知識(shí)點(diǎn)
隨機(jī)數(shù) 每次召喚 rand( ) 就得到一個(gè)隨機(jī)的整數(shù)
隨機(jī)產(chǎn)生一個(gè)100以內(nèi)的數(shù):rand( )%10
注:玩這個(gè)小游戲,只要你認(rèn)真玩,那么最多你猜7次就能猜中?
代碼實(shí)現(xiàn):
#include <stdio.h>int main()
{srand(time(0));int number = rand()%100;//生成一個(gè)100以內(nèi)的隨機(jī)數(shù)int count = 0;//統(tǒng)計(jì)猜數(shù)的次數(shù) int a = 0;//用戶輸入的數(shù)printf("我已經(jīng)想好了一個(gè)1到100之間的數(shù)。");do{printf("請(qǐng)猜猜這個(gè)1到100之間的數(shù):");scanf("%d",&a);count++;if (a > number){printf("你猜的數(shù)大了。");} else if (a < number){printf("你猜的數(shù)小了。");}} while(a != number);printf("太好了,你用了%d次就猜到了答案。\n",count);return 0;
}
?為什么100以內(nèi)的數(shù)猜7次就夠了?
2的7次方為128,使用二分法完全可以取到100內(nèi)的任意整數(shù)
用二分法,例如第一次:100中猜50第二次:若大了,1~50中猜25第三次:若小了,26~50中猜38第四次:若小了,39~50中猜45第五次:若大了,39~45中猜42第六次:若大了,39~41中猜40第七次:若大了就是39,若小了就是41。
八、數(shù)的逆序輸出(本文最難)
輸入一個(gè)正整數(shù),輸出逆序的數(shù)
如:
【情況1】
輸入:700? ? ? ? 輸出:7
輸入:007? ? ? ? 輸出:7
【情況2】
輸入:700? ? ? ? 輸出:007
注:想做出這題需要先掌握下列知識(shí)(否則就是雞蛋碰石頭哦)
需要掌握的知識(shí)點(diǎn)
整數(shù)的分解
整數(shù)的分解 一個(gè)整數(shù)是由 1 至多位數(shù)字組成的,如何分解出整數(shù)的各個(gè)位上的數(shù)字,然后加以計(jì)算
對(duì)一個(gè)整數(shù)做%10 的操作,就得到它的個(gè)位數(shù);
對(duì)一個(gè)整數(shù)做/10 的操作,就去掉了它的個(gè)位數(shù);
依此類推。
當(dāng) x > n 時(shí)
1234 % 10? ? ? ? ? ? ? ? 保留末尾一位數(shù) 4
1234 % 100? ? ? ? ? ? ? 保留末尾二位數(shù) 34
1234 / 10? ? ? ? ? ? ? ? ? 去掉末尾一位數(shù) 123
1234 / 100 ???????????????去掉末尾二位數(shù) 12
當(dāng) x < n
1 % 10 1 ????????????????小取余大 余小本身
5 % 10 5 ????????????????小取余大 余小本身
6 % 10 6 ????????????????小取余大 余小本身
1 / 10 0 ????????????????被除數(shù)比除數(shù)小 答案為0
5 / 10 0 ????????????????被除數(shù)比除數(shù)小 答案為0
6 / 10 0 ????????????????被除數(shù)比除數(shù)小 答案為0
方案1(700——7, 007——7) ?
代碼示例:
#include <stdio.h>int main()
{//用戶要輸入的數(shù) int x;x = 12345;//007 7 700 7 //定義一個(gè)變量用來保存依次取出的數(shù)int digit;//定義一個(gè)變量用來保存逆序輸出的結(jié)果int ret = 0;while(x > 0){//依次取出最后一位數(shù) digit = x % 10;//原來的結(jié)果往左移動(dòng)一位加上新的digit ret = ret * 10 + digit;printf("x=%d,digit=%d,ret=%d\n",x,digit,ret);//x去除一位 x /= 10; }printf("%d",ret);return 0;
}
方案2(700——007) ?
代碼示例:
#include <stdio.h>int main()
{//用戶要輸入的數(shù) int x;//scanf("%d",&x);x = 700;//007//定義一個(gè)變量用來保存依次取出的數(shù)int digit;//定義一個(gè)變量用來保存逆序輸出的結(jié)果int ret = 0;while(x > 0){//依次取出最后一位數(shù) digit = x % 10;printf("%d",digit);//原來的結(jié)果往左移動(dòng)一位加上新的digit ret = ret * 10 + digit;//x去除一位 x /= 10; }return 0;
}
九、學(xué)習(xí)路上遇到的常見錯(cuò)誤
(1)if 語句?忘了大括號(hào)
解決方法:永遠(yuǎn)在 if 和 else 后面加上大括號(hào),即使當(dāng)時(shí)后面只有一條語
(2)在 if 后面加分號(hào)
(3)錯(cuò)誤使用==和=
(4)輸入中文符號(hào)
(5)scanf()里面忘記加&
(6);老丟
(7)scanf()里面忘記加& printf()里面加了&
各位學(xué)習(xí)C語言的初學(xué)者,如果有問題隨時(shí)都可以來問我,我會(huì)隨時(shí)為您解答!歡迎大家與我一起學(xué)習(xí),互相進(jìn)步。
創(chuàng)作不易,👍?+??+📝(一鍵三連)?是對(duì)博主最大的鼓勵(lì)與支持哦。