實驗二實驗結論&實驗總結與體會


Part1:格式化輸出函數printf()和格式化輸入函數scanf()

 1 /*
 2 《C語言程序設計教程學習指導》p118 實驗內容(1)
 3 這是一個常用格式控制符使用示例
 4 運行程序,結合運行結果,對照每一行printf()中的格式控制符,理解和鞏固其功能和用法
 5 */
 6 #include <stdio.h>
 7 int main() {
 8 int x=1234;
 9 float f=123.456;
10 double m=123.456;
11 char ch='a';
12 char a[]="Hello, world!"; // 定義一個數組a,數組中連續存放了字符串常量hello,world!
13 int y=3, z=4;
14 printf("%d %d\n", y, z);
15 printf("y=%d, z=%d\n", y,z);
16 printf("%8d,%2d\n", x,x);
17 printf("%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f);
18 printf("%lf\n",m);
19 printf("%3c\n", ch);
20 printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a);
21 return 0;
22 }

注意修飾符的使用。對於整數、實數和字符串,[.precision]的功能並不相同。plus:對於無符號數和實數,[#]的作用也大相徑庭;有符號的整數、無符號的整數、實數、字符和字符串的輸出一般形式不同。

更改前:

 1 /*
 2 《C語言程序設計教程學習指導》p119 實驗內容(2)
 3 這是一個格式化輸入輸出函數及格式符使用練習
 4 找出兩處錯誤,修改並運行程序
 5 為a1,a2,a3,c1,c2,c3,x,y輸入數據,使得:
 6 a1=1,a2=2,a3=3,c1='a',c2='b',c3='c', x=1.5, y=2.5
 7 */
 8 #include <stdio.h>
 9 int main() {
10 double x,y;
11 char c1,c2,c3;
12 int a1,a2,a3;
13 scanf("%d%d%d",a1,a2,a3);
14 printf("%d,%d,%d\n",a1,a2,a3);
15 scanf("%c%c%c",&c1,&c2,&c3);
16 printf("%c%c%c\n",c1,c2,c3);
17 scanf("%f,%lf",&x,&y);
18 printf("%f,%lf\n",x,y);
19 return 0;
20 }

更改后:

 1 /*
 2 《C語言程序設計教程學習指導》p119 實驗內容(2)
 3 這是一個格式化輸入輸出函數及格式符使用練習
 4 找出兩處錯誤,修改並運行程序
 5 為a1,a2,a3,c1,c2,c3,x,y輸入數據,使得:
 6 a1=1,a2=2,a3=3,c1='a',c2='b',c3='c', x=1.5, y=2.5
 7 */
 8 #include <stdio.h>
 9 int main() {
10 double x,y;
11 char c1,c2,c3;
12 int a1,a2,a3;
13 scanf("%d%d%d",&a1,&a2,&a3);
14 printf("%d,%d,%d\n",a1,a2,a3);
15 scanf("%c%c%c",&c1,&c2,&c3);
16 printf("%c%c%c\n",c1,c2,c3);
17 scanf("%lf,%lf",&x,&y);
18 printf("%lf,%lf\n",x,y);
19 return 0;
20 }

即第13行缺少了取地址運算符"&";雙精度變量x對應雙精度格式%lf

plus:

務必原樣輸入的情況:格式控制符中出現常規字符(包括轉義字符)

使用格式控制符%c輸入單個字符空格和轉義字符均作為有效字符被輸入

系統認為數據輸入結束的情況:1、空格、回車、tab;2、[width];3、非法輸入

在輸入多個數據時若前面數據的輸入遇到非法字符且輸入的非法字符不是格式控制字符串中的常規字符則將影響后面數據輸入

Part2:

①putchar()

 1 /*
 2 putchar()可以用於在屏幕上輸出單個字符
 3 括號中要給出想要輸出的字符參數,參數可以是字符型常量/變量/表達式
 4 如果使用這個函數,需要在程序前面加上#include <stdio.h>
 5 */
 6 #include <stdio.h>
 7 int main() {
 8 char ch;
 9 ch = 'A';
10 putchar(ch); // 參數ch是字符型變量
11 putchar(ch+32); // 參數ch+32是字符型表達式
12 putchar('\x41'); // 參數是字符型常量,是用十六進制表示的轉義字符,是'A'的ASCⅡ碼值
13 putchar('\n'); // 參數\n是字符型常量,是轉義字符,表示換行
14 return 0;
15 }

ch為一個字符變量/常量/表達式,=printf("%c",ch)

②getchar()

 1 /*
 2 getchar()可以用於從鍵盤上輸入單個字符
 3 括號中不需要參數
 4 如果輸入成功,函數會返回用戶從鍵盤輸入的字符
 5 如果使用這個函數,需要在程序前面加上#include <stdio.h>
 6 */
 7 #include <stdio.h>
 8 int main() {
 9 char ch;
10 ch = getchar(); // 用戶從鍵盤輸入字符,如果輸入成功,輸入的字符被賦值給ch
11 putchar(ch); // 使用putchar()輸出字符變量ch中存放的字符
12 printf("%c",ch); // 使用printf()和格式符%c輸出單個字符
13 return 0;
14 }

功能為輸入一個字符,若輸入不止一個字符,則后續的getchar調用不會再等待用戶按鍵而直接讀取緩沖區中的字符直到讀完

Part3:if語句

 1 /*
 2 單分支if語句使用示例
 3 從鍵盤上輸入兩個整數分別給a和b
 4 如果a>b,就交換,使得a里面存放小的數,b里面存放大的數
 5 */
 6 #include <stdio.h>
 7 int main() {
 8 int a,b;
 9 int t; // 用於交換a和b時,作為中間變量
10 printf("輸入兩個整數給a和b:\n");
11 scanf("%d%d",&a,&b);
12 if(a>b) {
13 t = a;
14 a = b;
15 b = t;
16 }
17 printf("a=%d, b=%d\n",a,b);
18 return 0;
19 }

僅當if后只有一條語句時,{}才能省略

 

if...else

 1 /*
 2 二分支if語句使用示例
 3 從鍵盤上輸入一個整數給n,判斷n是奇數還是偶數
 4 */
 5 #include <stdio.h>
 6 int main() {
 7 printf("輸入一個整數給n:\n");
 8 scanf("%d",&n);
 9 if(n%2)
10 printf("n是奇數.\n");
11 else
12 printf("n是偶數.\n");
13 return 0;
14 }

If...else if

 1 /*
 2 多分支if語句示例
 3 輸入1,2,3...的不同整數,顯示不同提示信息
 4 */
 5 #include <stdio.h>
 6 int main() {
 7 int level;
 8 printf("輸入現在狀態等級(1-5): ");
 9 scanf("%d",&level);
10 if(level == 1)
11 printf("high翻了:)\n");
12 else if(level == 2)
13 printf("low爆了:(\n");
14 else
15 printf("一言難盡,無法概括。。。\n");
16 return 0;
17 }

以上三種條件語句簡潔明了,沒有過多解讀。

Part 4 switch

 1 /*
 2 switch語句使用示例
 3 輸入1,2,3...的不同整數,顯示不同提示信息
 4 */
 5 #include <stdio.h>
 6 int main() {
 7 int level;
 8 printf("輸入現在狀態等級(1-5): ");
 9 scanf("%d",&level);
10 switch(level) {
11 case 1: printf("high翻了:)\n"); break;
12 case 2: printf("low爆了:(\n"); break;
13 default: printf("一言難盡,無法概括。。。\n");
14 }
15 return 0;
16 }

switch語句中括號里表達式的值必須是整型或字符型;語句序列中是否有break語句會影響程序執行流程

去掉case 1和case 2最后的break, 保存並重新編譯后,再次運行,分別輸入1和2:

輸入1:

輸入現在狀態等級(1-5): 1
high翻了:)
low爆了:(
一言難盡,無法概括。。。

--------------------------------
Process exited after 0.5854 seconds with return value 0
請按任意鍵繼續. . .

輸入2:

輸入現在狀態等級(1-5): 2
low爆了:(
一言難盡,無法概括。。。

--------------------------------
Process exited after 0.4865 seconds with return value 0
請按任意鍵繼續. . .

遇到break則跳出,否則一直執行

Part 5

 
 1   /*編程模擬用戶做選擇題的情況:要求用戶從鍵盤輸入一個答案選項(A,B,C,D之一),如果用戶答案是'A',則輸出提示信息"Binggo, you are right~",否則,輸出提示信息"try again~"。*/ 
 2  #include<stdio.h>
 3  int main()
 4  {
 5     char ch;
 6     printf("輸入一個答案(A,B,C,D之一):") ;
 7     ch=getchar(); 8     switch(ch)
 9     {
10       case 'A':printf("Binggo, you are right~");break;
11       default:printf("try again~");break;
12      }
13      return 0;
14  }

 1  #include<stdio.h>
 2  int main()
 3  {
 4     char ch;
 5     printf("輸入一個答案(A,B,C,D之一):") ;
 6     scanf("%c",&ch);
 7     switch(ch)
 8     {
 9       case 'A':printf("Binggo, you are right~");break;
10       default:printf("try again~");break;
11      }
12      return 0;
13  }

 1 #include <stdio.h>
 2 int main()
 3 {
 4     char ch;
 5     printf("請輸入你的答案(A,B,C or D):");
 6     scanf("%c",&ch);
 7     if(ch=='A')
 8      printf("bingo,you are right~");
 9     else
10      printf("try again~");
11     return 0;
12 }

 

 

Plus:

第一次試驗的十轉二,我在第一篇中展示為死循環的錯誤結果,今終於做出如下改動:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int x,y,z=0,k=1;
 5     printf("輸入一個正整數\n");
 6     scanf("%d",&x);
 7     while(x!=0||y!=1)
 8     {
 9         y=x%2;
10         x/=2;
11         z+=y*k;
12         k*=10;
13     }
14     printf("%d\n",z);
15     return 0;
16  }

即:改變了while括號中的條件,但僅能計算十進制為1~1023的數。之后將繼續不斷改進。

 

評論地址:

https://www.cnblogs.com/jiuyuan/p/10645894.html

https://www.cnblogs.com/nuist-tyl/p/10643576.html

https://www.cnblogs.com/NyaNyaGoose/p/10640071.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM