補充: Input from a text file

Slides:



Advertisements
Similar presentations
C语言程序设计 主讲教师 :张群燕 电话:
Advertisements

第 2 章 初探 C++.
Loops.
第一章 C语言概述 计算机公共教学部.
第九章 字串 (String).
C程序设计 第10章 文 件 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串
複習 struct score_Type{ int chinese,english; }; struct my_Type{
第一章 程序设计入门.
C File System.
第一章 C语言概述.
C 程序设计实例 1. 问题描述 2. 数据结构 3. 算法分析 4. 参考程序 5. 改进说明.
C的發展史 C程式初體驗 C程式設計基本注意事項 上機實習課程
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
程序设计II 第三讲 字符串处理.
C程序设计.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
STRUCTURE 授課:ANT 日期:2010/5/12.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.
1. 說明一個一維整數陣列passwd,下標範圍0至49 2. 在屏幕顯示 "Enter password"
C语言 程序设计基础与试验 刘新国、2012年秋.
File(檔案處理) 學習目標:開檔、讀檔、更新檔與關閉檔案.
THE C PROGRAMMING LANGUAGE
字符串和字符数组 字符串的输入和输出 字符串的基本操作
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
研讨课4 文件操作.
第4章 顺序程序设计.
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
数组 梁春燕 华电信息管理教研室.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
自我參考結構 (self-reference – 1)
7.1 广义表的概念 广义表是n(n≥0)个数据元素组成的序列,其中每个数据元素或是单个数据元素(简称原子),或仍然是一个广义表 。
C语言概述 第一章.
C语言复习3----指针.
C语言环境配置.
函式庫補充資料.
實習十 開讀檔練習.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
輸出與輸入(I/O).
<编程达人入门课程> 本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C程序设计.
第4章 数 组.
C++程式設計入門 變數與運算子 作者:黃建庭.
第2章 基本数据及其运算 本章学习的目标: 1、掌握基本数据的各种表示,基本数据常数的书写方法;
第二章 类型、对象、运算符和表达式.
第三章 基本的輸出與輸入函數 (Basic Output & Input Function)
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
Introduction to the C Programming Language
結構、檔案處理(Structure, File)
C/C++基礎程式設計班 字元與字串 講師:林業峻 CSIE, NTU 3/14, 2015.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
Introduction to the C Programming Language
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
字串 第10章 part I 8/30/2019.
變數與資料型態  綠園.
陣列與檔案處理 授課:張朝麟 日期:2009/3/11.
Introduction to the C Programming Language
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

補充: Input from a text file 基礎講解 Text file 的構造與讀取 讀資料函數 (scanf & gets) 基本字串教學 例題講解: H.88.1 歷年題目

Text file 的構造與讀取 Text file 由 ASCII code 組成 英文字母 ('A' - 'Z','a' - 'z') 數字 ('0' - '9') 常用符號 (如分號,逗號等等) 控制字元 (如換行,檔案結束, tab等等)

用 notepad 寫的 text file 的例子 h i s a m p l e

Text file 實際儲存的狀況 End of Line EOF T h i s a m p l e

開檔與讀檔時的內部動作 開檔 讀檔 檔案指標 (file descriptor pointer) 指向檔案開頭 (0) 依照函數的定義,從目前 fp 所在的位址,向後讀取資料 1 2 3 4 5 6 7 8 T h i s 9 10 11 12 13 14 15 16 17 a 18 19 20 21 22 23 24 25 26 m p l e 27

讀資料函數 - scanf() char buf[100]; int i; scanf(“%s”, buf); double f; 找到第一個非空白字元,向後讀一個 block,碰到空白,tab,換行符號,檔案結尾 (EOF) 停下 鍵盤輸入 s abc df buf = “abc” int i; double f; scanf(“%d”, &i); scanf(“%lf”, &f); 讀一個 integer/ double 鍵盤輸入 332 22 i = 332

scanf(“%c”, &ch); 讀一個 character,空白, tab,換行符號都會被讀入 H e l o Enter ch = ‘H’ ch = ‘l’ ch = ‘l’ ch = ‘e’ ch = ‘l’ ch = ‘\n’

練習 scanf(“%c”, &c); scanf(“%s”, buf); scanf(“%d”, &i); a b c 3 1 2 d e

答案 scanf(“%c”, &c); //a scanf(“%s”, buf); //bc scanf(“%d”, &i); //3 scanf(“%s”, buf); //dd a b c 3 1 2 d e

讀資料函數 - gets() gets(buf); 鍵盤 abcd ef s gh ijkl m buf = " abcd ef " buf = " gh ijkl" buf = "m"

scanf() gets() 讀到檔案結尾 (EOF) 回傳 EOF 從目前的位置到讀完換行 讀到檔案結尾 (EOF) 回傳 NULL

綜合練習 scanf(“%c”, &c); scanf(“%s”, buf); gets(buf); scanf(“%d”, &i); a 3 1 2 d e

答案 scanf(“%c”, &c); //a scanf(“%s”, buf); //bc gets(buf); // “ 3” scanf(“%d”, &i); //123 gets(buf); //空字串 gets(buf); //dd e s scanf(“%c”, &c); //return EOF a b c 3 1 2 d e

程式須知 scanf() 與 gets() 避免混用 gets() 讀到比預設長度還大的字串,會發生不可預知的結果 換行與 EOF 兩者處理方式不同,易出錯 gets() 讀到比預設長度還大的字串,會發生不可預知的結果

基本字串教學: 字串陣列的表示方式 str = “hello world” C從0開始算 結束字元 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 h e l o w r d \0

結束字元 字串 array 的最後字元 要放長度 20 的字串,需要宣告 21 個字元組 (bytes)

字串可當作陣列存取 str = “hello world” str[2] = ‘l’, str[5] = ‘ ‘, str[11] = ‘\0’ C 中用雙引號括字串,單引號括字元 1 2 3 4 5 6 7 8 9 10 11 h e l o w r d \0

宣告字串並同時給予初始值 將 "abc" 於宣告時存入 str 中的兩個方式 main() { char str[100] = “abc”; }

程式中間字串給予值 程式中將 "abc" 存入 str 的兩種方式 一定要加入結束字元 main() { char str[100]; str[0] = ‘a’; str[1] = ‘b’; str[2] = ‘c’; str[3] = ‘\0’; //strcpy(str, "abc"); } 一定要加入結束字元

例題講解: A.455 (http://acm.uva.es/p/v4/455.html) 給 n 個字串,求每個字串的最短重複週期 長度相等 abcabcabcabc abc abcabc abcabcabcabc

Sample input/output Sample input: 1 HoHoHo Sample output: 2 總共會有幾組 test case 輸入字串

讀進 input 需要的資料結構 int str_num 總共有幾個 test case char str[100] 字串最長 80

解法 只有字串長度的因數才有可能是週期 將可能的週期由小到大測試,找到答案就停止

Program structure read_str_num(); for ( i = 0; i < str_num; i++){ len = strlen(str); for (j = 1; j < len; j++){ if(( len% j ) == 0){ //只有因數才測 if(str_period(str, j) == 1) // j是否 str 的週期 break; //跳出 for 迴圈 } printf(“%d\n\n”, j);

測週期 int str_period(str, j) { int k; for(k = j ; k < len ; k++) if(buf[k] != buf[k%j]) break; //不相等跳 //出 for 迴圈 if(k == len) return 1; //字串結束都相等 else return 0; }

Program #include <stdio.h> #include <string.h> int main(void) { int str_num, i, j, k, len; char str[100]; scanf(“%d”, &str_num); for(i = 0; i < str_num ; i++) { scanf(“%s”, str); len = strlen(str); for(j = 1; j < len ; j++) { if((len% j ) == 0) { //只有因數才測 for(k = i ; k < len ; k++) if(buf[k] != buf[k%j]) break; //不相等跳出 for 迴圈 if(k == len) break; //字串結束都相等 } printf(“%d\n\n”, j); //題目要求多印一個空白行

歷年題目 練習題 挑戰題 其他歷年題目 A.455 Periodic String A.458 The Decoder http://acm.uva.es/p/v4/455.html A.458 The Decoder http://acm.uva.es/p/v4/458.html A.401 Palindromes http://acm.uva.es/p/v4/401.html 挑戰題 A.400 Unix ls http://acm.uva.es/p/v4/400.html 其他歷年題目 無