希望能早点掌握阅读英文原版书的能力,嗯.
这本书买了很长时间了,之前一直没有时间看.
/* 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;
}
}
}
}