2022年6月30日周四
(一)简单C程序的格式
#include<stdio.h>
int main(void){
语句;
return 0;
}
//大部分语句都是以分号结尾。
(二)提高程序可读性的技巧
1.选择有意义的函数名和变量名。
2.写注释。
3.在函数中用空格分隔概念上的多个部分,如声明和其他部分分开。
4.每条语句都各占一行。
(三)C90后的新版函数
函数原型(函数声明),函数定义,函数调用。
/*two_func.c--一个文件中包含两个函数*/
#include<stdio.h>
void butler(void);//C函数原型
int main(){
printf("I will summon the butler function.\n");
butler();
printf("Yes.Bring me some tea and writeable DVDs.\n");
return 0;
}
void butler(){
printf("You rang,sir?\n");
}
(四)所有C程序都从main()开始执行
2022年7月1日周五
(一)程序调试的方法
编译器可以检测出语法错误,但是程序里的语义错误只有在编译完之后才能从程序的行为中表现出来。检查程序是否有语义错误要跟踪程序的状态,即程序每执行一步后所有变量的值。
1.自己模拟计算机逐步执行程序。
但是,如果程序中有10000次循环,这种方法恐怕行不通。不过,可以跟踪一小部分循环,看看程序是否按照预期的方式执行。
2.在程序中的关键点插入额外的 printf() 语句,以监视制定变量值的变化。
通过查看值的变化可以了解程序的执行情况。对程序的执行满意后,便可删除额外的 printf()语句,然后重新编译。
3.使用调试器。
调试器(debugger)是一种程序,让你一步一步运行另一个程序,并检查该程序变量的值。调试器有不同的使用难度和复杂度。较高级的调试器会显示正在执行的源代码行号。这在检查有多条执行路径的程序时很方便,因为很容易知道正在执行哪条路 径。
(二)关键字和保留标识符
1.关键字是C语言的词汇。它们对C而言比较特殊,不能用它们作为标识 符(如,变量名)。如果使用关键字不当(如,用关键字作为变量名),编译器会将其视为 语法错误。
2.还有一些保留标识符(reserved identifier),C语言已经指定了它 们的用途或保留它们的使用权,如果你使用这些标识符来表示其他意思会导致一些问题。因此,尽管它们也是有效的名称,不会引起语法错误,也不能随便使用。保留标识符包括那些以下划线字符开头的标识符和标准库函数 名,如printf()。
(三)练习题
/*1.编写一个程序把你的年龄转换成天数,并显示这两个值。*/
#include<stdio.h>
int main(){
int olds=0;
int days=0;
int year=0;
scanf("%d",&olds);
year=2022-olds;
for(int i=year;i<2022;i++){
//闰年的判断条件:能被4整除但不能被100整除,或者能被400整除
if((i%4==0&&i%100!=0)||i%400==0)
{
days+=366;
printf("%d ",i);//输出从出生起到目前为止所有的闰年
}else{
days+=365;
}
}
printf("\n");
printf("年龄%d岁,天数%d天",olds,days);
return 0;
}
/*2.编写一个程序,生成以下输出:
For he's a jolly good fellow!
For he's a jolly good fellow!
For he's a jolly good fellow!
Which nobody can deny!
除了 main()函数以外,该程序还要调用两个自定义函数:一个名为jolly(),
用于打印前 3 条消息,调用一次打印一条;另一个函数名为 deny(),打印最后一条消息。*/
#include<stdio.h>
void jolly(void);//函数原型(函数声明)
void deny(void);
int main(){
jolly();//函数调用
jolly();
jolly();
deny();
return 0;
}
/*函数声明*/
void jolly(){
printf("For he's a jolly good fellow!\n");
}
void deny(){
printf("Which nobody can deny!");
}
/*3.编写一个程序,整创建一个型变量toes,并将toes设置为10。
程序中还要计算toes的两倍和toes的平方。该程序应打印3个值,并分别描述以示区分。*/
#include<stdio.h>
int main(){
int toes;
toes=10;
printf("toes is %d,double toes is %d,square toes is %d",toes,toes*2,toes*toes);
return 0;
}
/*4.许多研究表明,微笑益处多多。编写一个程序,生成以下格式的输出:
Smile!Smile!Smile!
Smile!Smile!
Smile!
该程序要定义一个函数,该函数被调用一次打印一次“Smile!”,根据程序的需要使用该函数。*/
#include<stdio.h>
void smile();
int main(){
//外层循环表示行数
for(int i=0;i<3;i++){
//内层循环表示列数
for(int j=3;j>i;j--){
smile();
}
printf("\n");
}
return 0;
}
void smile(){
printf("Smile!");
}
2022年7月2日周六
(一)输入
(二)常量和变量
(三)数据类型关键字
_Bool类型表示布尔值(true或false), _complex和_Imaginary分别表示复数和虚数。
2022年7月4日
(一)变量如何获得值?
![](https://img-blog.csdnimg.cn/61706333192a471d92720a62cb40020d.png)
(二)八进制和十六进制
2022年7月4日
(一)显示八进制和十六进制
显示案例
/* bases.c--以十进制、八进制、十六进制打印十进制数100 */
#include<stdio.h>
int main(){
int x=100;
printf("dec=%d,octal=%o,hex=%x\n",x,x,x);
printf("dec=%d,octal=%#o,hex=%#x\n",x,x,x);
return 0;
}
(二)C语言提供3个附属关键字修饰基本整数类型:short、long和unsigned。
(三)整数溢出
/*超出系统允许的最大整数值*/
#include<stdio.h>
int main(){
int i=2147483647;
unsigned int j=4294967295;
printf("%d %d %d\n",i,i+1,i+2);
printf("%u %u %u\n",j,j+1,j+2);
return 0;
}
(四)打印short、long、long long和unsigned类型
打印练习
/* 更多printf()的特性,打印不同类型的整型*/
#include<stdio.h>
int main(){
unsigned int un=3000000000;
short end=300;
long big=65537;
long long verybig=12345678908642;
printf("un=%u and not %d\n",un,un);/* int为32位和short为16位的系统 */
printf("end=%hd and %d\n",end,end);
printf("big=%ld and not %hd\n",big,big);
printf("verybig=%lld and not %ld\n",verybig,verybig);
return 0;
}
运行结果
![](https://img-blog.csdnimg.cn/cddac035c1c14fe688a87d291c763c27.png)