算平均數
問題描述
讓用戶輸入一系列的正整數,最後輸入-1表示輸入結束,然後程序計算出這些數字的平均數,輸出輸入數字的個數和平均數。
思路
變量->算法->流程圖->程序
變量:
這裏需要三個變量:一個變量記錄讀到的整數,一個變量記錄累加的結果,一個變量記錄讀到的數的個數。
算法:
1、初始化變量sum和count爲0;
2、讀入number;
3、如果number不是-1,則將number加入sum,並將count加1,回到2;
4、如果number是-1,則計算和打印出sum/count(注意換成浮點來計算)。
程序:
/*
計算平均數
*/
#include <stdio.h>
int main()
{
//初始化
int sum = 0;
int count = 0;
int number;
//計算平均數
scanf("%d", &number);
while(number != -1){
sum += number;
count++;
scanf("%d", &number);
}
printf("%f\n",1.0*sum/count ); //sum和count爲整數,乘以1.0是爲了換成浮點數計算
return 0;
}
可以看到在程序中scanf("%d", &number)出現了兩次,我們可以考慮用do_while語句。
程序:
/*
計算平均數
*/
#include <stdio.h>
int main()
{
//初始化
int sum = 0;
int count = 0;
int number;
//計算平均數
do{
scanf("%d", &number);
if(number != -1){
sum += number;
count++;
}
}while(number != -1);
printf("%f\n",1.0*sum/count );
return 0;
}
猜數遊戲
問題描述
讓計算機來想一個1到100之間的數,然後讓用戶來猜,用戶每輸入一個數,就告訴他(她)是大了還是小了,直到用戶猜中爲止,最後還要告訴用戶他(她)猜了多少次。
思路
變量->算法->流程圖->程序
變量:
這裏需要三個變量:一個變量記錄計算機產生的隨機數,一個變量記錄用戶猜的數,一個變量記錄用戶猜數的次數。
算法:
1、計算機隨機想一個數,記在變量number裏;
2、一個負責記次數的變量count初始化爲0;
3、讓用戶輸入一個數字a;
4、count遞增(加一);
5、判斷a和number的大小關係,如果a大,就輸出“大”,如果a小就輸出“小”;
6、如果a和number是不相等的,程序回到第三步;
7、否則,程序輸出“猜中”和次數,然後結束。
程序:
/*
猜數遊戲:系統產生一個1到100的隨機數,用戶進行猜測
*/
#include <stdio.h>
int main()
{
//產生一個1到100之間的隨機數
srand(time(0));
int number = rand()%100+1;//rand()爲產生一個任意位數的隨機數,將得到的數對100取餘得到0到99之間的隨機數,然後加一得到1到100之間的隨機數
// 初始化
int count = 0;
int a = 0;
printf("我已經想好了一個1到100之間的數。");
//猜數
do{
printf("請猜這個1到100之間的數:");
scanf("%d", &a);
count++;
if(a > number){
printf("你猜的數大了");
}else if(a < number){
printf("你猜的數小了");//應該用else if 而不是else
}
}while(a != number);
printf("太好了,你用了%d次就猜到了答案\n",count );
return 0;
}
數的逆序
問題描述
輸入一個正整數,輸出逆序的數,其結尾的0也應逆序輸出,如輸入“700”,應輸出“007”。
思路
變量->算法->流程圖->程序
整數的分解:
- 對一個整數做%10的操作,就得到它的個位數;
- 對一個整數做/10的操作,就去掉了它的個位數;
- 然後再對2的結果做%10的操作,就得到原來數的十位數;
- 依此類推可得到所有的位數。
變量:
這裏需要兩個變量:一個變量記錄輸入的正整數,一個變量記錄整數每一位的數字。
算法:
1、讓用戶輸入一個正整數x;
2、x對10取餘得到最右位的數,將其保存在變量digit中;
3、輸出digit的值;
4、x/10,去掉它的最右位數;
5、如果x>0,程序回到第2步;
6、否則,該整數所有位數已經逆序輸出,程序結束。
程序:
/*
數的逆序:輸入一個正整數,輸逆序的數
*/
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int digit = 0;
do{
digit = x%10;
printf("%d",digit);
x /= 10;
} while(x > 0);
return 0;
}
素數判斷
問題描述
輸入一個正整數,判斷這個數是不是素數。
思路
變量->算法->流程圖->程序
變量:
這裏需要三個變量:一個變量記錄輸入的正整數,一個變量記錄這個數是不是素數,一個變量記錄判斷能否被該整數整除的除數。
算法:
1、讓用戶輸入一個正整數x;
2、一個負責記錄是否爲素數的變量isPrime初始化爲1(是素數);
3、x對除數i取餘,如果結果爲0,讓isPrime=0,轉到6;
4、如果結果不爲0,i加1;
5、如果i<x,轉到3;
6、如果isPrime=1,該數爲素數;
7、否則,不是素數;
8、程序結束。
程序:
/*
素數判斷:輸入一個正整數,判斷這個數是不是素數。
*/
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int isPrime = 1;//是素數
int i;
for(i=2; i<x; i++){
if(x%i == 0){
isPrime = 0;//不是素數
break;
}
}
if(isPrime == 1){
printf("是素數\n");
}else{
printf("不是素數\n");
}
return 0;
}
break vs continue:
- break:跳出循環;
- continue:跳過循環這一輪剩下的語句進入下一輪循環。
100以內的素數
問題描述
輸出100以內的素數。
思路
變量->算法->流程圖->程序
算法:
1、初始化變量x=2;
2、判斷x是不是素數;
3、如果x是素數,輸出x;
4、x加1;
5、如果x<=100,轉到2;
6、否則,程序結束。
程序:
/*
輸出100以內的素數
*/
#include <stdio.h>
int main()
{
int x ;
for(x = 2; x <= 100; x++){
int isPrime = 1;//是素數
int i;
for(i=2; i<x; i++){
if(x%i == 0){
isPrime = 0;//不是素數
break;
}
}
if(isPrime == 1){
printf("%d ",x);
}
}
printf("\n");
return 0;
}
前50個素數
問題描述
輸出前50個素數。
程序:
/*
輸出前50個素數
*/
#include <stdio.h>
int main()
{
int x ;
int cnt = 0;
for(x = 2; cnt < 50; x++){
int isPrime = 1;//是素數
int i;
for(i=2; i<x; i++){
if(x%i == 0){
isPrime = 0;//不是素數
break;
}
}
if(isPrime == 1){
printf("%d ",x);
cnt++;
}
}
printf("\n");
return 0;
湊硬幣
問題描述
用1角、2角和5角的硬幣湊出10元以下的金額,該金額由用戶指定。
程序:
/*
湊硬幣:用1角、2角和5角的硬幣湊出10元以下的金額,該金額由用戶指定
*/
#include <stdio.h>
int main()
{
int x ;
int one, two, five;
scanf("%d",&x);
for(one = 1; one < x*10; one++) {
for(two = 1; two < x*5; two++) {
for(five = 1; five < x*2; five++) {
if(one + two*2 + five*5 == x*10) {
printf("可以用%d個1角加%d個2角加%d個5角得到%d元。\n",
one, two, five, x);
}
}
}
}
return 0;
}
前面的程序會輸出所有的可行方案,如果我們只需要一種方案就可以,就需要使用break語句。
程序:
/*
湊硬幣:用1角、2角和5角的硬幣湊出10元以下的金額,該金額由用戶指定
*/
#include <stdio.h>
int main()
{
int x ;
int one, two, five;
int exit = 0;
scanf("%d",&x);
for(one = 1; one < x*10; one++) {
for(two = 1; two < x*5; two++) {
for(five = 1; five < x*2; five++) {
if(one + two*2 + five*5 == x*10) {
printf("可以用%d個1角加%d個2角加%d個5角得到%d元。\n",
one, two, five, x);
exit = 1;
break;
}
}
if (exit == 1) break;
}
if (exit == 1) break;
}
return 0;
}
這裏有三重循環,因此需要用到三次break語句,我們也可以用goto語句,但是goto語句一般只能用於打破循環。
程序:
/*
湊硬幣:用1角、2角和5角的硬幣湊出10元以下的金額,該金額由用戶指定
*/
#include <stdio.h>
int main()
{
int x ;
int one, two, five;
scanf("%d",&x);
for(one = 1; one < x*10; one++) {
for(two = 1; two < x*5; two++) {
for(five = 1; five < x*2; five++) {
if(one + two*2 + five*5 == x*10) {
printf("可以用%d個1角加%d個2角加%d個5角得到%d元。\n",
one, two, five, x);
goto out;
}
}
}
}
out:
return 0;
}