CWriting


C语言笔记本

前言

这是大一修C语言程序设计基础的时候留下的笔记,其中编程规范是学校批改器独有的判定项目,不过确实挺好看的。以后有Astyle就没那么麻烦了。

1.一些基本内容

1.1编程规范

对于成信大的c考试,学校的批改器有着严格的要求

#include<stdio.h>
//库声明和全局define与函数声明间要有空行
int main(void)//main的参数要写void
{
	char str[127];
	int chnum = 0, i, last = 0;//运算符号前后空格,逗号后面空格
//程序中每段变量声明后面都要空行
	printf("please input a string:\n");
	gets(str);
//for if while等函数前后空行
	for (i = 0; str[i] != '\0'; i++)//分号后面如果有东西也要空格
	{
		if ((str[i] != ' ') && (str[i] != '\0'))
		{
			chnum++;
		}
		else
		{
			if (chnum > last)
			{
				last = chnum;
			}
			chnum = 0;
		}
	}

	if (chnum > last)
	{
		last = chnum;
	}
	printf("\nmax_length of the string is: %d\n", last);
//return 0 与前面内容换行
	return 0;
}
//copyright 21/11/09 by La3urit,all Rights Reserved

2.数据与变量

2.1基本数据类型

下表列出了关于标准整数类型的存储大小和值范围的细节:

类型 存储大小 值范围 占位符
char 1 字节 -128 到 127 或 0 到 255 %c
unsigned char 1 字节 0 到 255
signed char 1 字节 -128 到 127
int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 %d
unsigned int 2 或 4 字节 0 到 65,535 或 0 到 4,294,967,295
short 2 字节 -32,768 到 32,767
unsigned short 2 字节 0 到 65,535
long 4 字节 -2,147,483,648 到 2,147,483,647
unsigned long 4 字节 0 到 4,294,967,295
float %f
double %lf

ch = ‘\‘;单反斜杠是不符合语法的

中文要使用字符串储存,一个汉字占两个字节,想打印汉字要这样写

str[]="中华人民共和国";
printf("Is %c%c", str[0], str[1]);

结果
Is 中

做比较操作也是这样

2.2占位符的高级使用

%lf

注意:占位符的高级使用只能在输出使用

2.2.1 保留小数N位

%.Nlf N为要保留位

printf("%lf", 1.12345)  -->0.12345
printf("%.lf", 1.12345)  -->1
printf("%.2lf", 0.12345)  -->1.12

%a.blf

a为总长(包括小数点),b为小数长

printf("%lf", 1234.12345)  -->1234.12345
printf("%6.1lf", 1234.12345)  -->1234.1

2.2.2 使用0补齐空位

%03d 3为要有的总长

printf("%05d", 123)  -->00123

当和上面保留数位联合一起使用

%16.7lf ---- 表示一共有16位,小数部分7位,空余位不足用空格补全
%016.7lf ---- 表示不足位用零补齐

2.2.3 更更高级的

访问(https://blog.csdn.net/yss28/article/details/53538063)

一般形式
printf("格式控制字符串",输出列表);
格式控制字符串形式
[标志][输出最小宽度][.精度][长度][类型]

2.2.4 常量的书写

八进制 例如 012,在数字前面加0

科学计数法

2e5----2乘10的五次方
3.2E-3---3.2乘10的-3次方

这种表示方法对e的大小写没有要求

2.2.5 自增运算符

a++与++a

++在左边表示先加在参与运算(值被调用),在右边表示先参与运算再++

2.2.6 运算的顺序

=赋值优先级最低

3. 输入与输出

3.1 输入

scanf() 格式化输入

scanf("%d", &num)

scanf可以指定间隔

scanf("%d,%d", &num1, &num2)

这意味着,输入 1,2将会为num1,num2分别赋值1,2。当间隔是空格或者换行符时可以不需要写出来。

gets() 读取一行字符串

char str[50]
gets(str)

scanf()函数gets()函数的区别在于,后者能读取从键盘输入的空格并存入数组中。这里值得注意的是,空格的ASCII值和‘\0’相同。所以在用scanf()函数读取键盘输入时,会把空格当做’\0’结束符,就无法读取并储存空格到数组中去。

3.2 输出

printf() 打印

printf("abc %d", num)

num可以为一个表达式

puts() 输出一个字符串

puts(str)

/125

类似这样的形式,表示输出以后面数字为ASCII码的字符,后面的数字只能是8进制数

4. 选择结构程序设计

4.1 if 语句

if (判断表达式)
{
}

判断表达式的本质是一个值,由表达式进行逻辑运算得到。

若if语句括号后面有” ; “分号,则这一行会锁死,一直判断直到为真。(*==此条待验证在不同编译器下的表现==*)

if后面可接多个else if

在 if 的判断条件里可以写表达式,比如

if (Time++ == 10)

虽然不好看,但是有时候挺实用…

4.2 swich 语句

Switch语句可以简单清晰的描述多分支结构,可用于涉及分支较多的情况

swhich (表达式)
	case 常量:
		语句
	case 常量:
		语句
	default:
		语句

在switch语句中首先先计算出表达式的值,再将表达式值与常量作比较,==若与某一个常量相等,则执行该case后所有case内的语句==(所以要记得加break),若表达式中的值与各分支常量的值都不等,则跳转到default语句。

5. 循环结构程序设计

5.1 for 语句

for (循环控制变量初始化; 循环终止条件; 循环控制变量增量)
{
    (循环体)
}

在 for 的循环终止条件,循环控制变量增量里可以写表达式,比如

for (; i++ < 10;)
for (; i < 10; i += 2)

虽然不好看,但是似乎能用…

5.2 while 语句

while(循环终止条件)
{
    循环体
    循环控制变量增量(看你需要)
}

同样的,在循环终止条件里可以写表达式…

5.3 do…while 语句

循环控制变量初始化
do
{
    循环体
    循环控制变量增量(看你需要)
}while (循环终止条件);

循环执行步骤:

第一,先进行循环控制变量初始化(在do while之前);

第二,执行循环体;

第三,执行循环控制变量增量;

第四,判断循环终止条件,如果判断结果为真,则返回第二步;如果为假则直接退出循环;

如:

int main()
{
    int a = 0, x = 0;

    do
    {
    	x += a;
    	a++;
    }while(a < 10)

    return 0;
}

应该用不上这玩意的…

5.4 break 和 continue

5.4.1 break

break语句常用于退出当前的某种程序状态,中断循环等

for (i = 0; i < 100; i++)
{
	条件判断
	{
		break;
	}
}

这会直接跳出这个 for 循环

5.4.2 continue

continue语句用于跳过一次循环,直接执行循环控制变量增(减)量,执行下一次的循环体

for (i = 0; i < 100; i++)
{
	条件判断
	{
		continue;
	}
}

如果满足,会跳过当次 for 循环,随后 i + 1,开始下一次循环

6. 指针

指针可以相减,指向同一个地址,比较,但是不能相加


  目录