實驗三

Part 1.編程

驗證性內容函數

(1)

從鍵盤上輸入3個數,讓它們表明3條線段的長度,編寫一個c程序判斷這3條線段組成的三角形屬於什麼類型(通常三角形、等腰三角形、等邊三角形或不構成三角形)。學習

#include <stdio.h>
int main() {
double a,b,c;
scanf("%lf %lf %lf", &a, &b, &c);
if(a+b>c && a+c>b && b+c>a) {
if(a==b && a==c)
printf("構成等邊三角形\n");
else if(a==b || a==c || b==c)
printf("構成等腰三角形\n");
else
printf("構成通常三角形\n");
}
else
printf("不能構成三角形\n");
return 0;
}

運行結果測試

 把 demo1.cpp中嵌套使用的if語句部分替換成如下代碼spa

if(a+b>c && a+c>b && b+c>a) {
if(a==b || a==c || b==c) {
if (a==b && a==c)
printf("構成等邊三角形\n");
else
printf("構成等腰三角形\n");
}
else
printf("構成通常三角形\n");
}
else
printf("不能構成三角形\n");

以後運行結果以下設計

換代碼以後,依舊能夠運行。3d

拓展:把demo1.cpp中輸入三邊長而且判斷三角形類型的代碼放到while循環裏,運行程序code

#include <stdio.h>
int main() {
double a,b,c;
printf("輸入三角形三邊:\n");
while(scanf("%lf%lf%lf",&a,&b,&c)) {
if(a+b>c && a+c>b && b+c>a) {
if(a==b && a==c)
printf("構成等邊三角形\n");
else if(a==b || a==c || b==c)
printf("構成等腰三角形\n");
else
printf("構成通常三角形\n");
}
else
printf("不能構成三角形\n");
printf("\n輸入三角形三邊:\n");
}
return 0;
}

結果以下blog

while(scanf("%ld%ld%ld",&a,&b,&c)){
// ...
}這段代碼可使程序一直運行。教程

(2)用scanf()函數輸入一個百分制成績(整型量),要求輸出成績等級A,B,C,D,E。其中,90~100分爲A,80~89
分爲B, 70~79分爲C, 60~69分爲D,60分如下爲E。

#include <stdio.h>
int main() {
int score; // 用於存放百分制分數
char grade; // 用於存放等級制分數(取值'A', 'B','C','D', 'E')
while(1) {
printf("輸入學生成績: ");
if(scanf("%d",&score) == 0) // 若是檢測到沒有成績輸入,則結束整個循環
break;
if(score<0 || score > 100) {
printf("輸入成績有誤!\n\n");
continue; // 結束本次循環,開始下一次循環
}
else if(score>=90 && score<=100)
grade = 'A';
else if(score>=80 && score<=89)
grade = 'B';
else if(score>=70 && score<=79)
grade = 'C';
else if(score>=60 && score <=69)
grade = 'D';
else
grade = 'E';
printf("等級爲: %c\n\n", grade);
}
return 0;
}

 

用switch語句改寫以後獲得

(3)理解控制語句continue和break的功能

#include <stdio.h>
int main() {
int i;
// 在循環語句中使用continue
for(i=1; i<=5; i++) {
if (i%3 == 0) // 若是i是3的倍數,則結束本次循環,開始下一次循環
continue;
printf("i=%d\n",i);
}
return 0;
}

運行結果

#include <stdio.h>
int main() {
int i;
// 在循環語句中使用continue
for(i=1; i<=5; i++) {
if (i%3 == 0) // 若是i是3的倍數,則結束整個循環
break;
printf("i=%d\n",i);
}
return 0;
}

在循環中使用控制語句continue和break,其功能區別是什麼?

答:continue只用於循環語句中,它是在結束本次內層循環以後直接開始下一次內層循環,我將它理解爲它直接跳過了該次內層循環;break在循環過程當中會直接結束當前內層整個循環,至關於直接卡住。

 

#include <stdio.h>
const int LINE=3; // 定義符號常量LINE
const int COLUME=5; // 定義符號常量COLUME
int main() {
int line; // 定義變量line, 用來控制行數
int col; // 定義變量col, 用來控制列數
// 輸出LINE行信息
for(line=1; line<=LINE; line++) {
// 每一行中,利用循環,輸出各列信息
for(col=1; col<=COLUME; col++) {
if(col%3 == 0) // 若是col是3的倍數,則結束本次循環,開始下一次循環
continue;
printf("%5d", col);
}
printf("\n"); // 每輸出完一行,換行
}
return 0;
}

 

#include <stdio.h>
const int LINE=3; // 定義符號常量LINE
const int COLUME=5; // 定義符號常量COLUME
int main() {
int line; // 定義變量line, 用來控制行數
int col; // 定義變量col, 用來控制列數
// 輸出LINE行信息
for(line=1; line<=LINE; line++) {
// 每一行中,利用循環,輸出各列信息
for(col=1; col<=COLUME; col++) {
if(col%3 == 0) // 若是col是3的倍數,則結束內層循環體
break;
printf("%5d", col);
}
printf("\n"); // 每輸出完一行,換行
}
return 0;
}

在兩層嵌套循環中,內層循環中若是出現continue,是否影響外層循環?

答:不影響,在上面的第一個運行程序中能夠觀察到,儘管內層循環中出現了continue,但它僅僅只是影響了內層循環,使得知足條件的3沒法輸出,但它並未影響到外層循環。

在兩層嵌套循環中,內層循環中若是出現break,是否影響外層循環?

答:不影響,在條件知足以後,它的出現直接阻斷了內層循環程序的繼續運行,或者說是它直接跳出了內層循環,進而開始外層循環。

Part2: 補足程序,使得程序運行

/*
編程找出5個整數的最大數和最小數
《C語言程序設計教程學習指導》p122實驗內容(3)
*/
#include <stdio.h>
int main() {
int number, max, min, n;
n=1;
printf("輸入第%d個數: ", n);
scanf("%d", &number);
max = number;
min = number;
while(n<5) {
n++;
printf("輸入第%d個數: ", n);
scanf("%d", &number);
if(number>=max)
max = number;
else if(number<=min) 
min = number;
}
printf("最大數爲: %d\n", max);
printf("最小數爲: %d\n", min);
return 0;
}

 使用for或do...while語句實現的程序源碼,及運行測試結果截圖

#include <stdio.h>
int main() {
int number, max, min, n;
n=1;
printf("輸入第%d個數: ", n);
scanf("%d", &number);
max = number;
min = number;
for(n=2;n<=5;n++)
{
printf("輸入第%d個數: ", n);
scanf("%d", &number);
if(number>=max)
max = number;
else if(number<=min) 
min = number;
}
printf("最大數爲: %d\n", max);
printf("最小數爲: %d\n", min);
return 0;
}

 

#include <stdio.h>
int main() {
int number, max, min, n;
n=1;
printf("輸入第%d個數: ", n);
scanf("%d", &number);
max = number;
min = number;
do
{
++n;
printf("輸入第%d個數: ", n);
scanf("%d", &number);
if(number>=max)
max = number;
else if(number<=min) 
min = number;
}while(n<5); 
printf("最大數爲: %d\n", max);
printf("最小數爲: %d\n", min);
return 0;
}

Part3:編程練習

(1)編程輸出101~200之間全部素數,並輸出這一區間內素數個數。

#include <stdio.h>
#include <math.h> 
int main(){
    int n,m,i,sum=0;
    for(n=101;n<=200;n++)
    {
    m=sqrt(n);
    for(i=2;i<=m;i++)
    if(n%i==0)break;
    if(i>m)
    {
    printf("%5d",n);
    sum++;
    }
    }
    printf("               ");
    printf("101~200之間共有%d個素數",sum);
    return 0;
 }

 

#include<stdio.h>
int main()
{
    int line,k,x;
    for(line=1;line<=5;line++)
    {
        for(k=1;k<=5-line;k++)
        printf(" ");
        for(x=1;x<=2*line-1;x++)
        printf("*");
        printf("\n");
    }
    return 0;
}

 

實驗總結與體會:

        經過完成實驗的第一部分,我認識到了continue與break的區別與區別,這意味着之後的程序編寫會越發便捷,感受受益不淺。實驗的第二部分補足程序也較爲簡單。第三部分的編寫程序我以爲對我而言仍舊有點困難,因此在這一部分上我磨蹭了很久,不過最終顯示出正確的運行結果的時候仍是以爲時間花費的很值。無論怎麼說,加油吧!

 

實驗互評:

 

https://www.cnblogs.com/MR-XN/

https://www.cnblogs.com/sfyq/

https://www.cnblogs.com/plutocharon/

相關文章
相關標籤/搜索