【C和指针】第二篇: 快速入门-----知识汇总, 编程练习;

目录

 

2.1章节问题总结:

2.2编程练习:

2.2.1.编写程序,从输入读取几行字符,输出时前面加上行号;处理长度没有限制;

2.2.2.标准读取一些字符,写到标准输出上.计算checksum值,并写在字符后面

2.2.3..编写一个程序,一行行的读取输入行,算出每行输入的长度,打印最长行;


2.1章节问题总结:

  1. C是一种*形式的语言,没有规则规定他的外观;本章例子里的空白使用,是为了让代码更加具有可读性,良好的代码风格也利于程序正确运行,以及利于后期维护;
  2. 将声明(函数原型声明)放在头文件中,需要时用 #include  指令包含在源文件里,以后维护和修改更加容易,同时,声明只写一次消除了多份拷贝中出现写法不一致的机会;
  3. #define 进行字面值常量命名,利于在代码里理解常量表达的意义,并且易于修改;
  4. printf 中使用格式代码打印十进制整数用%d  ;打印字符串%S  ;打印浮点值%g;
  5. 一条scanf语句,读取两个整数,存在quantity和price两变量中,读取一个字符串,存在一个名为department的字符数组中;                    scanf("%d   %d   %s   ",&quantity,&price,department);
  6. strcpy() 函数用来复制字符串;其原型为:char *strcpy(char *dest, const char *src);成功执行后返回目标数组指针 dest。
  7. strcpy() 把src所指的由NULL结束的字符串复制到dest 所指的数组中,返回指向 dest 字符串的起始地址。
  8. 如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。
  9. strncpy()用来复制字符串的前n个字符,其原型为: char * strncpy(char *dest, const char *src, size_t n);
  10. 不像strcpy(),strncpy()不会向dest追加结束标记'\0',
  11. 如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
  12. strncpy 并不帮你保证 \0,如果 s2 的内容比较少,而 n 又比较大的话,strncpy 将会把之间的空间都用 \0 填充;

2.2编程练习:

2.2.1.编写程序,从输入读取几行字符,输出时前面加上行号;处理长度没有限制;

  1. #include<stdio.h>
    #include<stdlib.h>
    int main(){
    
    	int ch;
    
    	int line;
    
    	int at_beginning;
    
    	line = 0;
    
    	at_beginning = 1;
    
    	//逐个读取字符。
    
    	while ((ch = getchar()) != EOF) {
    
    		//若处在行的起始位置,打印行号。
    
    		if (at_beginning == 1) {
    
    			at_beginning = 0;
    
    			line += 1;
    
    			printf("%d", line);
    
    		}
    		putchar(ch);
    
    		if (ch == '\n') 
    
    			at_beginning = 1;
    
    	}
                  return EXIT_FAILURE;
    }
    

    运行结果:

  2. :【C和指针】第二篇: 快速入门-----知识汇总, 编程练习;

2.2.2.标准读取一些字符,写到标准输出上.计算checksum值,并写在字符后面

  1.  checksum检验用一个singed char 类型变量进行计算,初始值为-1;
  2. 每个字符标准输入读取时,值就加到checksum中;
  3. 所有字符军备写入后,程序以十进制整数的形式打印checksun的值,可能是负值;
  4.  
  5. 
    #include<stdio.h>
    
    #include<stdlib.h>
    
    int main() {
    	char ch;	
    	signed char checksum = -1;
    	while ((ch = getchar()) != EOF) {
    		putchar(ch);
    		checksum += ch;
    		if (ch == '\n') {
    			printf_s("%d\n", checksum);
    			checksum = -1;
    		}
    	}
    	return 0;
    }
    

    运行结果:

  6. 【C和指针】第二篇: 快速入门-----知识汇总, 编程练习;

2.2.3.编写一个程序,一行行的读取输入行,算出每行输入的长度,打印最长行;

  1. 假定输入行不超过1000;
  2. #define  _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    
    #include<stdlib.h>
    
    #include<string.h>
    
    #define MAX_LEN 1000
    
    int main() {
    	char input[MAX_LEN];//保存读取行长度
    	char longest[MAX_LEN];//保存最长行长度
    	int len;
    	int longest_len;
    	longest_len = -1;
    	printf("请输入数据,以Ctrl+Z结束输入:\n");
    	while ((gets(input) != NULL)) {
    		len = strlen(input);
    
    		if (len > longest_len) {
    			longest_len = len;
    			strcpy(longest, input);
    
    		}
    	}
    	if (longest_len >= 0) 
    		puts(longest);
    		printf("%d\n", longest_len);
    
    
    	printf("%d\n", longest_len);
    	system("pause");
    	return EXIT_SUCCESS;
    }
    

    运行结果:

  3. 【C和指针】第二篇: 快速入门-----知识汇总, 编程练习;

【C和指针】第二篇: 快速入门-----知识汇总, 编程练习;

五月的黄昏,

就像是松林的流水,

清澈温柔,影影绰绰;

 

五月的风里有游子未归的婉转笛声,

五月的晚霞是盛夏的请帖,

你好呀, 初夏时光.