希望能早點掌握閱讀英文原版書的能力,嗯.
這本書買了很長時間了,之前一直沒有時間看.
/* 1.2溫度轉換 */
#include<stdio.h>
main(){
//int x = 0;
//int fahr;
for(int fahr = 0; fahr <= 300; fahr = fahr + 20){
printf("%3d\t %9.1f\t%d\n",fahr, (5.0 / 9.0) * (fahr - 32),&fahr);
}
/*
int lower,upper,step;
float fahr,celsius;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
//printf("華氏\t攝氏\n");
while(fahr <= upper){
celsius = 5 * (fahr - 32) / 9;
printf("%3.0f%.2f\n",fahr,celsius);
fahr = fahr + step;
}
*/
}
/* 1.4 符號常量 */
#include<stdio.h>
#define LOWER 0
#define UPPER 300
#define STEP 20
main3(){
int fahr;
for(fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP){
printf("%3d\t%6.2f\n",fahr,(5.0 / 9.0) * (fahr - 32));
}
}
VS的C編輯器好難用,跟ECLIPSE寫JAVA的感覺沒法比.
/* 1.5 統計字符和行數 */
#include<stdio.h>
main(){
long nc;
nc = 0;
while(getchar() != EOF)
++nc;
printf("%ld",nc);
int c ;
while((c = getchar()) != EOF){
putchar(c);
}
//putchar(c);
printf("EOF != c:%d\n" + (c!=EOF));
printf("EOF:%d\n" , EOF);
getchar();
}
很簡單的練習,有了編程經驗再學這些東西,感覺都知道一樣,但有些東西需要再確定一下.
/* 1.5.4單詞計數 */
#include<stdio.h>
#define IN 1
#define OUT 0
main(){
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while((c = getchar()) != EOF){
++nc;
if(c == '\n')
++nl;
if(c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if(state == OUT){
state = IN;
++nw;
}
}
printf("%d\t%d\t%d\n", nl, nw, nc);
}
/* 1.6 使用數組統計一些字符的出現字數 */
#include<stdio.h>
main(){
int c, i, nwhite, nother;
int ndijit[10];
nwhite = nother = 0;
for(i = 0; i < 10; ++i)
ndijit[i] = 0;
while((c = getchar()) != EOF){
if(c >= '0' && c <= '9')
++ndijit[c - '0'];
else if( c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
}
printf("dijit = ");
for(i = 0; i < 10; ++i)
printf(" %d",ndijit[i]);
printf(", white space = %d,other = %d\n",nwhite, nother);
getchar();
}
在考慮要不要改成JAVA式的駝峯命名方式,那個方式更科學啊.但就沒有了使用c的感覺了,哈哈
/* 1.9 字符數組,統計最長行的長度 */
#include<stdio.h>
#define MAXLINE 10000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
main(){
int len, max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while((len = getline(line, MAXLINE)) > 0){
if(len > max){
max = len;
copy(longest, line);
}
}
if(max > 0)
printf("%s\n", longest);
return 0;
}
int getline(char s[], int lim){
int c, i;
for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if(c == '\n'){
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[], char from[]){
int i;
i = 0;
while((to[i] = from[i]) != '\0')
++i;
}
char類型是小整形,是整形的一種,它屬於整形.
字符串在內存中以字符數組的形式存儲,以'\0'作爲字符串結束記號.
發現在上個例子中,while裏面的if語句沒有帶大括號,於是在java裏面也試了一下,果然if語句塊只算一條語句,一條語句是不需要括起來的.
package com.dh.test;
public class MainTest {
public static void main(String[] args) {
System.out.println("start");
int i = 0;
while(true)
if(i == 0){
break;
}
System.out.println("out of while");
}
}
外部變量的練習.
/* 1.10 外部變量和作用域 打印最長行 */
#include<stdio.h>
#define MAXLINE 1000
int max;
char line[MAXLINE], longest[MAXLINE];
int getLine(void);
void copy(void);
main(){
int len;
extern int max;
extern char longest[];
max = 0;
while((len = getLine()) > 0){
if(len > max){
max = len;
copy();
}
}
if(max > 0)
printf("%s\n", longest);
//return 0;
}
int getLine(void){
int c, i;
extern char line[];
for(i = 0; i < MAXLINE -1 && (c = getchar()) != EOF && c != '\n'; ++i )
line[i] = c;
if(i == '\n'){
line[i] = c;
++i;
}
line[i] = '\0';
return i;
}
void copy(void){
int i;
extern char line[], longest[];
i = 0;
while((longest[i] = line[i]) != '\0')
++i;
}
第一章的練習,不明白爲什麼在同一行字符後面[CTRL + Z]無法結束循環.
/* 練習1-20 TAB替換爲空格 */
/* 接受一行輸入;如果包含TAB,則計算當前位與TAB結束位的差,替換爲空格 */
#include<stdio.h>
#define TABLENGTH 8
#define MAXLENGTH 1000
char text[MAXLENGTH];
int getText(void);
main(){
extern char text[];
getText();
printf("%s\n",text);
}
int getText(void){
extern char text[];
int c, i, j;
int spaceCount = 0; /* 要填充的空格個數 */
int linePosition = 0; /* 當前行的位置 */
for(i = 0; (i < MAXLENGTH - 1) && (c = getchar()) != EOF; ++i){
printf("value of c:%d\n" , c);
if(c == '\n')
linePosition = 0;
if(c == 't'){
spaceCount = TABLENGTH - (linePosition % TABLENGTH);
}
if(spaceCount > 0){
for(j = 0; j < spaceCount; ++j){
text[i + j] = c;
}
i += spaceCount;
}
else
text[i] = c;
linePosition++;
}
printf("out of for loop");
}
2013年9月15日0:01:17
大師就是大手筆,連練習都那麼費時間.
/* 練習1-21 將空格轉換爲TAB */
/*
while(行未結束){
if(是空格){
if(上個字符不是空格)
記錄空格起始位置;
if(位置在TAB終止位上)
替換從空格起始位置到該位置的所有空格位TAB字符;
}
}
*/
#include<stdio.h>
#define MAXLENGTH 1000
#define TABLENGTH 8
void entab(void);
char text[MAXLENGTH];
main(){
extern char text[];
entab();
printf("value of tab:%d\n",'\t');
printf("%s",text);
return 0;
}
void entab(){
int ss;//空格起始位置;
int i;
int cc = 0;//字符計數
char c;
extern char text[];
for(i = 0; i < MAXLENGTH -1 && (c = getchar()) != EOF; ++i){
++cc;
text[i] = c;
if(c == ' '){
if(i == 0 || text[i - 1] != ' ')
ss = i;
if(cc % TABLENGTH == TABLENGTH){
text[ss] = '\t';
i = ss;
}
}
}
}