学校开学第一课方案:关于c语言中的类型转换,谢谢了啊!!!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 19:02:01
本人初学c语言,想问下 float a;
a=3.74;
这两个语句的组合是正确的吗?为什么我们老师把第二个语句要我改成 a=(float)3.74;还有一个问题,显示转换和隐示转换有什么区别,他们和强制转换又有什么区别啊?请举例说名,谢谢帮忙,急!!

float a;
a=3.74

float a;
a=(float)3.74
是等价的.

所谓隐式类型转换就是当精度小的数据赋给精度高的
数据时自动将精度小的转换为精度高的如:
int a=3;
float b;
b=a;
当执行到b=a时,自动将a的值3转换为浮点数的3

所谓的显式类型转换就是当精度高的数据赋给精度低
的数据时要显示的转换它如:
int a;
float b=3.23;
a=(int)b;
当执行到a=(int)b的时候显示地将b转换为整型赋给a

a=3.74f is ok,here 3.74 is a float
在c++中(不清楚在c中是否如此)浮点数默认是双精度的,也就是double,所以此处编译器进行了隐式类型转换.

错是没错,不过编译器会给出warring(警告),因为C中默认小数是Double型的,赋值给Float型会损失精度。
你可以像你老师说的写成a=(float)3.74用显示转换来消除警告,或者写成a=3.74f 来代表这是一个float型小数

显然是对的嘛!!!

正确!老师可能是因题目的关系而作的改变,其实这两种在处理实际问题时没有太大的出入。

main() /*No.1主函数*/
{
printf("Welcome to study C program.\n");
printf("This is Lesson One.\n");
}
程序写好后,按“F9”,然后按"Alt-F-O",就进入DOS提示符下
去执行它。

Welcome to study C program.
This is Lesson One.

怎么样?你自己的程序也变成了*.exe型的可执行文件了。按
“EXIT”可以返回到系统。
上例中“main()”是程序的主函数。C 语言程序由一系列函数组
成,而且每个程序必须有且只有一个主函数,即“main()”。在第一
行末还有/* */所夹的内容,它在程序编译时不参与编译,只说明程
序的作用,即起注释作用。所以在你抄本教程的例子时可不抄这一部
分内容。
每个函数必须由“{ }”括起来,每句程序必须用“;”结束。
第3行第4行中printf是C语言用来在屏幕上输出信息的一个重要
函数,最简单的格式是
printf("显示的内容");
字符串后面的“\n”不会显示在屏幕上,它的意思是“回车换行”
接下来,你把第3行后面的“\n”去掉,再按“F9”后去执行,
你就会发现两行内容都印在了一行。

Welcome to study C program.This is Lesson One.

如果在“\n”后加上“\a”,即每显示一行出现一次响铃。
如下表,是“\”后面字符的特殊含义。
\r
回车不换行(到行首)

\t
横向跳到下一输出位

\b
向左退格

\\
输出字符"\"

好。下面把程序中“printf("This is Lesson One.\n");”
换成“printf("\tThis is Lesson One.\n");”,执行一下程序。

Welcome to study C program.
This is Lesson One.

下面再换成“printf("This is \b\bLesson One.\n");”再执行
一下。

Welcome to study C program.
This iLesson One.

程序中的“s ”并不是没有显示,而是显示后,又被“Le”给盖
上了。
要想在屏幕上输出一个“C:\>”则要写上“printf("C:\\>");”
好了,第一节就要此为止。你赶快复习一个。你知道今天所学的
知识了吗?(只要学会了这些就别再多学了,贪多吃不烂。)
1.printf("显示信息") 最简单的输出格式
2.“{ }” 用来括起函数
“;” 每句程序的结束标志
3.“\t”“\n”“\b”“\a”是什么意思?
4.主程序的标志是什么?
5./* */ 是用来注释程序
不过先别关机,如果你用的是UCDOS或是成然汉字,你可以把显
示的信息用中文代替。如:printf("我一定要把C语言学会!\n");

您的当前位置是:首页>>电脑知识>>文本方式下的显示

--------------------------------------------------------------------------------

文本方式下的显示

C语言中,图形函数大致可分为两类:字符模式函数和图形模式函数。本节我们练习使用字符模式函数。
使用字符模式函数应该在程序中联入conio.h头部文件。
下面是一些函数的作用
1) void clreol(); 从光标处删除到本行末
2) void delline(); 清除本行内容,下面内容上提一行
delline();函数实际上还起到了向上卷屏的作用。
3) void insline(); 在光标所在行插入一空行,原来该行及以
下各行皆向下移一行
4) int wherex(); 返回当前光标的x(行)坐标
5) int wherey(); 返回当前光标的y(列)坐标
6) void highvideo(); 字符输出用高亮度字符
7) void lowvideo(); 字符输出用低亮度字符
8) void normvideo(); 字符输出用普通亮度字符
在以上的各函数中皆不带参数,当然也可以写成括号中有void的形式:
void wherex(void); 还可以写成 wherex();
清屏、清行、向后删行、插行的操作真有些CCED、WPS等编辑软件的风格,就是在你平时的屏幕设计中也用少不了。返回坐标的函数则给你的设计提供每一个环节的光标坐标值。有利于你前后响应。字
符亮度的改变则会让你的字符显示出层次感,怎么样,赶快试试吧:
/* No32.c*/
# include "stdio.h"
# include "conio.h"
main()
{ clrscr();
gotoxy(10,1);
cprintf("甜密密,");
highvideo(); /*高亮度显示*/
cprintf("\r\n 你笑得甜密密,");
lowvideo(); /*低亮度显示*/
cprintf("\r\n 好象花儿开在春风里,");
normvideo(); /*普通亮度显示*/
gotoxy(10,4); cprintf("开在春风里");
cprintf("\r\n 在哪里,在哪里见过你?");
printf("\r\n 你的笑容这样熟悉。");
gotoxy(10,20);printf("任意键删去光标后的内容");
gotoxy(18,3); getch();
gotoxy(18,3);
clreol(); /*删去光标后字符*/
gotoxy(10,20);printf("任意键删去本行的内容 ");
gotoxy(18,3); getch();
delline(); /*删去本行*/
gotoxy(10,20);printf("任意键在本行插一空行 ");
gotoxy(18,3); getch();
insline(); /*插入一空行*/
gotoxy(1,7);
}
应该注意的是,要发挥本节所讲的函数的作用,在显示时不能使printf函数,应使用cprintf函数。它的使用方法和printf的完全一样,只不过后面的cprintf能发挥亮度设置和颜色设置的作用。前者
printf函数只有一种颜色和单一的亮度。
在cprintf函数中,“\n”的作用不再是既回到行首又换行,它只起一个换行的作用,所以要把内容在行首显示必须再加一个“\r”
上面的程序不是一真正对大家有用的程序,只是用来说明一个刚刚学到的几个函数的作用。在conio.h中还有一些字符型函数,它们都是带参数的。
9) void textcolor(颜色); 定义显示字符颜色
10) void textbackground(颜色); 定义背景颜色
下面是颜色数字和颜色对照表
BLACK 0 黑 DARKGRAY 8 深灰
BLUE 1 兰 LIGHTBLUE 9 淡兰
GREEN 2 绿 LIGHTGREEN 10 淡绿
CYAN 3 青 LIGHTCYAN 11 淡青
RED 4 红 LIGHTRED 12 淡红
MAGENTA 5 洋红 LIGHTMAGENTA 13 淡洋红
BROWN 6 棕 YELLOW 14 黄
LIGHTGRAY 7 淡灰 WHILT 15 白
背景颜色值只能是0-7共8个数字或其对应的英文大写单词。而前景(即字符)的颜色可以是0-15共16种颜色或其对应的英文大写单词。当你定义的前景和背景相同时,屏幕上看不到输出的内容。
textcolor(4); 和 textcolor(RED); 效果是相同的。
设置屏幕颜色还可以使用
11) void textattr(前景颜色+(背景颜色));
但这里的背景颜色要有“<<4”。如白底红字,就是:
textattr(RED+(WHITE<<4));
12) int gettext(左上角x,左上角y,右下角x,右下角y,内存指针);
把定义的长方形区域内的内容存在内存中
13) int puttext(左上角x,左上角y,右下角x,右下角y,内存指针);
把内存中存好的内容显示在新定义的矩形块内
这里的内存指针也可用字符形数组来代替。需要注意的是内存大小应该是所存内容的“行数*列数*2”。比如把第3行第5列到第6行第75列的数据存到内存中,可以用下面的片段:
char buffer[4*70*2];
gettext(5,3,75,6,buffer);
然后你就可以用puttext函数来显示它了。
14) void movetext(左上角x,左上角y,右下角x,右下角y,
新左上角x,新左上角y);
把矩形块移到新左上角(x,y)决定的地方
15) void window(左上角x,左上角y,右下角x,右下角y);
定义一个窗口,大小就是上面参数决定的长方形
利用这一函数,你可以在屏幕上任何一个地方开辟一个窗口,并在上面显示需要的内容。这丝毫不影响屏幕其它地方的内容。当你定义了窗口后,你只能操作该窗口,gotoxy(),wherex(),wherey(),
clrscr()等等函数所表示的都是你定义窗口中的情况。实际上这就为我们的操作带来了方便,你想操作哪儿,就定义哪儿,想回到平时状态的屏幕,就定义一个最大的窗口,window(1,1,80,25);就复原了。
No.33号例子是利用puttext和gettext函数以及颜色定义来模仿CCED和WPS的菜单显示。但这个小程序没有可移动的光条,也没有菜单中内容的相应执行程序,只是演示一下屏幕的保存和释放而已。
/* No33.c */
#include "conio.h"
#include "stdio.h"
main()
{ int i=1,j,ch;
char buffer[6*50*2]; /*开辟内存空间的大小*/
clrscr();
textcolor(0); /*定义字符颜色*/
textbackground(7); /*定义背景颜色*/
gotoxy(1,1);
cprintf(" 功能1 功能2 功能3 ");
textbackground(0);
textcolor(14);
gotoxy(1,2);
cprintf("What's your name? 你叫什么名字");
cprintf("\n\rMy name is Wang Dong. 我叫王东.");
cprintf("\n\rHow old are are you? 你多大了 . ");
cprintf("\n\rI'm thirty-four. 我四十四了");
cprintf("\n\r\n\rThis is Lesson One. 这是第一课");
while(1)
{ j=i;
textcolor(0);
textbackground(7);
if(i==1)
{ gettext(1,2,13,5,buffer);
gotoxy(2,2); cprintf("│第一课│");
gotoxy(2,3); cprintf("│第二课│");
gotoxy(2,4); cprintf("│第三课│");
gotoxy(2,5); cprintf("└———┘");
}
if(i==2)
{ gettext(13,2,25,5,buffer);
gotoxy(14,2); cprintf("│菜单一│");
gotoxy(14,3); cprintf("│菜单二│");
gotoxy(14,4); cprintf("│菜单三│");
gotoxy(14,5); cprintf("└———┘");
}
if(i==3)
{ gettext(25,2,37,5,buffer);
gotoxy(26,2); cprintf("│说明A │");
gotoxy(26,3); cprintf("│说明B │");
gotoxy(26,4); cprintf("│说明C │");
gotoxy(26,5); cprintf("└———┘");
}
textcolor(14);
gotoxy(10,20);printf("→向右移动 ←向左移动 Esc 退出");
ch=getch();
if((ch==75)&&(i==1)) /*菜单个数的判断*/
{ i=3; ch=0;}
if((ch==77)&&(i==3)) /*ASCII码 77是右箭头*/
{ i=1; ch=0;}
if((ch==75)&&(i>1)) /*ASCII码 75是左箭头*/
i--;
if((ch==77)&&(i<3))
i++;
if(ch==27)
break;
puttext(j*12-11,2,j*12+1,5,buffer);
}
}

您的当前位置是:首页>>电脑知识>>基本输入输出

--------------------------------------------------------------------------------

基本输入输出

基本输入输出函数
下面要进行的工作是编个程序,你输入什么,它就显示什么。程序如No.2所示。
main() /* No.2 */
{
char ch[12]; /*定义一个字符串*/
int i; /*定义一个整(数)型变量*/
printf("请输入一个字符串:"); /*显示提示信息*/
scanf("%s",ch); /*用输入函数输入字符串*/
printf("请输入一个整数:");
scanf("%d",&i); /*输入一个整数*/
printf("输入的字符串是:%s 输入的数字是%d",ch,i);
}
如果你输入的字符串是“中华人民共和国”,数字是2000,那么编译成EXE文件后执行

请输入一个字符串:中华人民共和国
请输入一个整数:2000
输入的字符串是:中华人民共和国 输入的数字是2000

怎么样?比No.1程序要好一些吧,想显示什么就显示什么。你还
可以显示代数式的结果:如把第8行最末尾的数据“i”换成“i*10”
printf("输入的字符串是:%s 输入的数字是%d",ch,i*10);
运行程序时,输出如下:

请输入一个字符串:中华人民共和国
请输入一个整数:2000
输入的字符串是:中华人民共和国 输入的数字是20000

本程序注释较多,这样就增加了程序的可读性。通过此程序我们应学习哪些知识呢?
第3行和第4行是对数据进行定义,任何一个变量在C 语言中必须先定义才能使用。
第5行和第7行的scanf()是输入函数,用来输入用户信息。其格式是:
scanf("数据格式说明",数据列表);
之所以是“数据列表”,就是说这里的数据,既可以是一个,也可以是多个,既可以是相同格式的数据,也可以是不同格式的数据。
scanf("%s%d",ch,&i);
它说明的含义是让用户输入一个字符串再输入一个整数,中间用空格分开。
在格式说明中“%s”“%d”是什么意思呢?“%s”说明输入的是 字符串,“%d”说明输入的是整数
注意:C语言中,整数叫“整型数据”。其它格式如下表所示 %d
十进制整数

%o
八进制整数

%x
十六进制整数

%f
小数或指数形式数据

%c
输入单个字符

上表格式说明也同样适用于printf()函数。如第8行就是一例。需要注意的是,在输入数字或单个字符时,数据列表必须用取地址符号,即“&”,而在输出时则不用。
下面再看一看No.3号程序
main() /*No.3*/
{ int a=5,b=10,c,d;
c=200;
d=a*(b+c);
printf("a*(b+c)=%d",d);
}
在这个小程序里,我们计算了一个小代数式的值,然后输出了它的值。需要说明的是,第二行中,在定义变量时可以赋初值。也可以象第三行那样,在定义后再赋初值。
在C语言中,除了整数外,还有无符号整数、实数(浮点数)、长整数、双清度实数。
在C语言中,整数并不是可以无限大,它的大小是有一定限度的,超过了这个限制,程序就会出错。大小规定如下表所示:

数据类型
存储位(bit)
数值范围

整型 int
16
-32768—32767

无符号整数unsigned
16
0—65535

实数 float
32
10E38—10E38

长整型 long int
32
-2147483648—2147483647

双精度实数 double
64
10E-308—10E308

我们下面练习一个No.4号程序
main() /* No.4 */
{ int a=1000,b=2500,i1;
long c=1000,b=2500,i2;
i1=a*b;
i2=c*d;
printf("整型数据1000*2500的积是%d\n",i1);
printf("长整型数据1000*2500的积是%ld\n",i2);
}
执行程序,屏幕输出:

整型数据1000*2500的积是9632
长整型数据1000*2500的积是2500000

上例中,因为整型数据超出了32767的限制,所以出错。如果计
算结果超过32767,在设计时就应该定义成长整型数据。
今天学习的内容太多了,下面的内容你会多少?
1.输入函数scanf()和输出函数printf()的格式是怎样的?
2.scanf()在输入字符串时和输入数字时有什么区别?
3.输入输出时“%s %d %o %x %c %f”表示什么意思?
4.你能大致了角数字数据类型和最大值最小值吗?
头关机以前,你能否再看一眼No.2、No.3、No.4三个程序

您的当前位置是:首页>>电脑知识>>定位输出

--------------------------------------------------------------------------------

定位输出

在系统程序中,显示内容是方便的,任何一个位置都可以显示,
那么,我们怎样随意显示输出内容呢?在C语言中,光标定位用:
gotoxy(列坐标,行坐标);
下面的No.5例子就是它的具体应用:
/* No5.c*/
#include "stdio.h" /*连入头部文件stdio.h*/
main()
{
char ch; int i;
gotoxy(10,4); /*把光标定位在(10,4)坐标处*/
printf("输入一个字符,它便以大写的形式输出 ");
ch=getchar(); /*用getchar()函数输入一个字符*/
if ((ch>='a') && (ch<='z'))
ch=ch-32;
gotoxy(10,7);
printf("输入一个整数,便把它大1和小1的数输出 ");
scanf("%d",&i);
gotoxy(15,13); printf("你输入的字符大写为%c",ch);
gotoxy(15,14);
printf("你输入的%d两侧的数分别为%d,%d",i,i-1,i+1);
}
第1行是在编译时把stdio.h连入程序文件。具体作用见No.6解释
在上程序的第4行中,两类数据定义占了一行,这是允许的。C语
言程序写法是很随便的,它可以一行一句,也可以一行写多句,上例
的第13行也是这样书写的。不过一般情况下我们不这样写。为了程序
在检查和阅读时方便,我们一般一行写一句,而且程序中一个层次的
内容和另一个层次的内容使用缩格排版格式。如上程序的main()函数
上例中的if()语句等。以后程序中层次越多,越应该形成这样的好习
惯。
如果你输入的字符是m,数字是11,则屏幕输出如下:

输入一个字符,它便以大写的形式输入 m
输入一个整数,便把它大1和小1的数输出 11

你输入的字符大写为M
你输入的11两侧的数分别为10,12

在No.5程序中出现了一个新的函数,它是字符输入函数,它的作用是只输入一个字符。
除了它,还有两个字符输入函数,如右表

getchar()
字符显示,回车键结束

getche()
字符显示,不必按回车

getch()
字符不显示,不必按回车

上述三个字符输入函数使用时没有参数,即()中没有内容。
在C语言中,字符也有大小,它按ASCII表中的值排列大小。可以
进行字符间及字符与数字间的运算。如上例的“ch=ch-32;”。比较
字符大小时,可用字符直接比较,如上例的第7行那样;也可以用数
值进行比较,上第7行可改为:
if ((ch>=97) && (ch<=122))
上一行是程序中的条件语句,它的简单格式是
if(条件表达式)
{ 内容1;}
else
{ 内容2;}
如果条件表达式成立,执行内容1,不成立则执行内容2。else语
句可有可无。当执行内容只有一行时,可以省略内容两侧的“{ }”
上述程序的执行内容就没有“{ }”
在上例的“if ((ch>='a') &&(ch<='z'))”中“&&”是逻辑运
算符,逻辑运算符如下表所示

&&
逻辑与

||
逻辑或

!
逻辑非

任何时候,学习都是为了应用。下面我们编写一个电子表程序:
/* No6.c */
# include "stdio.h" /*连入头部文件stdio.h*/
# include "dos.h" /*连入头部文件dos.h*/
main()
{ struct time t; /*定义时间变量 t */
struct date d; /*定义日期变量 d */
clrscr(); /*清屏*/
getdate(&d); /*获取当前日期*/
gotoxy(33,4);
printf("%d.%d.%d",d.da_year,d.da_mon,d.da_day);
while(!kbhit()) /*如果没有按键,则执行下面内容*/
{ gotoxy(34,6);
gettime(&t); /*获取当前时间*/
printf("%d:%d:%d",t.ti_hour,t.ti_min,t.ti_sec);
}
}
C语言程序特别灵活,它可以把别的程序或文件中的内容,连入
到你的程序中,在C语言中已经有许多我们用到的内容放在了头部文
件中,本例中就是利用了"dos.h"头部文件中的时间和日期的定义。
这种连入,既可以是C语言内部的头部文件(*.h),也可以是你自已
写的文件。你自己被连入的文件既可以是“*.h”文件,也可以是
“*.c”文件。文件连入写法有两种:
#include "dos.h" 用这种写法 dos.h 文件放在当前目录中
#include <dos.h> 用这种写法 dos.h 文件放在TC\INCLUDE目
录中。
第6行中“clrscr();”是清屏函数,它不带参数,作用:清屏
第11行的“kbhit()”函数是用来检测用户是否按了键,但它不
能测试出你按的什么键。要知道按的是什么,必须和输入函数配合使
用。
第11行有“while(!kbhit())”是个循环语句,它的意思是:只
要没有按键,程序便执行{...}所括的内容。
本节内容提纲如下:
1.光标定位:gotoxy(列从标,行坐标);
2.getchar()、getcha()、getch()三个字符输入函数输入时情况
是不同的,一个是光标是否回显,一个是是否用回车结束
3.if(...) 如果...便执行{...}中的内容
4. &&逻辑与,||逻辑或,!逻辑非
5.#include "..." 把...文件和主程序连在一起编译
6.kbhit()测试按键是否按

您的当前位置是:首页>>电脑知识>>使用文件

--------------------------------------------------------------------------------

使用文件

到此为止,我们仍停留在屏上,一些需要的东西还不能做为资料保存。要想把你看到的保留下来,就得把资料存储在磁盘文件中,本节我们用两个例子来学习使用文件。
No.7程序是模仿DOS命令中copy的程序。
/* No7.c */
#include "stdio.h" /*连入stdio.h*/
main(int argc,char *argv[]) /*带参数的程序(带命令行参数)*/
{
char ch;
FILE *in,*out; /*定义文件指针*/
if(argc!=3) /*如果命令行数目不等于3*/
{ printf("格式应该是: No7 源文件名 目标文件名\n");
exit(1); } /*退出程序*/
if((in=fopen(argv[1],"r"))==NULL) /*打开源文件*/
{ printf("文件不存在或磁盘没准备好!\n");
exit(1); }
if((out=fopen(argv[2],"w"))==NULL)
{ printf("文件复制失败!\n");
exit(1); }
while((ch=fgetc(in))!=EOF) /*如果读出的数据不是结尾标志*/
fputc(ch,out); /*把读出的数据写到目标文件中*/
fclose(in); /*关闭文件*/
fclose(out);
printf(" 1 个文件复制成功 \n");
}
上述程序的主程序是带参数的,argc表示命令行的元素个数,argv[],用来接收程序所带的参数。这些参数的接收都是在执行程序时自动完成的。如用上例程序把名为“HEBEI”文件,复制到名为“BEIFEN”的文件,命令行应执行:
no7 hebei beifen
执行后,argc值为3,argv[1]成为“hebei”,argv[2]赋值为“beifen”。
上例中“exit(1);”表示退出程序的执行,返回到DOS提示符。
文件打开格式用
文件指针=fopen(文件名,"打开方式");
if((in=fopen(argv[1],"r"))==NULL) 意思是“如果文件打开失败”,则... ...
打开方式中“r”是打开文件后,只能从文件中读取信息。“w”是打开文件后,只能从文件中写信息。下面是打开方式及功能列表

r
打开一个文本文件读
rb
打开一个二进制文件读

w
打开一个文本文件写
wb
打开一个二进制文件写

a
打开一个文本文件添加
ab
打开一个二进制文件添加

r+
打开一个文本文件读写
r+b
打开一个二进制文件读写

w+
生成一个文本文件读写
w+b
生成一个二进制文件读写

a+
打开或生成文本文件读写
a+b
打开或生成二进制文件读写

“fclose(文件指针);”用来关闭已打开的文件。 如上面的
fclose(in); fclose(out); 就是应用。
fgetc(文件指针); 从文件中读取一个字符。
fputc(字符,文件指针); 把字符写到文件中去。
EOF是文件结束标志。
下面我们编个简易的文本文件阅读器,它相当于DOS中的“type 文件名 | more”,也就是分页显示文本文件。
/*No8.c*/
#include "stdio.h"
main(int argc,char *argv[])
{
FILE *fp;
int i=1;
char ch;
if(argc<2) /*如果命令行参数少于两个*/
{ printf("正确使用方法是: no8 文本文件名");
exit(1);} /*退出*/
if((fp=fopen(argv[1],"r"))==NULL) /*如果文件打开失败*/
{ printf("%s 不存在",argv[1]);
exit(1);}
else
{ clrscr(); /*清屏*/
while((ch=fgetc(fp))!=EOF) /*读取文件中的字符*/
{ printf("%c",ch); /*显示读出的字符*/
if(ch=='\n') /*如果读出的字符是回车*/
i++;
if(i>=23) /*如果行数到24行*/
{ printf("Any key to continue......\n");
i=1;
getch(); /*输入任一个字符*/
}
}
}
fclose(fp);
}
本例中没有什么更难理解的。需要提醒大家的是:在程序中你打开一个文件后,别忘了在结束程序之前,一定要把打开的文件关闭。
在上述程序中,使用了条件语句中的else语句。在使用else语句时,如果语句不