Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1271062
  • 博文数量: 160
  • 博客积分: 4132
  • 博客等级: 中校
  • 技术积分: 2086
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 21:56
文章分类

全部博文(160)

文章存档

2012年(25)

2011年(120)

2010年(15)

分类: C/C++

2011-05-28 17:01:02


估计高手眼中 都是些很小儿科的题,我只是记录下修改的过程 不好意思刷屏了 哈哈
不过像1.2.3也挺有意思,数据类型的范围啊 补加上不接受的ASCII码啊,乐此不疲的改了半天 哈哈



1.1.4
printf的现实格式,他要求是浮点,答案给的是"%g",
后来查了下: g : a shorter representation (f or e),会自动选择"%f"和"%e" 更符合题意吧。


1.2.2:
  1. #include <stdio.h>
  2. void main()
  3. {
  4.     char input[1000];
  5.     char ch;
  6.     while(1)/*如果判断加上(ch=getchar(input))!=EOF,puts就少一个字,看来不存在一个input里*/
  7.     {
  8.         gets(input);
  9.         printf("\+");/*不应用puts,会自动换行*/
  10.         puts(input);
  11.         printf("\n");    
  12.     
  13.     }


  14. }
编这个也犯了好几个错误……
一是:"\+""\n"开始写成puts(‘\+’)'\+'单引号了。
二是:插入加号时候不能用puts,不然自动另起一行
三是:如果写成while((ch=getchar(input))!=EOF),那输出时候就少第一个字,看来getchar()和gets()并不把数据存 在一个地方。



1.2.3
  1. #include <stdio.h>
  2. void main()
  3. {
  4.     
  5.     char ch;
  6.     signed char checksum;//要是在while里初始化 循环外不能用
  7.     checksum =(-1);

  8.     while((ch=getchar())!=EOF && (ch!='\n')) //应该是()!=,开始把前边的括号给省了
  9.     {

  10.         putchar(ch);
  11.         putchar('\n'); //这回事'' 单引号,下边分析下单引号和双引号
  12.         (int)ch; //强制转换一下,不过貌似下边和checksum相加时 也会转
  13.         printf("%d+%d=%d \n",ch,checksum,(checksum+ch));
  14.         checksum = ch + checksum;
  15.     
  16.     }
  17.     checksum = '\n' + checksum; //因为前边不接受'\n',所以最后要补加上
  18.     putchar('\n');
  19.     printf("%d \n",checksum);

  20. }
这个又改了好几处:
一是:初始化checksum要是在while里初始化 循环外不能用
二是:(ch=getchar())!=EOF刚开始在!=之前没加括号,之后结合顺序就变了,运行结果是一堆小笑脸…不知道溢出到哪去
三是:单双引号的问题,查了一下:

单引号表示将引号内的东西转译为ASCII码
双引号表示字符串,代表的却是一个指向无名数组起始字符的指针。且该数组被双引号之间的字
符以及一个额外的二进制值为零的字符‘\0’初始化。

有个例子: 假如 
int a=10 cout<<"a"; 这是用 双引号 它在屏幕上就是 a;  应该占两字节“a和\0”
int a=10 cout<
int a=10 cout<<‘a’; 将会是65;
四是:checksum的数据类型的范围;
之前没审题写的是int,看了答案才猛招儿想起来signed char的取值范围是-128到127,所以根本 不会加到一千多。
        
五是:最后结果得92,想了半天就是少了循环外的这句。或者换用do...while语句也行。
checksum = '\n' + checksum//因为前边不接受'\n',所以最后要补加上



1.2.4
  1. #include <string.h>
  2. #include <stdio.h>
  3. void main()
  4. {
  5.    FILE * pFile;
  6.    char input[1000];
  7.    char output[1000];
  8.    int n,m;

  9.    pFile = fopen ("test.txt" , "r");
  10.    if (pFile == NULL) perror ("Error opening file");
  11.    else {
  12.         while( fgets(input , 1000, pFile)!=NULL ) //不能是!=EOF
  13.         {
  14.             n=0;
  15.             m=strlen(input);
  16.             if (m>n)
  17.             {
  18.                 n=m;
  19.                 strcpy(output,input);
  20.             }
  21.         
  22.         }
  23.     
  24.         printf("Max lenth id %d,chars is %s",m,output);
  25.         fclose (pFile);
  26.     }
  27.    
  28. }
这个程序是全是自己写的,主要是最开始只想在本文件中用gets()函数 没想用文件操作,
结果用于判断结束的getchar()总是吃掉一个字节。所以只好换了个办法,用fgets()在另一个中一行一行的读取解决了。

文件操作还不太熟,在谭浩强的书上看过一点。抓紧看这本《C和指针》 看到那一章时候 再好好分析








阅读(2093) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~