第 1 部分 Visual Studio 6.0 开发环境介绍 本书以 Visual C++ 6.0 作为 C 源程序的实践开发环境, 本章将首先介绍 Visual C++ 6.0 环境的基本操作, 包括 Visual C++ 6.0 的安装和启动,C 源程序的编辑 运行与调试 1.1 安装与启动 Visual C++ 6.0 MSDN Visual C++ 6.0 1.1 Microsoft Visual Studio Visual C++ 6.0 Visual C++ 6.0 Microsoft Visual Studio Visual C++ 6.0 Visual C++ 6.0 1.2 1.1 Visual C++ 6.0 1.2 Visual C++ 6.0 1.2 环境介绍 C 1. 新建一个工程 Visual C++ 6.0 File New Ctrl+N NEW 1.3 1.4 New Projects Win32 Console Application Location OK OK 1.5 An empty project Finish 1.6
C 语言实训教程 1.3 1.4 New 1.5 1.6 OK 1.7 MyProjects C 2. 新建一个 C 源程序 File New 1.8 Files C++ Source File Add to Project MyProjects File.c OK.c VC++.cpp C++ 1.7 MyProjects C++ C.c OK MyFile.c 1.9 MyFile.c C Hello World 1.10 3. 打开一个现存的程序 File Open Workspace 1.11.dsw * File Save Ctrl+S 2
第 1 部分 Visual Studio 6.0 开发环境介绍 * File Save As 1.8 C 1.9 MyFile.c 1.10 MyFile.c 1.11 1.3 编译 链接和运行程序 1. 程序编译.obj 1.12 Build Compile MyFile.c MyFile.c Ctrl+F7 printf 1.13 syntax error; missing ';' before '' error warning error warning error warning 2. 程序链接.exe Build Build F7 1.14 3. 程序运行 Build Execute MyFile.exe 3
C 语言实训教程 Ctrl+F5 DOS 1.15 1.12 1.13 1.14 1.15 1.4 调试程序 Visual C++ 6.0 1. 设置断点 1.16 2. 调试界面 1.17 1.1 Name Value 4
第 1 部分 Visual Studio 6.0 开发环境介绍 1.16 1.17 表 1.1 调试工具常用按钮说明 按钮功能按钮功能 / 3. 常见错误 C C C 1 { int a=5; printf("%d",a); 提示 : 编译程序把 a 和 A 认为是两个不同的变量名, 而显示出错信息 C 语言认为大写字母和小写字母是两个不同的字符 习惯上, 符号常量名用大写表示, 变量名用小写表示, 以增加可读性 2 { float a,b; printf("%d",a%b); 提示 :% 是求余运算, 得到 a/b 的整余数 整型变量 a 和 b 可以进行求余运算, 而实型变量则不允许进行 求余 运算 3 char c; c="a"; 提示 : 在这里就混淆了字符常量与字符串常量, 字符常量是由一对单引号括起来的单个字符, 字符串常量是一对双引号括起来的字符序列 C 语言规定以 \ 作字符串结束标志, 它是由系统自动加上的, 所以字符串 "a" 实际上包含 'a' 和 '\' 两个字符, 而把它赋给一个字符变量是不行的 4 = == C = == if (a==3)a=b; 提示 : 前者是进行比较,a 是否和 3 相等, 后者表示如果 a 和 3 相等, 把 b 值赋给 a 由于习惯问题, 初学者往往会犯这样的错误 5
C 语言实训教程 5 C a=1 b=2 提示 : 编译时, 编译程序在 a=1 后面没发现分号, 就把下一行 b=2 也作为上一行语句的一部分, 这就会出现语法错误 改错时, 有时在被指出有错的一行中未发现错误, 就需要看一下上一行是否漏掉了分号 6 { z=x+y; t=z/100; printf("%f",t); ; 提示 : 复合语句的花括号后不应再加分号, 否则将会画蛇添足 7 & int a,b; scanf("%d%d",a,b); 提示 : 这是不合法的 scanf 函数的作用是 : 按照 a b 在内存的地址将 a b 的值存进去 &a 指 a 在内存中的地址 8 scanf("%d%d",&a,&b); 3 4 Enter Tab scanf("%d,%d",&a,&b); 提示 :C 规定, 如果在 格式控制 字符串中除了格式说明以外还有其他字符, 则在输入数据时应输入与这些字符相同的字符 9 %c scanf("%c%c%c",&c1,&c2,&c3); a b c 提示 : 字符 a 送给 c1, 字符 送给 c2, 字符 b 送给 c3, 因为 %c 只要求读入一个字符, 后面不需要用空格作为两个字符的间隔 10 a b a=3;b=4.5; printf("%f%d\n",a,b); 提示 : 编译时不给出出错信息, 但运行结果将与原意不符 这种错误尤其需要注意 11 scanf("%7.2f",&a); 提示 : 输入数据时不能规定精度 12 switch break switch(grade) { case 'A':printf("85~100\n"); case 'B':printf("70~84\n"); case 'C':printf("60~69\n"); case 'D':printf("<60\n"); 6
第 1 部分 Visual Studio 6.0 开发环境介绍 default:printf("error\n"); 提示 : 由于漏写了 break 语句,case 只起标号的作用, 而不起判断作用 因此, 当 grade 值为 A 时,printf 函数在执行完第一个语句后接着执行第二 三 四 五个 printf 函数语句 正确写法应在每个分支后再加上 break; 13 while do-while { int a=0,i; scanf("%d",&i); while(i<=10) { a=a+i; I++; printf("%d",a); { int a=0,i; scanf("%d",&i); do { a=a+i; I++; while(i<=10); printf("%d",a); 提示 : 可以看到, 当输入 I 的值小于或等于 10 时, 两者得到的结果相同 而当 I>10 时, 两者结果就不同了 因为 while 循环是先判断后执行, 而 do-while 循环是先执行后判断 对于大于 10 的数,while 循环一次也不执行循环体, 而 do-while 语句则要执行一次循环体 14 int n; scanf("%d",&n); int a[n]; 提示 : 数组名后用方括号括起来的是常量表达式, 可以包括常量和符号常量 即 C 不允许对数组的大小作动态定义 15 { static int a[10]={1,2,3,4,5,6,7,8,9,10; printf("%d",a[10]); 提示 :C 语言规定, 定义时用 a[10], 表示 a 数组有 10 个元素 其下标值由 0 开始, 所以数组元素 a[10] 是不存在的 16 int a[3]={0,1,2; 提示 :C 语言规定只有静态存储 (static) 数组和外部存储 (extern) 数组才能初始化 应改为 : static int a[3]={0,1,2; 17 & scanf("%s",&str); 提示 :C 语言编译系统对数组名的处理是数组名代表该数组的起始地址,scanf 函数中输入项是字符数组名, 不必再加地址符 & 改为 : scanf("%s",str); 7