Q6. 某學校將學生的電話號碼存貯在一個文字檔'telist.txt'。 在這交字檔中,每行有14個字符,代表學生班別、班號和電話號碼,

Slides:



Advertisements
Similar presentations
CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
Advertisements

第八章 互换的运用.
Introduction 基本概念 授課老師:蕭志明
第一章 C语言概述 计算机公共教学部.
第九章 字串 (String).
程序设计基础知识.
编译原理上机实习
计算机硕士专业基础—C语言 赵海英
補充: Input from a text file
第十三章 文件.
专题研讨课二: 数组在解决复杂问题中的作用
程式設計實作.
複習 struct score_Type{ int chinese,english; }; struct my_Type{
C语言程序设计 第十二章 位运算.
第一章 程序设计入门.
C语言程序设计 第五章 选择结构程序设计.
高级语言程序设计 主讲人:陈玉华.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
Class 2 流程控制-選擇敘述與迴圈.
第二章 C# 基础知识.
计算概论 第二十一讲 文件操作 北京大学信息学院.
排序 Sorting.
快速排序法 (Quick Sort).
搜尋資料結構 Search Structures.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
Introduction to the C Programming Language
Introduction to the C Programming Language
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
程式撰寫流程.
C 語言簡介 - 2.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
11.1 文件的基本概念 11.2 文件的打开与关闭 11.3 文件的顺序读写 11.4 文件的随机读写 11.5 文件检测
第十二章 文件 12.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件分类 按文件的逻辑结构: 按存储介质:
第四章 C 语言中的输入和输出.
1. 說明一個一維整數陣列passwd,下標範圍0至49 2. 在屏幕顯示 "Enter password"
C语言 程序设计基础与试验 刘新国、2012年秋.
第九章 文件 程序数据标准输入输出设备 程序数据文件 数据流和文件 文件的打开和关闭 文件读写函数.
File(檔案處理) 學習目標:開檔、讀檔、更新檔與關閉檔案.
THE C PROGRAMMING LANGUAGE
字符串和字符数组 字符串的输入和输出 字符串的基本操作
第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫
第5章 文件.
第9章 文件操作 文件 使用文件的目的 操作系统管理数据的基本单位 存储在外存储器上的数据的集合
ADFGVX 张天豪 陆纪圆.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
Struct結構 迴圈
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
一、文件的基本概念 第十三章 文 件 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一
C语言概述 第一章.
程式結構&語法.
第3章 變數、算術運算、 數學函數及輸入輸出.
C语言复习3----指针.
函式庫補充資料.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
字符串 (String) 字符串是 n (  0 ) 个字符的有限序列, 记作 S = “c1c2c3…cn” 其中,S 是串名字
第2章 认识C语言 教学要点 2. 1 项目二C语言程序识读 2 .2 项目三班级成绩排名 2 .3 知识链接 返回.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
1. 志明打算就客戶服務開發一個語音互動(IVR)系統, 顧客可透過電話鍵盤與系統進行互動。
第二章 基本数据类型 ——数据的表示.
第四章 C 语言中的输入和输出.
第 9 章 建構函式與解構函式.
#include <iostream.h>
第13章 文 件.
C/C++基礎程式設計班 字元與字串 講師:林業峻 CSIE, NTU 3/14, 2015.
第七章 文件 7.1 文件的基本概念 7.2 文件类型指针 7.3 文件的打开与关闭 7.4 文件的读/写 7.5 文件的随机读/写
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
遊戲利用一大小為n×n的表格(即表格有n行和n列),其中n為2至8間(包括2和8)的整數。 表格內每一單元格可由所在的行數和列數參照。
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
Presentation transcript:

Q6. 某學校將學生的電話號碼存貯在一個文字檔'telist.txt'。 在這交字檔中,每行有14個字符,代表學生班別、班號和電話號碼, 由空白字符分隔,如下所示: 班別 班號 電話號碼 1 A 2 3 4 5 6 7 8 空白字符 空白字符 部分文字檔如下所示: 陳先生編寫了一個程序來改動學生的電話號碼。這個程序需把該交字檔更新,並在VDU上顯示如下的輸出。 1B 12 23516718 1C 23 24567171 1C 12 25167717 1D 04 24516818 1E 23 21346765 Enter class name: 1D Enter class no.: 04 Enter new telephone no.: 26743219 Record has been modified successfully. Enter class name: 1D Enter class no.: 44 No such record! CS2004

fp=fopen("telist.txt","r+"); // read+write count=0; while(!feof(fp)){ 1B 12 23516718 1C 23 24567171 1C 12 25167717 1D 04 24516818 1E 23 21346765 FILE *fp; char data[100][20]; int count; void init(){ char line[20]; fp=fopen("telist.txt","r+"); // read+write count=0; while(!feof(fp)){ fgets (line, 20, fp); line[strlen(line)-1]='\0'; strcpy (data[count], line); count++; } fclose(fp); CS2004

int search(char class[], char no[]){ int i, pos=-1; // not found data[i] 1A 04 1B 12 23516718 1C 23 24567171 1C 12 25167717 1D 04 24516818 1E 23 21346765 int search(char class[], char no[]){ int i, pos=-1; // not found char myclass[3], cno[3]; for(i=0; i<count; i++){ strncpy (myclass, data[i], 2); // 1D strncpy (cno, data[i]+3, 2); // 05 if((strcmp(myclass,class))==0 && (strcmp(cno,no))==0){ pos=i; break; } return pos; CS2004

void updateTel(int pos){ char newtel[9]; int i; printf ("輸入新電話號碼: "); gets (newtel); for (i=0;i<8;i++) data[pos][i ]=newtel[i]; printf ("紀錄已更新\n"); } void updateRec(){ char class[3], no[3]; int pos; do{ printf("班別: "); gets(class); if(strlen(class)==0) break; fflush(stdin); printf("號數: "); gets(no); }while(1); } +6 pos = search(class, no); if (pos>0) updateTel(pos); else printf("找不到!\n"); s[0] s[6] 1B 12 23516718 1C 23 24567171 1C 12 25167717 1D 04 24516818 1E 23 21346765 CS2004

for (i=0;i<count;i++) fprintf (fp, "%s\n", data[i]); void updateFile(){ int i; rewind(fp); fclose(fp); } for (i=0;i<count;i++) fprintf (fp, "%s\n", data[i]); main(){ init(); // tellist.txt  data[i] updateRec(); // change tel updateFile(); // data[i]  tellist.txt } CS2004

ABCDEFGHIJKLMNOPQRSTUVWXYZ const int shift=13; char inStr[80]="ABC"; int i, tmp; main(){ while(strlen(inStr)>0){ printf("Please input the text原文 : "); gets(inStr); printf("The coded message is加密後 : "); for(i=0;i<strlen(inStr);i++){ } printf("\n"); ABCDEFGHIJKLMNOPQRSTUVWXYZ if ((inStr[i]>='A') && (inStr[i]<='Z')){ tmp = inStr[i]+shift; if (tmp>90) tmp=26; inStr[i] = tmp; } printf ("%c", inStr[i]); CS2004

(a)當輸入下列文字後,試寫出該程序的輸出。 (i) BAR (ii) ONE (b)試簡述如何利用上列程序,把加密文字解碼。 "A..." 65+13=78 N "AB.." 66+13=79 O ONE BAR if ((inStr[i]>='A') && (inStr[i]<='Z')){ tmp = inStr[i] if (tmp ) tmp inStr[i] = tmp; } printf ("%c", inStr[i]); shift; <65 +=26; CS2004

ABCD...YZ GHIJ...EF 小芬獲得小明的加密文字。她被告知可利用下列步驟,破譯小明的加密文字 步驟1: 數出在加密文字中每個字母出現的次數。 步驟2: 一般來說,從統計數字得知‘E’是在文字段落中最常用的字母。 因此,小芬將在加密文字中出現次數最多的字母更換為‘E’, 把下一個按字母順序排列的字母更換為‘F’,如此類推。 例如, 若'Y'是在加密文字中出現次數最多的字母,便將'Y'更換為'E', 其後更換'Z'為'F',更換'A'為'G',更換'B'為'H',…,如此類推。 (c)小芬編寫了一個程序,數出用戶指定文字檔內,每個字母出現的次數,並找出出現次數最多的宇母。試寫出下列方格內的內容來完成這個程序。 char filename[20], inStr[80]; FILE *inFile; int freq[26], i; char c, max; ABCD...YZ GHIJ...EF CS2004

for(c=0; c<26; c++) freq[c]=0; main(){ for(c=0; c<26; c++) freq[c]=0; puts("Please input the name of the file to be processed :"); printf("abc.txt %c",'\r'); gets(filename); if(strlen(filename)==0) strcpy(filename,"abc.txt"); inFile=fopen(filename,"r"); while (!feof(inFile)){ fgets(inStr,80,inFile); for (i=0;i<strlen(inStr);i++) if (isupper(inStr[i])) freq[inStr[i] ]++; } fclose(inFile); -65 max=0; i = freq[max]; for (c=1; c<26; c++){ if (freq[c]>0) printf("freq[%c] = %d\n",c+'A',freq[c]); if (freq[c]>freq[max]) max=c; } printf ("The most frequent 常見 letter is %c\n", max+65); CS2004

(d)試舉出這個方法,破譯含大楷字母段落的兩個弱點。 'E' 並非唯一『出現次數最多』的宇母,因為 - 可能有多於一個『出現次數最多』的宇母 - 文章中有很多縮寫字或特別名詞 - 文章字數不足,沒有代表性 Letter 'E' is not the only most frequent letter because - there may be more than 1 highest frequent letter - the passage contains too many abbreviations 縮寫 or special terms - the passage is not long enough CS2004

Q9. 剔除了空白,正讀和反讀都一樣的詞或句子,稱為迴文(palindrome)。 兩個迴文的例子如下所示 (1) Rats live on no evil star (2) Was it a car or a cat I saw 彼得編寫了一個程序,查證一段字符串是否迥文。下列為程序的樣本輸出: 樣本輸出1 Please input a string: Was it a car or a cat I saw It is a palindrome. 樣本輸出2 Please input a string: no pain no gain It is not a palindrome. CS2004

字符串變量,用來存貯剔除了空白字符的字符串 標識符 描述 inp 字符串變量,用來存貯輸入字串 nospace 字符串變量,用來存貯剔除了空白字符的字符串 i,j 整數變量,用作計數器 result 布爾變量,用來存貯查證的結果 作答本題時,考生不得加入新的變量,否則不獲給分。 (a)編寫過程RemoveSp,剔除存貯在變量s內的字符串中的空白字符, 並把這字符串存貯至變量s。 (b)編寫過程upper,將變量s中的字母改成大楷。 (c)編寫過程palTest,查證變量s中的字符串是否迴文。 CS2004

void removeSpace (char s[]){ char nospace[80]; int i,j=0; strcpy(nospace,s); strcpy(s,nospace); } Was it a car or a cat I saw WasitacaroracatIsaw for(i=0; i<strlen(s); i++) if (s[i]!=' ') nospace[j++] = s[i]; nospace[j]='\0'; void upper (char s[]){ int i; for(i=0; i<strlen(s); i++) s[i]=toupper(s[i]); } WasitacaroracatIsaw WASITACARORACATISAW CS2004

int palTest(char s[]){ int i,j,n; n=strlen(s); for(i=0; i<n/2; i++ ) if(s[i]!=s[n-1-i]) return 0; return 1; } n=5 j = n-1; ,j-- ABCBA 01234 if(s[i]!=s[j]) return 0; main(){ char inp[80]; do{ printf("Please input a string: "); gets(inp); removeSpace(inp); upper(inp); }while(1); } if(palTest(inp)==1) printf("It is a palindrome.\n"); else printf("It is not a palindrome.\n"); CS2004