简单简单的c语言程序代码序

C/C++编程小程序,大智慧,C语言最简单程序竟然有你不知道的地方C/C++编程小程序,大智慧,C语言最简单程序竟然有你不知道的地方四十克拉百家号玩编程,免费直播,学习资料C/C++ 8群 这个C语言专题,是学习C/C++开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、C/C++开发不感兴趣,请跳过在本文中我们已经创建了一个C程序,接下来分析一下里面的代码。项目结构如下:一、代码分析打开项目中的main.c文件(C程序的源文件拓展名为.c),可以发现它是第一个C程序中的唯一一个源文件,代码如下:1.#include#include 是C语言的预处理指令之一,所谓预处理,就是在编译之前做的处理,预处理指令一般以 # 开头#include 指令后面会跟着一个文件名,预处理器发现 #include 指令后,就会根据文件名去查找文件,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源文件中的 #include 指令,就像你把被包含文件中的全部内容拷贝到这个 #include 指令所在的位置一样如果被包含的文件拓展名为.h,我们称之为&头文件&(Header File),头文件可以用来声明函数(&函数&就是面向对象中的&方法&),要想使用这些函数,就必须先用 #include 指令包含函数所在的头文件#include 指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c,.hpp,.cpp等,甚至.txt,.abc等等都可以也就是说你完全可以将第3行到第9行的代码放到其他文件中,然后用 #include 指令包含进来,比如:1& 将第3行到第9行的代码放到my.txt中2& 在main.c源文件中包含my.txt文件程序还是可以照常运行的,因为 #include 的功能就是将文件内容完全拷贝到 #include 指令所在的位置不过你可能会疑惑,为什么stdio.h用尖括号&&,而my.txt用双引号&& ?这个很好区别,如果是系统自带的文件,最好用&&;如果是开发人员自己创建的文件,最好用&&说明:这里用txt文件纯属演示,平时做项目不会这样做,除非吃饱了撑着,才会把代码都写到txt中去2.main函数前面也已经提到,C中的函数就是面向对象中的&方法&。C语言是一门面向过程的语言,是以过程为中心的编程思想,就是先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用函数就可以了一个C程序中一定会有一个main函数,也只能有一个main函数。main函数是整个C程序的入口。main.c的第3行代码就定义了一个main函数。main函数的返回值为int类型,接收2个参数,其实可以不写参数main函数可以简化成这样:这里要注意的是:这里的main函数没有写返回值类型,并不代表函数没有返回值,而是表示返回值类型为int类型,void才代表函数没有返回值由于C语言的语法限制不严格,我们还可以进一步简化main函数:虽然它要求main函数返回int类型的值,但我们可以不返回,但是我们一般都是有返回值的,因为以后C++不兼容不带返回值的主函数3.stdio.hstdio.h 是C语言函数库中的一个头文件,里面定义了一些标准输入输出函数。在main.c的第1行代码中,用#include指令包含了stdio.h文件。这里之所以包含 stdio.h 文件,是因为在第7行中用到了在 stdio.h 内部声明的printf函数,这个函数可以向标准输出设备(比如显示器屏幕)输出数据,屏幕上输出的文字就是第7行代码printf(&Hello, World!\n&);造成的,双引号&&内的文本为C语言的字符串二、开发和运行C程序的步骤步骤图如下:1.编写程序C语言源文件的扩展名为&.c&,源文件以ASCII码形式存储,不能直接被计算机执行,因为计算机只能识别二进制指令,也就是0和12.编译(VC环境下)把C的源程序翻译成计算机可以识别的二进制形式的目标代码文件,这个过程称为编译,由C的编译器完成在编译的同时,还对源程序的语法等进行检查。若出现语法错误,则编译失败。如果编译成功则生成目标文件,目标文件名跟源程序文件名一样,扩展名为&.obj&。比如,mj.c编译后生成目标文件mj.obj每个源文件是单独进行编译的,假如一个项目中有多个.c源文件,编译成功会生成多个对应的.obj目标。一般情况下,目标文件之间是有关联的,比如 a.obj 可能会调用 b.obj 中定义的一个函数,因此它们都不能够单独被计算机执行,而且目标文件中并不包含程序运行所需要的库函数等3.链接(VC环境下)将所有有关联的obj目标文件,以及系统提供的C库函数等组合在一起生成可执行文件的过程,称为&链接&链接生成的可执行文件的文件名跟源程序文件同名,扩展名为&.exe&,计算机可以直接执行4.运行* 在Windows环境下,直接双击&.exe&文件即可运行C语言程序三、总结说了这么多,总结一下第一个C程序的运行步骤:1.在编译前先执行#include指令,拷贝stdio.h的内容到源程序中2.编译源程序,生成目标文件3.链接C语言函数库,生成可执行文件4.运行可执行文件,在屏幕上输出&Hello, World!本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。四十克拉百家号最近更新:简介:关注手机数码、智能硬件等消费电子类产品。作者最新文章相关文章以下是参考&winsock网络编程经络&中讲解web应用http协议的时候,实现的一个简单的http程序,包含一个服务器和一个客户端。
先贴上客户端的程序:
/*************************************************************************
* Copyright (c)
by xuwm All Rights Reserved
* FILENAME:
* PURPOSE :
HTTP 客户端程序, 获取网页.
**************************************************************************/
#include "stdafx.h"
#include &stdio.h&
#include &winsock2.h&
#pragma comment(lib, "ws2_32.lib")
/* WinSock使用的库函数 */
/* 定义常量 */
#define HTTP_DEF_PORT
/* 连接的缺省端口 */
#define HTTP_BUF_SIZE
/* 缓冲区的大小
#define HTTP_HOST_LEN
/* 主机名长度 */
char *http_req_hdr_tmpl = "GET %s HTTP/1.1\r\n"
"Accept: image/gif, image/jpeg, */*\r\nAccept-Language: zh-cn\r\n"
"Accept-Encoding: gzip, deflate\r\nHost: %s:%d\r\n"
"User-Agent: Huiyong's Browser &0.1&\r\nConnection: Keep-Alive\r\n\r\n";
/**************************************************************************
* 函数功能: 解析命令行参数, 分别得到主机名, 端口号和文件名. 命令行格式:
[http://www.baidu.com:8080/index.html]
* 参数说明: [IN]
buf, 字符串指针数组;
[OUT] host, 保存主机;
[OUT] port, 端口;
[OUT] file_name, 文件名;
* 返 回 值: void.
**************************************************************************/
void http_parse_request_url(const char *buf, char *host,
unsigned short *port, char *file_name)
int length = 0;
char port_buf[8];
char *buf_end = (char *)(buf + strlen(buf));
char *begin, *host_end, *colon, *
/* 查找主机的开始位置 */
begin = const_cast&char*&(strstr(buf, "//"));
begin = (begin ? begin + 2 : const_cast&char*&(buf));
colon = strchr(begin, ':');
host_end = strchr(begin, '/');
if (host_end == NULL)
host_end = buf_
/* 得到文件名 */
file = strrchr(host_end, '/');
if (file && (file + 1) != buf_end)
strcpy(file_name, file + 1);
if (colon) /* 得到端口号 */
length = host_end -
memcpy(port_buf, colon, length);
port_buf[length] = 0;
*port = atoi(port_buf);
host_end = colon - 1;
/* 得到主机信息 */
length = host_end -
memcpy(host, begin, length);
host[length] = 0;
int main(int argc, char **argv)
WSADATA wsa_
http_sock = 0;
/* socket 句柄 */
struct sockaddr_in serv_
/* 服务器地址 */
struct hostent *host_
int result = 0, send_
char data_buf[HTTP_BUF_SIZE];
char host[HTTP_HOST_LEN] = "127.0.0.1";
unsigned short port = HTTP_DEF_PORT;
char file_name[HTTP_HOST_LEN] = "index.html";
char file_nameforsave[HTTP_HOST_LEN] = "index1.html";
FILE *file_
if (argc != 2)
printf("[Web] input : %s http://www.test.com[:8080]/index.html", argv[0]);
return -1;
http_parse_request_url(argv[1], host, &port, file_name);
WSAStartup(MAKEWORD(2,0), &wsa_data); /* 初始化 WinSock 资源 */
addr = inet_addr(host);
if (addr == INADDR_NONE)
host_ent = gethostbyname(host);
if (!host_ent)
printf("[Web] invalid host\n");
return -1;
memcpy(&addr, host_ent-&h_addr_list[0], host_ent-&h_length);
/* 服务器地址 */
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
serv_addr.sin_addr.s_addr =
http_sock = socket(AF_INET, SOCK_STREAM, 0); /* 创建 socket */
result = connect(http_sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
if (result == SOCKET_ERROR) /* 连接失败 */
closesocket(http_sock);
printf("[Web] fail to connect, error = %d\n", WSAGetLastError());
return -1;
/* 发送 HTTP 请求 */
send_len = sprintf(data_buf, http_req_hdr_tmpl, argv[1], host, port);
result = send(http_sock, data_buf, send_len, 0);
if (result == SOCKET_ERROR) /* 发送失败 */
printf("[Web] fail to send, error = %d\n", WSAGetLastError());
return -1;
file_web = fopen(file_nameforsave, "a+");
do /* 接收响应并保存到文件中 */
result = recv(http_sock, data_buf, HTTP_BUF_SIZE, 0);
if (result & 0)
fwrite(data_buf, 1, result, file_web);
/* 在屏幕上输出 */
data_buf[result] = 0;
printf("%s", data_buf);
} while(result & 0);
fclose(file_web);
closesocket(http_sock);
WSACleanup();
&首先在vs2010中的,添加一个VC命令行程序,把上面的程序直接放到主程序对应的cpp文件中,然后编译即可。
再贴上服务端的程序:
/*************************************************************************
* Copyright (c)
by xuwm All Rights Reserved
* FILENAME:
* PURPOSE :
HTTP 服务器程序, 向客户端提供请求的文件内容.
**************************************************************************/
#include "stdafx.h"
#include &stdio.h&
#include &winsock2.h&
#pragma comment(lib, "ws2_32.lib")
/* WinSock使用的库函数 */
/* 定义常量 */
#define HTTP_DEF_PORT
/* 连接的缺省端口 */
#define HTTP_BUF_SIZE
/* 缓冲区的大小 */
#define HTTP_FILENAME_LEN
/* 文件名长度 */
/* 定义文件类型对应的 Content-Type */
struct doc_type
char * /* 文件后缀 */
/* Content-Type */
struct doc_type file_type[] =
"text/html"
"image/gif"
"image/jpeg" },
char *http_res_hdr_tmpl = "HTTP/1.1 200 OK\r\nServer: Huiyong's Server &0.1&\r\n"
"Accept-Ranges: bytes\r\nContent-Length: %d\r\nConnection: close\r\n"
"Content-Type: %s\r\n\r\n";
/**************************************************************************
* 函数功能: 根据文件后缀查找对应的 Content-Type.
* 参数说明: [IN] suffix, 文件名后缀;
* 返 回 值: 成功返回文件对应的 Content-Type, 失败返回 NULL.
**************************************************************************/
char *http_get_type_by_suffix(const char *suffix)
struct doc_type *
for (type = file_ type-& type++)
if (strcmp(type-&suffix, suffix) == 0)
return type-&
return NULL;
/**************************************************************************
* 函数功能: 解析请求行, 得到文件名及其后缀. 请求行格式:
[GET http://www.baidu.com:8080/index.html HTTP/1.1]
* 参数说明: [IN]
buf, 字符串指针数组;
buflen, buf 的长度;
[OUT] file_name, 文件名;
[OUT] suffix, 文件名后缀;
* 返 回 值: void.
**************************************************************************/
void http_parse_request_cmd(char *buf, int buflen, char *file_name, char *suffix)
int length = 0;
char *begin, *end, *
/* 查找 URL 的开始位置 */
begin = strchr(buf, ' ');
begin += 1;
/* 查找 URL 的结束位置 */
end = strchr(begin, ' ');
bias = strrchr(begin, '/');
length = end -
/* 找到文件名的开始位置 */
if ((*bias == '/') || (*bias == '\\'))
/* 得到文件名 */
if (length & 0)
memcpy(file_name, bias, length);
file_name[length] = 0;
begin = strchr(file_name, '.');
if (begin)
strcpy(suffix, begin + 1);
/**************************************************************************
* 函数功能: 向客户端发送 HTTP 响应.
* 参数说明: [IN]
buf, 字符串指针数组;
buf_len, buf 的长度;
* 返 回 值: 成功返回非0, 失败返回0.
**************************************************************************/
int http_send_response(SOCKET soc, char *buf, int buf_len)
int read_len, file_len, hdr_len, send_
char read_buf[HTTP_BUF_SIZE];
char http_header[HTTP_BUF_SIZE];
char file_name[HTTP_FILENAME_LEN] = "index.html", suffix[16] = "html";
FILE *res_
/* 得到文件名和后缀 */
http_parse_request_cmd(buf, buf_len, file_name, suffix);
res_file = fopen(file_name, "rb+"); /* 用二进制格式打开文件 */
if (res_file == NULL)
printf("[Web] The file [%s] is not existed\n", file_name);
fseek(res_file, 0, SEEK_END);
file_len = ftell(res_file);
fseek(res_file, 0, SEEK_SET);
type = http_get_type_by_suffix(suffix); /* 文件对应的 Content-Type */
if (type == NULL)
printf("[Web] There is not the related content type\n");
/* 构造 HTTP 首部,并发送 */
hdr_len = sprintf(http_header, http_res_hdr_tmpl, file_len, type);
send_len = send(soc, http_header, hdr_len, 0);
//send_len=1;
if (send_len == SOCKET_ERROR)
fclose(res_file);
printf("[Web] Fail to send, error = %d\n", WSAGetLastError());
do /* 发送文件, HTTP 的消息体 */
read_len = fread(read_buf, sizeof(char), HTTP_BUF_SIZE, res_file);
if (read_len & 0)
send_len = send(soc, read_buf, read_len, 0);
file_len -= read_
} while ((read_len & 0) && (file_len & 0));
fclose(res_file);
int main(int argc, char **argv)
WSADATA wsa_
SOCKET srv_soc = 0, acpt_
/* socket 句柄 */
struct sockaddr_in serv_
/* 服务器地址
struct sockaddr_in from_
/* 客户端地址
char recv_buf[HTTP_BUF_SIZE];
unsigned short port = HTTP_DEF_PORT;
int from_len = sizeof(from_addr);
int result = 0, recv_
if (argc == 2) /* 端口号 */
port = atoi(argv[1]);
WSAStartup(MAKEWORD(2,0), &wsa_data); /* 初始化 WinSock 资源 */
srv_soc = socket(AF_INET, SOCK_STREAM, 0); /* 创建 socket */
if (srv_soc == INVALID_SOCKET)
printf("[Web] socket() Fails, error = %d\n", WSAGetLastError());
return -1;
/* 服务器地址 */
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
result = bind(srv_soc, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
if (result == SOCKET_ERROR) /* 绑定失败 */
closesocket(srv_soc);
printf("[Web] Fail to bind, error = %d\n", WSAGetLastError());
return -1;
result = listen(srv_soc, SOMAXCONN);
printf("[Web] The server is running ... ...\n");
acpt_soc = accept(srv_soc, (struct sockaddr *) &from_addr, &from_len);
if (acpt_soc == INVALID_SOCKET) /* 接受失败 */
printf("[Web] Fail to accept, error = %d\n", WSAGetLastError());
printf("[Web] Accepted address:[%s], port:[%d]\n",
inet_ntoa(from_addr.sin_addr), ntohs(from_addr.sin_port));
recv_len = recv(acpt_soc, recv_buf, HTTP_BUF_SIZE, 0);
if (recv_len == SOCKET_ERROR) /* 接收失败 */
closesocket(acpt_soc);
printf("[Web] Fail to recv, error = %d\n", WSAGetLastError());
recv_buf[recv_len] = 0;
/* 向客户端发送响应数据 */
result = http_send_response(acpt_soc, recv_buf, recv_len);
closesocket(acpt_soc);
closesocket(srv_soc);
WSACleanup();
printf("[Web] The server is stopped.\n");
&这个也跟客户端程序一样,打开VS2010,新建一个VC命令行程序,COPY上面的代码,直接放到主程序的CPP文件中,编译即可。
运行代码如下:
1.先运行服务端程序,绑定端口,然后开启监听& 在CMD里先切换到exe的目录,然后 输入 服务端程序名.exe 9000,此处服务端程序名换成对应的程序名称.后面的9000端口号,也可以换成别的。
&2. 再运行客户羰程序,同上面一样,切换到exe&的目录,然后输入 客户端程序名.exe ,& 此处客户端程序名换成对应的程序名称,后面的,代表请求的网页路径。
&3. 在服务器的exe目录下,应创建一个index.html文件,里面可以输入一个正规的html文件。
以上只是学习网络编程的一点小体会,尽当以后温故:)
阅读(...) 评论()C语言初学者必看的小程序1【c语言吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:564,984贴子:
C语言初学者必看的小程序1收藏
《C语言程序设计》院系(部)____信息网络系&&&&&&&&&&&&&&&&&&&&&&&&&&&& 班&&&& 级&&& 10计算机专业&&教&&&& 师&&&&&& 诚信晓波
QQ:&&&&& 目&&& 录项目一 C语言的基本概念&&&& 1【任务一】 用PRINTF( )打印简单数字、字符图案&&&& 11.1 C语言程序的构成成分&&&& 2【任务二】 大小写字符之间的转换&&&& 51.2 数据类型&&&& 6【任务三】求三个数的和及平均值&&&& 101.3 C语言程序的语法要素&&&& 11【任务四】 已知三角形的两边及夹角,求对边长度及面积&&&& 141.4 数据输出与输入&&&& 19【任务五】 将一个三位整数反向后输出&&&& 231.5 表达式&&&& 24【任务六】 鸡兔同笼问题&&&& 281.6 一个小型C程序的开发过程&&&& 301.7 用计算机求解问题的一般步骤&&&& 301.8 逐步求精的伪代码表示算法&&&& 31项目二 选择结构程序设计&&&& 32【任务七】&& 读入三个数,找出并打印其中最小的数&&&& 332.1&& 两种IF语句&&&& 342.2&& 布尔表达式之一:关系表达式&&&& 38【任务八】读入两个数X、Y,将大数存于X,小数存于Y&&&& 422.3&& 空语句&&&& 432.4&& 复合语句&&&& 44【任务九】输入三个数并由大到小输出这三个数&&&& 452.5&& IF语句的嵌套及其用法&&&& 462.6&& 布尔表达式之二:逻辑表达式&&&& 48【任务十】 输入年月,输出该月有几天&&&& 512.7&& SWITCH语句&&&& 522.8提高部分&&&& 53项目三&& 循环结构程序设计&&&& 56【任务十一】&& 求整数1到100之和&&&& 563.1&& WHILE语句:&&&& 59【任务十二】&& 求数列1,3,5,…,99各项之和&&&& 61【任务十三】&& 求1-1/3+1/5-1/7+1/9…共50项之和&&&& 643.2&& 数列求和算法知识简介&&&& 65【任务十四】&& 输出1~999中能被3整除,且至少有一位是5的所有整数&&&& 69【任务十五】&& 输入10个数,求其中的最大数、最小数及平均值&&&& 70【任务十六】 将一个十进制正整数D转换为N(N≤9)进制数&&&& 723.3&& DO…WHILE循环语句&&&& 76【任务十七】&& 求任意一个正整数N(N&=2)是否为素数(解法一)&&&& 78【任务十八】求任意一个正整数N(N&=2)是否为素数(解法二)&&&& 79
自学编程,零基础怎么学习?如何系统,科学地学习编程,成为一名程序员...
3.4&& BREAK语句和CONTINUE语句&&&& 80【任务十九】&& 求1+22+333++666666…共9项之和&&&& 813.5&& FOR循环语句&&&& 83【任务二十】&& 求10万以内的所有素数&&&& 853.6&& 多重循环&&&& 86【任务二十一】 打印图形&&&& 87【任务二十二】&& 打印图形&&&& 89【任务二十三】&& 打印图形&&&& 91【任务二十四】&& 打印图形&&&& 94【综合案例】&& 四大湖问题&&&& 99 项目一 C语言的基本概念【任务一】 用printf( )打印简单数字、字符图案任务描述&&&& 在屏幕上显示“hello world!”字符。设计过程步骤一:启动win-tc新建空白文件,如图所示。 步骤二:分析问题并进行构思,安排所需变量和符号常量;步骤三:用逐步求精的伪代码或流程图构造算法;步骤四:编辑输入源程序,并保存在扩展名为 .c的文件中,如图所示;&&步骤五:进行编译预处理;步骤六:用编译器进行编译;步骤七:根据编译错误和警告回到第3步修改语法错误;编译无错后,生程目标文件(扩展名为 .obj);将用户程序与库函数的程序进行连接,并生成可执行的程序(扩展名为.exe);步骤八:运行程序,发现链接或运行时错误则回到第3步修改,屏幕显示如图所示。 相关知识1.1 C语言程序的构成成分一、构成成分例题 1.1&&&1)&& #include &stdio.h&&&& /*编译预处理命令,将标准输入输出函数2)&&&&&&&&&&&&&&&&&&&&&&&&& 作为头文件包扩到用户源程序文件中*/ 3)&& #include &math.h&&&& /*编译预处理命令,将系统提供的数学函数4)&&&&&&&&&&&&&&&&&&&&&&&&&&&& 作为头文件包扩到用户源文件中*/ 5) int&&&&& main( )&&&&&&&&& // 函数名为main的主函数的函数首部6) {&&&&&&&&&&&&&&&&&&&&&&&& //函数体开始&&7)&&&&&& float&& x ,&&&&&&&& //定义部分.定义变量及其类型 8)&&&&&& x=45.2;&&&&&&&&&&&&&&&& //语句部分.赋值语句 9)&&&&&& y=sqrt(3*x+5.6 );&&&&&& //语句部分.赋值语句 10)&&&&& printf(“%f\n” , y ) ; //语句部分.输出语句 11)&&&&& return&&& 0;&&&&&&&&&&&&&&& ///语句部分. 返回语句
………;/*程序结果输出部分,主要是输出函数的调用,将变量的值输出在显示屏上,*/printf(…..);……return&& 0;&&&&&&&& /*返回到操作系统*/}说明:程序输出部分,完全可以与其他语句混合在一起,变量的值的输入也可以出现在程序的说明序列后的任何部分,这里只是列出一个一般的科学计算类程序的编程格式,读者在后面的编程题中可以看到,不少非科学计算类的程序(比如游戏程序,管理程序),与此格式有不小区别。此处列出来仅仅是给初学者提供一个基本编程格式的框架。只有定义序列部分是必须放在函数体的最前面的。 【任务二】 大小写字符之间的转换任务描述编写一个程序,运行时接受用户输入的小写英文字母,程序将其转换为大写英文字母并显示在屏幕上。设计过程步骤一:启动win-tc新建空白文件,如图所示。 步骤二:分析并确定变量此程序主要是要考虑如何由输入的任意一个小写的英文字母,得到所对应的大写英文字母。查看ASCII码表,发现所有小写英文字母的ASCII码值都比相应的大写字母ASCII码值大32。即存在以下等式关系:大写英文字母的ASCII码=小写英文字母的ASCII码-32步骤三:设计算法编写程序编写C语言程序如下:1&& #include&stdio.h&2&& main()3&& {4&&&&& char ch1,ch2;5&&&&& printf(”请键入一个小写英文字母并按回车键\n”);6&&&&& scanf(“%c”,&ch1);&&&&&&7&&&&& ch2=ch1-32; 8&&&&& printf(”相对应的大写英文字母为%c\n”,ch2);9&&& }程序说明:在C语言中,字符变量其实就是占有一个字节内存的一种小整型变量,它的取值一般就是在0——127之间的整数值,对应着标准ASCII表上的128个字符。步骤四:输出结果相关知识1.2 数据类型一、整型&& 1、整型数说明 &&&& 加上不同的修饰符, 整型数有以下几种类型; &&&& signed short int&&&&& 有符号短整型数说明。简写为short或int, 字长为2字节共16位二进制数, 数的范围是-。 &&&& signed long int&&&&&& 有符号长整型数说明。简写为long, 字长为4字节共32位二进制数, 数的范围是-~。 &&&& unsigned short int&&& 无符号短整型数说明。简写为unsigned int,&& 字长为2字节共16位二进制数, 数的范围是0~65535。 &&&& unsigned long int&&&& 无符号长整型数说明。简写为unsigned long, 字长为4字节共32位二进制数, 数的范围是0~。 && 2、整型变量定义 &&&& 可以用下列语句定义整型变量 &&&& int a,&&&&&&&&&&&& /*a、b被定义为有符号短整型变量*/ &&&&&&&&& /*c被定义为无符号长整型变量*/ && 3、整型常数表示 &&&& 按不同的进制区分, 整型常数有三种表示方法: &&&& 十进制数:&& 以非0开始的数 &&&&&&&&&&&&&&& 如:220, -560, 45900
&&&& 八进制数:&& 以0开始的数 &&&&&&&&&&&&&&& 如:06; 0106 &&&& 十六进制数:以0X或0x开始的数 &&&&&&&&&&&&&&& 如:0X0D, 0XFF, 0x4e 另外, 可在整型常数后添加一个"L"或"l"字母表示该数为长整型数, 如22L, 0773L, 0Xae4l。二、浮点型&&&& 1、浮点数说明 &&&& float&&&&&& 单浮点数。字长为4 个字节共32 位二进制数,&&& 数的范围是3.4x10-38E~3.4x10+38E。 &&&& double&&&&& 双浮点数。字长为 8个字节共 64 位二进制数,&& 数的范围是1.7x10-308E~1.7x10+308E。 &&&& 说明: &&&& 浮点数均为有符号浮点数, 没有无符号浮点数。 2、浮点型变量定义 &&&& 可以用下列语句定义浮点型变量: &&&& float a,&&&&& /*a, f被定义为单浮点型变量*/ &&&&&&&&&&& /*b被定义为双浮点型变量*/ 3、浮点常数表示 &&&& 例如:&& +29.56, -56.33, -6.8e-18, 6.365 &&&& 说明: &&&& 1. 浮点常数只有一种进制(十进制)。 &&&& 2. 所有浮点常数都被默认为double。 3. 绝对值小于1的浮点数, 其小数点前面的零可以省略。如:0.22可写为.22, -0.0015E-3可写为-.0015E-3。注意:对于双精度浮点型变量,在调用格式化输入函数scanf()输入该类型变量的值时,必须使用的占位(格式)符是%Lf或 %lf (在 %与f之间的字符是英文字符L的小写,而不是数字1。所以,最好不要用小写英文字母l,而用大写的L ),不能用%f格式。但是,在调用格式化输出函数printf()输出双精度变量的值时,却可以使用%f格式。三、字符型&&&&&&&& 加上不同的修饰符, 可以定义有符号和无符号两种类型的字符型变量, 例如: &&&& char a:&&&&&&&&&&&&&& /*a被定义为有符号字符变量*/ &&&&&&&&& /*l被定义为无符号字符变量*/ &&&& 字符在计算机中以其ASCII码方式表示, 其长度为1个字节, 有符号字符型数取值范围为-128~127, 无符号字符型数到值范围是0~255。因此在Turbo C语言中, 字符型数据在操作时将按整型数处理, 如果某个变量定义成char, 则表明该变量是有符号的, 即它将转换成有符号的整型数。Turbo C中规定对ASCII码值大于0x80的字符将被认为是负数。例如ASCII 值为0x8c的字符, 定义成char时,&&& 被转换成十六进制的整数0xff8c 。 这是因当ASCII码值大于0x80时, 该字节的最高位为1, 计算机会认为该数为负数,&&& 对于0x8c表示的数实际上是-74(8c的各位取反再加1), 而-74 转换成两字节整型数并在计算机中表示时就是0xff8c(&& 对0074 各位取反再加1)。因此只有定义为 unsigned char 0x8c转换成整型数时才是8c。这一点在处理大于0x80的ASCII码字符时(例如汉字码)要特别注意。一般汉字均定义为unsigned char(在以后的程序中会经常碰到)。
&&&& 另外, 也可以定义一个字符型数组(关于数组后面再作详细介绍), 此时该数组表示一个字符串。 &&&& 例如: &&&&&&&& char str[10]; &&&& 计算机在编译时, 将留出连续10个字符的空间, 即str[0]到str[9]共10个变量, 但只有前9个供用户使用。第10个str[9]用来存放字符串终止符NULL即"\0", 但终止符是编编译程序自动加上的, 这一点应特别注意。1、字符型常数表示&&&& 能用符号表示的字符可直接用单引号括起来表示, 如'a', '9', 'Z',&& 也可用该字符的ASCII码值表示, 例如十进制数85表示大写字母'U', 十六进制数0x5d表示']', 八进制数0102表示大写字母'B'。 &&&&&&&& 一些不能用符号表示的控制符, 只能用ASCII码值来表示, 如十进制数10 表示换行, 下六进制数0x0d表示回车, 八进制数033表示Esc。Turbo C2.0中也有另外一 种表示表示方法, 如'\033'表示Esc,&& 这里'\ 0' 符号后面的数字表示十六进制的ASCII值当然这种表示方法也适用于可睦接用符号表示的字符。 &&&&&&&& 另外, Turbo C2.0中有些常用的字符用以下特殊规定来表示: &&&&&&&&&& 规定符&&&&&&&&&&&& 等价于&&&&&&&&&&& 含义 &&&&&&&&&& '\f'&&&&&&&&&&&&&&& '\X0C'&&&&&&&&&& 换页 &&&&&&&&&& '\r'&&&&&&&&&&&&&&& '\X0D'&&&&&&&&&& 回车 &&&&&&&&&& '\t'&&&&&&&&&&&&&&& '\X09'&&&&&&&&&& 制表键 &&&&&&&&&& '\n'&&&&&&&&&&&&&&& '\X0A'&&&&&&&&&& 换行 &&&&&&&&&& '\\'&&&&&&&&&&&&&&& '\X5C'&&&&&&&&&& \符 &&&&&&&&&& '\''&&&&&&&&&&&&&&& '\X27'&&&&&&&&&& '符 &&&&&&&&&& '\"'&&&&&&&&&&&&&&& '\X22'&&&&&&&&&& "符 &&&& 对于字符串常量, 一般用双引号括起来表示, 如"Hello Turbo C2.0"。 四、指针型&&&& 指针是一种特殊的数据类型, 在其它语言中一般没有。指针是指向变量的地址, 实质上指针就是存贮单元的地址。&& 根据所指的变量类型不同,&&& 可以是整型指针(int *)、浮点型指针(float *)、字符型指针(char *)、结构指针(struct *)和联合指针(union *)
五、无值型&&&& 无值型字节长度为0, 主要有两个用途:&& 一是明确地表示一个函数不返回任何值; 一是产生一个同一类型指针(可根据需要动态分配给其内存)。 &&&& 例如: &&&&&&&&&&&&& void *&&&& /*buffer被定义为无值型指针*/
【任务三】求三个数的和及平均值任务描述已知三个数,求这三个数的和及平均数,并在屏幕上显示求解结果。设计过程步骤一:启动win-tc新建空白文件,如图所示。 步骤二:分析变量安排: 3个已知的数要用3个变量a1,a2,a3;三个数的和用1个变量sum,平均值用1个变量ave,所有变量都为实型变量。步骤三:设计算法一级算法:&&&&&&&&&&&&&&&& 1. 输入这三个数a1,a2,a3;&&&&&&&&&&&&&&&& 2. 求这三个数的的和sum及平均值ave;&&&&&&&&&&&&&&&& 3. 输出sum,ave;&&&&&&&&&&&&& 其中第二步由于不能直接转化成语句而需要进一步求精&&&&&&&&&&&&&&&&& 根据求和及求平均值的公式sum=a1+a2+a3&&&&&&&&&&&&&&&&&&&&&& ave=sum÷3&&&&&&&&&&&&&&&&& 只需将其转化为赋值语句即可 第2步的二级求精:&&&&&&&&&&&&&&&&& 2.1&&& sum=a1+a2+a3;&&& /*求这三个数的和2.2&&& ave=sum/3;&&&&&&& /*求这三个数的平均值步骤四:编写C语言程序转化成C语言程序:/*求三个数的和及平均值*/1&& #include&stdio.h&&&&2&& int main()3&& {4&&&& float&& a1,a2,a3 ; /* 三个已知数,说明为实型变量*/5&&&& float&& sum, / *两个未知数,说明为实型变量*/&&&&&&&&&&&&&& 6&&&& /*输入这三个数a1,a2,a3*/&&&&&&&&&&&&&& 7&&&& printf(“请输入3个数,3个数之间用空格隔开\n”);8&&&&& scanf(“%f%f%f”,&a1,&a2,&a3); &&&&&&&&&&&&&& 9&&&&&&&&&&&&&&&&&& 10&&& /*求这三个数的的和sum及平均值ave*/&&&&&&&&&&&&& 11&&& sum=a1+a2+a3;&&&
&&&&& 12&&& ave=sum/3;&&&&&&&&&&&& 13&&&&&&&&&&&&&&&& 14&&& /*输出sum,ave*/&&&&&&&&&&&&& 15&&& printf(“sum=%f,ave=%f”,sum,ave );&&&&&&&&&&&&&&& 16&&& return&& 0; &&&&&&&&&&&&& 17&& }&&& &&& 注意: 运行此程序时,要用键盘输入三个数值给变量a1,a2,a3,三个数之间要用空格隔开。输完后,按下回车键,程序才会继续运行下去。相关知识1.3 C语言程序的语法要素1.正文部分:除了格式控制串和注释部分以外的C语言源程序的其它部分,称为C语言的源程序的正文部分。2.C语言的字符集,26个大小写英文字母:A——Z, a——z;阿拉伯数字字符:0——9;特殊字符:&& ! #&& %&& ^&& &&& *&& _&& +&& =&& -&& ~&& &&& &&& |&& /&& \ ‘ “&& ;&& .&& ,&& (&& )&& [&& ]&& {&& }&& ?&& :&& 空格字符(对应键盘上的最长键Space)&&& 换行符(对应Enter键)&& 制表符(对应Tab键) 以上所有这些字符构成了C语言的字符集。书写C语言的源程序的正文部分,只能使用C语言字符集中的字符,其它任何字符不得使用。字符集中的任何字符,只能用英文半角方式来进行输入。3.标识符是以26个大小写英文字母、阿拉伯数字0到9和下划线构成的字符序列;其中从左边开始的第一个字符不能是数字。在C语言中,只能使用符合标识符规定的名字,来对变量、符号常量、函数、语句标号命名。 C语言对标识符的大小写敏感,也就是说main与Main,printf与Printf都是不同的标识符(main和printf都是C语言中的已经规定的函数名,所以,我们不能用来作为自定义的标识符)。4.关键字是被编译程序保留下来的特殊标识符;主要分为两大类:用于定义(或声明)的关键字和用于构成语句的关键字。(C89标准中的)关键字都是由小写英文字母组成的。关键字(还包括预处理明令)在VC++6.0中是以蓝色字体显示出来的。所有关键字列表如下: &&&& 在 ANSI C89标准中共有32个关键字auto&& break&& case&& char&& const&& continue&& default&& do&& double&& else&& enum extxrn&& float&& for&& goto&& if&& int&& long&& register&& return&& short&& signed&& sizeof static struct&& switch&& typedef&& union&& unsigned&& void&& volatile&& while&&&& 在 ANSI C99标准中增加了5个关键字_Bool&&& _Complex&& _Imaginary&&& inline&& restrict
5.C语言源程序中可使用的分隔符有三个:空格、回车/换行、逗号。同类项之间要用逗号分隔,关键字和标识符之间要用空格或回车/换行来分隔,不能用逗号(比如 int&& m ,)。在C语言中,合理地使用多余的空格和空行,可以使得程序更清晰、易懂、优美。&&6.C语言中常量分为数值常量(又称为字面常量)和符号常量两种。应当多使用符号常量,尽量少用数值常量。● 最常用的数值常量有以下几种:1).整型常量&&& 567,-425 ,0&&& 等, 是没有小数分量的数值。2).实型(浮点型)常量: 由正负号、数字、小数点构成。0.543、543. 、543.0、0.0 都是十进制的小数形式。在数的左边还可以加上正负号。比如 -543.0 。3).字符型常量&& ’a’,‘K’ ‘*’,’ 8’ ,’\n’ 等 ,是用单引号括起来的ASCII码表中的字符,包括键盘上的可显示(或可打印)的字符和不可显示的一些控制字符 (字符’\n’ 就是表示一个控制字符——Enter键 ,详见附录ASCII码表)。深入一步:字符型量的本质字符常量在编写程序时,要用两个单引号括住它。它属于一种从表面上看来是非数值型的量。但其实在计算机的内存中,它就是以ASCII码的形式存储的,占用一个字节内存空间的一个二进制正整数(取值在0——127之间)。字符型量是用计算机进行文字处理的基础。&&● 符号常量一般由大写英文字母组成的标识符构成,用#define来进行定义, 比如: #define&& PI&& 3.1416&& 。源程序中所有出现的记号&& PI 都会被编译预处理程序用&& 3.1416 替代。修改常量的值变得非常方便,程序的可读性也更好。7. 变量 X定义变量的作用:要求系统为存放(其数值可以变化的)数据事先分配内存单元,变量名作为内存单元的符号地址。定义变量的形式是:&& &类型名&&&& &变量列表&;定义变量只能使用标识符。多个变量之间用逗号隔开,构成变量列表。C语言中各种常用的变量类型是int(整型)、float(单精度浮点型)、char(字符型)、double(双精度浮点型)、long(长整型)。通过变量名 score , 可以找到(即映射为)相应的内存单元地址。假设地址为2000,&& 语句:&&&& score=38.0;的含义和作用是:将数值38.0存放在地址为2000的内存单元中。变量的值是可以变化的。而变量名所对应的内存地址是不变的。8.变量一定要先进行定义,定义后一定要进行初始化(即存入一个初始值在变量对应的内存单元中,参见P&& 页),然后才能在表达式中使用或进行输出。否则,变量所对应的内存单元中的垃圾数据就会在程序中(的表达式或输出语句)被误用。9.运算符是用来告诉编译程序对运算量要做何种运算的抽象形式。由编译程序转化成具体的运算类指令。最常用的运算符分为三大类:算术运算符、关系运算符(见下一章)、逻辑运算符(见下一章)。各种算术运算符见下表表2.x各种算术运算符运算符&&&& 运算&&&& 举例&&&& 结果+&&&& 正号&&&& +8&&&& 8-&&&& 负号&&&& -a&& (a的值为3)&&&& -3&&+&&&& 加&&&& 11+5&&&& 16-&&&& 减&&&& 11-5&&&& 6*&&&& 乘法&&&& 11*5&&&& 55
/&&&& 除法&&&& 11/5&&&& 2 (这是整数除法)/&&&& 除法&&&& 11.0/5&&&& 2.2 (这是实数除法)%&&&& 取模(取整除的余数)&&&& 11%5&&&& 1 (11除以5的余数)乘法运算符最容易漏写(比如:将2*x*y ,误写为2xy ),不要把实数除法运算符误用为整数除法(比如:错把1.0/3 写成1/3 。1/3的值是0 )。10.表达式所谓表达式,是用运算符将运算量(常量、变量、函数调用)连接起来的有意义的式子。其中还可使用圆括号来改变运算符固有的先后运算顺序——圆括号内的部分优先进行运算。单个常量、变量和函数调用是最简单的表达式。在初学编程时,表达式极易出现多种书写错误。在命令型高级语言中,实际上只能用表达式和语句这种抽象的、形式化的方式,来命令计算机为你进行数据处理工作(由编译程序转化为一系列的取数指令和运算指令)。 &&&&&& 单个常量、单个变量和单个函数调用是最简单的表达式(比如x,可以看成是表达式x+0 )。深入一步:普通的(指没有副作用的,见本章提高部分)表达式中出现变量的含义表达式 x+y中,出现变量的含义是:根据变量名(这对应着一个内存单元的地址)到内存中去取该变量的值(取到CPU的某个寄存器中去),然后(在运算器中)进行指定的运算。该变量的值依然不变。11.赋值语句赋值语句的形式是: &变量&=&表达式&; 。赋值语句先计算出赋值号“=”右边表达式的值,然后将此值存放在赋值号左边的变量(所对应的内存单元)之中。注意:赋值号的左边不能是表达式,只能是单个变量。赋值语句中变量值的变与不变: “左边改变,右边不变” 赋值号右边表达式中的变量(如果有的话)仅仅是取出它的值来参与表达式规定的运算,变量的值仍然未变。而赋值号左边变量(所对应的内存单元中)的原来值,将被表达式算出的新值存入而“覆盖”掉。12.形式如&& x = 包含有变量x的表达式 ;(x可以是任何简单类型的变量)的赋值语句,大量的出现在程序中。它表示的是一种迭代关系:即指明了如何由变量x的一个老值(取出来参与表达式所规定的运算),最终得到了变量x的一个新值(最终存入到赋值号右边的变量x中)。专题讨论:库函数和库函数调用●库函数:编译程序(又称为编译器)附带的,一批可以被任何别的C语言程序“调用”的,通用的、命名了的子程序。 所有这些库函数组成了一个标准函数库,与编译程序一道打包发行。安装了C编译程序后,我们就能在编写程序时,调用这些库函数。 ●函数调用(function call):在我们编写的C语言源程序中,可以调用库函数为我们的程序做一些复杂的(通常是辅助性的)运算和处理工作,函数的调用方式为:库函数名(参数列表)其中参数列表中的参数如果多于一个,参数之间就要用逗号隔开。比如要求出5.6的4次方是多少,就要调用库函数 pow(5.6 , 4) ;将2开平方,就要调用库函数:sqrt(2)。调用库函数时千万不要忘记包含相应的头文件。参数可以是常量、变量、表达式。参数必须要用圆括号括住。比如pow(x,3.7)、sin( alfa*3.); C语言中的各种常用库函数的调用方法说明,请见附录。编程时调用了库函数,这些事先编译好的、命名了的子程序,就可以通过“编译”步骤之后的“链接” 这一步骤,“链入”到你所编写的程序之中,共同组成一个可执行的机器语言程序(可执行程序文件的扩展名是 .exe )。这样就可以大大减少编写程序的工作量。以下仅列出常用的数学库函数(要包含头文件&& math.h):
sin(x)&&&&&&&& x为弧度, 正铉函数cos(x)&&&&&&& x为弧度, 余铉函数exp(x)&&&&&&&&&& ex&&&&&& 以e为底的指数函数log(x)&&&&&&&&& logex&&&& 以e为底的对数函数log10(x)&&&&&&& log10x&&&& 以10为底的对数函数fabs(x)&&&&&&&&&& x&&& 求x的绝对值函数fmod(x,y)&&&&&& 整除x/y的余数floor(x)&&&&&&&& 求不大于x的最大整数pow(x, y)&&&&&&& xy&&&&& 幂函数,sqrt(x)&&&&&&&&& x1/2&& 开平方函数13.类型间的转换:不像有些高级语言(比如Pascal语言),不同类型的数据之间进行转换受到了严格限制。在C 语言中,不同类型间的数据都是可以相互转换的。●在混合类型的算术表达式中的类型转换:表达式中的类型转换,包括自动转换和强制转换两种: 自动转换 :自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则: 1.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2.转换按内存存储数据的长度(即字节数)增加的方向进行,以保证精度不降低。如int型和long型数据进行运算时,先把int型量转成long型后再进行运算。3.所有的浮点运算都是以双精度形式进行运算的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。4.char型和short型参与运算时,必须先转换成int型。强制类型转换如果自动类型转换满足不了你的要求,则你可以要求编译程序进行强制类型转换。强制类型转换是通过类型转换运算来实现的。其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所规定的类型。例如: (float) m 把整型变量m强制转换为单精度实型。 (int)(3*x-y) 把表达式3*x-y的结果强制转换为整型。在使用强制转换时应注意以下问题:1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)( x-y)写成(in)x-y则成了仅仅把x转换成int型之后再与y相加了。注意:无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的取值进行的临时性的转换,而不改变变量说明时对该变量定义的类型,也不会改变变量相对应内存中所存放的数值。●赋值语句中的类型转换:在一个赋值语句中类型转换的规则非常简单:先计算出来表达式的值(如果表达式中本身有类型转换,按照上述表达式中类型转换规定进行),然后再按照赋值号左边的变量类型进行转换。右边量的数据类型长度(该类型数据的字节数)如果比左边变量的数据类型长度长时,将会丢失一部分数据,这样会降低数值的精度。 【任务四】 已知三角形的两边及夹角,求对边长度及面积任务描述要求输入三角形的两边x,y及夹角alfa,求三角形对边长度及三角形面积,并将结果输出。设计过程步骤一:启动win-tc新建空白文件,如图所示。 步骤二:分析并确定变量1. 输入三角形的两边x,y及夹角alfa2. 三角形对边长度 →length&&&& 3.&& 三角形面积→area步骤三:设计算法
产销量连年位于国内喷码机行业前列!
一级算法1. 输入三角形的两边x,y及夹角alfa2. 求三角形对边长度 →length&&&& 3.&& 求三角形面积→area4. 输出三角形的对边长度及面积其中第2、第3步需要进一步求精C语言的库函数中,有一批数学库函数,其中包含正弦函数sin()及余弦函数cos()(注意,库函数名都是小写的) 。不过对这些库函数的调用,首先要包含头文件:#include &math.h&&& 。其次,这两个三角函数所要用到的角度是以弧度作为单位的,而不是度,因此,如果输入的角度是以度为单位的,还必须转化位弧度为单位的角度。角α的度数除以180然后再乘以π即转换为弧度。然后,才能利用公式来求三角形的对边长度和面积。sqrt 函数,是用来求一个数的平方根的数学库函数。由余弦定理得:length=sqrt(x*x+y*y-2*x*y*cos(alfa*PI/180))area=x*y*sin(alfa*180/3.步骤四:编写C语言程序转化成C语言的程序1&& #include&stdio.h&&&&&&&&2&& #include&math.h&&&&&&&&3&& #define&& PI&& 3.1416&&&&&4&& int main()&&&&&&&&&&&&&&&5&& {6&&&& float&&& x, y,&&&&&7&&&& float&&& length ,&&&&89&&&& /* 输入三角形的两边x,y及夹角alfa*/10&&& printf( “请输入三角形的两边及夹角\n”); 11&&& scanf(“%f%f%f”, &x,&y,&alfa );&&&&&&&&&1213&&& /* 求三角形对边长度*/&&14&&& length=sqrt(x*x+y*y-2*x*y*cos(alfa*PI/180)); 1516&&& /* 求三角形面积*/&&17&&& area=x*y*sin(alfa*PI/180)/2;&&&&&&&&&&&&&1819&& /* 输出三角形的对边长度及面积*/2021&& printf(“三角形的对边长为%f,面积为%f \n”,length,area ); 2223&& return&& 0;24&&& }问题1:第2行是否可以不要?答:不行,只要调用库函数中的数学函数,必须包含此头文件。小结:对变量进行初始化的三种方式1.&&&& 在变量定义时,立即给它一个初值(比如 int&& i=0; );2.&&&& 用赋值语句,将表达式计算出来的值,赋给变量;i=0;3. 采用输入函数,将数据由外部(键盘或文件等输入设备)存入变量所代表的内存中(比如&& scanf(“%d” , &i) ; );。任何变量,在定义后,你都必须采用上述三种方式之一,对其进行初始化。没有进行初始化的变量,是决对不能出现在表达式中的。相关知识1.4 数据输出与输入一、数据(变量或表达式的值)输出 可调用格式化输出库函数: printf()函数。调用的一般形式为&&&&& printf(参数1,参数2,参数3,……,参数n)&&&&&其中 参数1 是格式控制串 。参数2,参数3,……,参数n 是输出项列表
例题 1.2&&#nclude&stdio.h&main(){int&& float&&num = 123;
x=34.678 &&& printf("%d %f", num, x);}程序运行结果为:123 34.678000格式控制串是用双引号括起来的字符串。%d 是第一个输出项num的格式说明,以有符号的十进制形式输出整数(正数不输出符号)%f 是第二个输出项x的格式说明,以小数形式输出单、双精度实数,默认输出6位小数&&显然,%d是控制整数 num的,%f是控制实数x的。为了清晰起见,格式控制串中除了格式说明之外,还可以有按照原样输出的普通字符例如: printf(“num=%d&&& x=%f", num ,x ); 输出结果为: &&&&&&& num=123&& x=34.678000如果num是车牌号,而x是车速的话,则以下的语句更为优秀:&&&& printf(“车牌为%d号,车速是%f千米/小时\n", num ,x );输出结果为: 车牌为123号,车速是34.678000千米/小时在格式控制串中,还可以有换行符号‘\n’(这是一种转义字符) 例: printf(“num=%d\nx=%f”,num , x );输出结果为: &&&&&&&& num=123&&&&&&&& x=34.678000域宽和精度 %m.nf&& :对于实数,要想改变默认的小数点后面显示6位。可改为 %.nf例如: printf(”x=%.2f”,x);输出结果为: &&&&&&& x=34.68&&&&&& //4舍5入printf(”x=%7.2f”,x);输出结果为: &&&&&& x=&& 34.68&& 说明:34.68左边多出两个空格,整个变量x的输出域宽(包括小数点)占了7位。如果指定域宽小于输出项的实际宽度,则指定的域宽不起作用。二、数据(变量)输入 ,可调用格式化输出库函数:scanf()函数格式化输入库函数scanf的调用,可以使得程序运行暂停下来,等待用户的输入,程序用户可以通过键盘输入一个数值到变量(所对应的内存单元)中。不过在函数调用时,第一个参数是相应的占位符%d,%f或%c,它们与要输入的变量类型的对应关系如下表: &&&&&& 占位符&&&&&&&&& 输入变量的类型&&&&&&& %d&&&&&&&&&&&& int&&&&&&& %f&&&&&&&&&&&& float&&&&&&& %c&&&&&&&&&&&& char库函数scanf()的调用通过键盘输入一个变量值的最简单形式是:&&&&&&&&& scanf(“占位符”,&变量名);&&变量左边的符号&& ”&” 是一个取地址符号。这个取地址符号,在scanf()函数调用时,初学者最容易漏写。注意:占位符中的转换说明一定要与后面存储输入数据的变量类型相匹配。深入一步 : 格式化库输入函数scanf()的工作原理简述等待程序用户从键盘上输入字符串,在用户按下回车键后,按照占位符中的转换说明,对输入字符串进行数值数制转换,变成二进制的整数、实数或ASCII码,然后将此二进制的整数、实数或ASCII码,存入到由后一个参数(即“&变量”)指定了地址的变量所对应的内存单元中。
不必感到吃惊,你在PC机或笔记本电脑的键盘上的任何多次(或一次)击键产生的输入,系统其实都是当作一串(或一个)字符来对待的。功能强大、复杂而又容易用错的格式化输入库函数scanf()的比较详细的讲解请参见。三、有关输入输出函数的更多问题:●对于字符的输入输出,除了可以用格式化输入输出库函数外,还可以使用以下几个库函数:输出单个ASCII字符的库函数 putchar()用法举例1:&& putchar(’d’); /*这会导致将字符’d’在屏幕的当前光标位置显示出来*/用法举例2:&& putchar(ch); /*这会导致将字符变量ch所取的字符在屏幕上显示*/用法举例3:&& putchar(’\n’); /*此句运行相当于按下了“enter”键,起的是“回车换行”的作用(“回车换行”这个术语是从电传打字机的运行借用过来的,早期的计算机不使用屏幕显示输出信息,而是用电传打字机)。 && 输入单个字符到某个字符变量的库函数getchar()&&&&& 用法举例:&& ch=getchar();程序运行到此句时,程序会被系统暂时中断(中断概念的解说可见本书9.4节),等待程序用户从键盘输入一个字符。如果您在运行此程序时敲击了字符键’h’,并随即按下回车键“enter”,则小写字母’f’的ASCII码值就被getchar()函数的运行存放到了字符变量ch所对应的内存中。注意:输入字符函数getchar()调用时不需要参数。输入字符到某个字符变量getche()&&&& 用法举例:&& ch=getche();&& 此库函数与getchar()的最大区别是:getche()只需要按下一个键,不必在输入一个字符后再按下回车键,程序就可立即从被中断处继续往下运行。 【任务五】 将一个三位整数反向后输出任务描述要求通过键盘输入三位整数,编写一程序将其反向,并在屏幕显示输出结果。设计过程步骤一:启动win-tc新建空白文件,如图所示。 步骤二:分析并确定变量1.输入一个三位整数→n2.通过利用学过的算术运算符整除 \ 和取余数 % 进行分解,分别求出此三位整数n的百位数n3,十位数n2和个位数n13.反向后的三位整数为 num=n1*100+n2*10+n34.输出此三位数步骤三:设计算法其中第2步由于不能立即写出C语言的语句,需要进一步求精:2.1 求出n的百位数:n3=n/1002.2 求出n的十位数n2=(n-n3*100)/102.3求出n的个位数 n1=n%10&&&& 算法验证:假设将一个任意指定的三位整数比如315→n(即存入变量n中),用于验证上述算法过程的正确性;由2.1可得到百位数n3的值为:315/100即等于3;由2.2可得到十位数n2的取值为:(315-3×100)/10等于1;由2.3可得到个位数n1的取值为:315%10 等于5。再通过算法的第3步,反向后的值num为:n1*100+n2*10+n3=5*100+1*100+3=513。最终值num确实等于513。算法验证是正确的。步骤四:编写C语言程序转化为C语言程序:1&& #include&stdio.h&2&& int&& main()3&& {&&& 4&&& int&&/*输入变量*/&&&&&&& 5&&& int&& n3,n2,n1;/*中间变量*/&&& 6&&& int&& /* 结果变量*/7&&& /*输入一个三位整数n*/&&& 8&&& printf(“请输入一个三位整数\n”);&&9&&& scanf(“%d”, &n);&&
&&&&&&&&&&&& 1011&& /*分别求出它的百位数n3,十位数n2,个位数n1*/&&&&& 12&&& n3=n/100;&&&&&&&&&&&&&&& 13&&& n2=(n-n3*100)/10; &&&&& 14&&& n1=n%10;&&&&&&&&&&&&&&&&&&&&&&& 1516&& /*反向后的三位整数为*/ 17&& num=n1*100+n2*10+n3;&&1819&& /*输出此三位数*/20&& printf(“num=%d”,num);&&&&&&21&& return 0;&&&&&&&&&22&& }相关知识1.5 表达式1、赋值表达式的概念:赋值语句去掉分号,就成了赋值表达式。它也完成了与赋值语句一样的运算操作。不同点在于,赋值表达式是本身具有一个计算值的,这个值就等于存放在赋值号左边变量中的值。例如 :赋值表达式 n=3.6 如果变量n为整型,则n的值为3,赋值表达式本身的值也是3。我们自己也可以验证一下这个说法是否正确:#include&stdio.h&int main(){&&&& printf(“%d”, n=3.6);}运行此程序,打印出的结果确实为3。2、自增与自减运算符 :++与--++是自加1运算符,使得变量的值加1;――是自减1运算符,使得变量的值减1。它们只能作用于变量上,不能作用在常量和表达式上。在i++,i--,++i,--i独自成为一条语句的情况下, i++; 、++i; 都相当于i=i+1;i--; 、 --i;&& 都相当于i=i-1;但如果i++或i――出现在表达式或别的语句中,读者要注意:printf(“a=%d”,a++);等价于以下两句:printf(“a=%d”,a);a=a+1;printf(“a=%d”,a--);等价于以下两句:printf(“a=%d”,a);a=a-1;printf(“a=%d”,++a);等价于以下两句:a=a+1;printf(“a=%d”,a);printf(“a=%d”,--a);等价于以下两句:a=a-1;printf(“a=%d”,a);也就是说:++ 或— 出现在某变量的左边,那么就要先改变该变量的值,然后再用变量的新值去做语句指定的其他事(比如参与表达式的计算或输出);如果:++ 或—出现在某变量的右边,那就是先要用该变量的老值去做语句指定的其他事,然后再改变该变量的值(加1或减1)。 问题.执行以下语句后,变量m、n的最终值是多少?(1)m=4; n=--m;(2)m=4; n=m--; 点评:关于自增和自减运算符自加运算符x++;虽然与赋值语句x=x+1;等价,但执行速度却要快一些。原因在于x++的执行中所加的1,不必到内存中去取,而赋值语句x=x+1;中的1却需要通过总线到内存中的常量区去取。CPU执行一条不需访问内存的指令,比执行一条需要访问内存的指令大约要快10倍左右。对自减运算符也是如此。所以,在循环中,尤其是在内层循环中,能够使用自加自减运算符的,就不要用对应的赋值语句。注意:自增自减运算符使用会带来很多意想不到的问题,初学者要慎用——最好单独使用,而不要用它与其他运算符来构成具有副作用的表达式。思考:问题1:j的初值为5,有以下表达式(j--)+(j--)请问该表达式的值是多少?答:这个式子是具有副作用的表达式,在不同的编译环境下,得到的结果可能不一样。一些系统把5作为表达式中所有j的值,表达式的结果是10,j的最终值是3;而另一些系统按从左到右计算,即第一个(j--)表示参与加法运算的是5,然后j立即自减1,这样第二个参与加法运算的(j--)的值就是4了。表达式的计算结果为9。j的最终值仍然是3。3、逗号运算符:逗号运算符在形式上就是一个或多个逗号,它是C语言里优先级最低的运算符(逗号运算符也采用从左向右的结合方式),其形式是:表达式1,表达式2,表达式3&&& 在对逗号表达式求值时,首先求出表达式1的值,然后再去求表达式2的值,再求表达式3的值。以最右边的表达式(这里是表达式3)的值作为整个逗号表达式的值。&&& 表达式的个数并不限于2个或3个,可以是任意多个。逗号表达式主要用在循环语句for语句的头部的表达式1(循环前的变量初始化)和表达式3(循环变量的更新)中。在其他地方尽量不要用,因为容易出现误用。&& 例如&& for ( sum=0,i=1;i&=100; i++)sum=sum+i; 是在for循环的表达式一中使用逗号表达式的例子(参见第4章)。4、多重赋值:比如:变量1=变量2=变量3=表达式;&&&&&&&&&&& (1)上式相当于:变量1=(变量2=(变量3=表达式));&&&&& (2)所起的作用是为多个变量赋予同一个数值(表达式计算出来的值)。5、复合赋值运算符:有一种特殊形式的赋值表达式,称为复合赋值表达式。一般形式如下:变量&& 二元运算符 = 表达式&&&&&&&&&&&&&&&&&& (1)这种表达式其实是一种普通赋值表达式的简写形式。即与(1)式等价的普通赋值表达式是:变量 = 变量 二元运算符&& (表达式)&&&&&&&&&& (2)可以这样使用的二元运算符有两大类:算术运算符、位运算符。 即 +=&& -=&& *=&& /=&& %=&& 等
第一个错误用PRINTF( )打印简单数字、字符图案&&&&& 1PRINTF
第二个错误:两种IF语句
程序的运行都是从系统调用main函数开始的。======================如果没有系统呢?
问题1:j的初值为5,有以下表达式(j--)+(j--)请问该表达式的值是多少?答:这个式子是具有副作用的表达式,在不同的编译环境下,得到的结果可能不一样。一些系统把5作为表达式中所有j的值,表达式的结果是10,j的最终值是3;而另一些系统按从左到右计算,即第一个(j--)表示参与加法运算的是5,然后j立即自减1,这样第二个参与加法运算的(j--)的值就是4了。表达式的计算结果为9。j的最终值仍然是3。==================================================这个错
赋值表达式的概念:赋值语句去掉分号,就成了赋值表达式。==============================很怪的说法属于循环定义
登录百度帐号推荐应用

我要回帖

更多关于 简单c语言程序加法 的文章

 

随机推荐