c语言程序设计案例教程(第2版)笔记(一)—零散、输入输出、最小公倍数、选择排序、冒泡排序
零散知识点:
- 非格式化输入输出:getchar()、putchar()
- 格式化输入输出 :scanf()、printf()
- 字符串输入输出 :gets() 或 scanf()、puts() 或 printf()。
- gets()函数以换行符或文件结束符EOF作为输入的结束标志,因此,在输入的字符串中允许包含空格或制表符。
- scanf()函数则以空格、制表符、换行符和文件结束符EOF作为输入的结束标志,因此,在输入的字符串中不允许包含这些字符。
- puts()函数在字符串显示完毕后换行。
- printf()函数不会进行换行。
- %f 表示这个位置应该输入一个实型数值
- %s 表示这个位置应该输入一个字符串
- break语句的目的是:终止执行后面分支的语句序列。
- continue语句只能应用在循环语句中,它的作用是:强制终止本次循环的执行,转去执行下一次循环。
- 交换两个数值(不引入外部参数)
#include<stdio.h>
#pragma warning(disable:4996) main()
{
int m, n;
printf("Enter two numbers:");
scanf("%d%d", &m, &n);
printf("\nm:%d\n", m);
printf("n:%d\n", n);
m = m + n;
n = m - n;
m = m - n;
printf("\nm:%d\n", m);
printf("n:%d\n", n);
}
- 求最小公倍数:首先比较大小(大小排序),后使用辗转相除法,求出最大公约数(被除数/除数=商…余数,后使用除数除以余数,直至余数为0;),再使用两个数的乘积除以该最大公约数,即可。
代码如下:
#include<stdio.h>
#pragma warning(disable:4996) main(){
int i, j, temp, s; printf("Enter two integers : ");
scanf("%d%d", &i, &j);
s = i*j;
/* if (i < j){
i += j;
j = i - j;
i = i - j;
}*/ do{
temp = i%j;
i = j;
j = temp;
} while (j>);
printf("the max gongyueshu: %d\n", i);
printf("the min gongbeishu: %d\n", s / i);
}
或
#include<stdio.h>
#pragma warning(disable:4996)
int gcd(int m, int n); main(){
int i, j, s;
int r; printf("111Enter two integers : ");
scanf("%d%d", &i, &j);
s = i*j;
/* if (i < j){
i += j;
j = i - j;
i = i - j;
}*/
r = gcd(i, j);
printf("the max gongyueshu: %d\n", r);
printf("the min gongbeishu: %d\n", s / r);
} int gcd(int m, int n)
{
if (m % n == )
return n;
else
return gcd(n, m%n);
}
- 一维数组:变量一经定义,系统将会为每个数组型变量分配一片连续的存储空间。
- 32位操作系统,int类型是4字节。
- int vote[10]={0} 表示为每一个元素赋予初值0。
- 采用键盘输入的方式为数组中的每个元素赋值:
int i;
int score[];
for (i = ; i < ; i++){
scanf("%f", &score[i]);
}
- 判断是否为英文字母
- ('A'<=ch && ch <='Z') || ('a<=ch && ch <='z')
- isalpha(c) c是一个字符,头文件是<ctype.h>。当c为英文字母,函数返回非0;否则函数返回0。
- 选择排序法
- 基本思路:假设有n个数据将要参与排序操作,则具体的排序过程可以描述为:首先从n个数据中选择一个最小的数据,并将它交换到第1个位置;然后再从后面n-1个数据中选择一个最小的数据,并将它交换到第2个位置;以此类推,直至最后从两个数据中选择一个最小的数据,并将它交换到第n-1个位置为止,整个排序操作结束。
- 选择排序代码实现过程:
#include<stdio.h>
#pragma warning(disable:4996)
#define NUM 10 main()
{
int data[NUM];
int i, j, min, temp; printf("Please enter %d integers:", NUM);
for (i = ; i < NUM; i++){
scanf("%d", &data[i]);
} printf("\n%d integers are:\n", NUM);
for (i = ; i < NUM; i++){
printf("%5d", data[i]);
} for (i = ; i < NUM - ; i++){
min = i;
for (j = i + ; j < NUM; j++){
if (data[j] < data[min])
min = j;
}
if (min != i){
temp = data[i];
data[i] = data[min];
data[min] = temp;
}
} printf("\nOrdering list is:\n");
for (i = ; i < NUM; i++){
printf("%5d", data[i]);
}
}
- 冒泡排序法
- 基本思路:不断地将所有的相邻数据进行比较,如果前面的数据大于后面的数据(a[j]>a[j+1]),就将两个位置的数据进行交换,最终实现所有的数据按照非递减的顺序重新排列。(如果有n个数据等待排序,则最多经过n-1次冒泡排序就可以将所有的数据排列好)
- 具体过程:
- 将整个待排序的数据序列划分成有序区域和无序区域。初始状态有序区域为空,无序区域包括所有待排序的数据;
- 对无序区域从前向后依次对相邻的两个数据进行比较,若逆序则将其交换,从而使得较小的数据像泡沫一样向前,较大的数据向后;
- 冒泡排序代码实现过程:
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
#define NUM 10
void input(int value[]);
void output(int value[]);
void sort(int value[]); main()
{
int value[NUM];
input(value);
output(value);
sort(value);
output(value);
} //输入待排序列
void input(int value[])
{
int i; printf("Enter %d integers : ", NUM);
for (i = ; i < NUM; i++){
scanf("%d", &value[i]);
}
} //输出显示数据数列
void output(int value[])
{
int i; printf("\n");
for (i = ; i < NUM; i++){
printf("%5d", value[i]);
}
} //冒泡排序函数
void sort(int value[])
{
int i, j, temp; for (i = NUM - ; i >= ; i--){ /*控制排序次数*/
for (j = ; j < i; j++){ /*相邻数据比较大小*/
if (value[j] < value[j + ]){
temp = value[j];
value[j] = value[j + ];
value[j + ] = temp;
}
}
}
}
- 在C语言中,字符串用字符型数组存储,并且以“\0”作为结束标志。结束标志“\0”是由系统自动添加到字符序列尾部的。结束标志“\0”不被计算在字符串的长度中。
- 字符串标准函数,头文件<string.h>:
- strlwr(str)——将字符串str中出现的所有大写字母转换成小写字母;
- strupr(str)——将字符串str中出现的所有小写字母转换成大写字母;
- strlen(str)——计算字符串长度,字符串结束标志“\0”不计算在内;
- strcmp(str1,str2)——比较字符串。str1<str2,函数返回一个负整数。区分大小写。可用来检测用户密码。
- stricmp(str1,str2)——比较字符串。str1<str2,函数返回一个负整数。不区分大小写。
- strcpy(str1,str2)——str2是将要被拷贝的字符串,str1是用于存放拷贝结果的存储区域。
- strcat(str1,str2)——将str2连接到str1之后。
- strstr(str1,str2)——检测主串str1中是否存在给定子串str2,函数返回子串str2在主串中第一次出现的位置;否则返回空。
- strchr(str1,ch)——检测给定字符ch是否在字符串str1中存在,函数返回ch在str1中第一次出现的位置;否则返回空。
- 二维数组的赋值与输出
#define ROW 6
#define COL 4
int i, j;
int value[ROW][COL]; //利用赋值语句
for (i = ; i < ROW; i++){
for (j = ; j < COL; j++){
value[i][j] = i + j;
}
}
//通过键盘输入
for (i = ; i < ROW; i++){
for (j = ; j < COL; j++){
scanf("%d", &value[i][j]);
}
}
//输出二维数组
for (i = ; i < ROW; i++){
for (j = ; j < COL; j++){
printf("%4d", value[i][j]);
}
putchar('\n');
}
程序一:
功能描述:输入一个整数n,打印输出一个由n个字符星号“*”组成的等边三角形。
#include <stdio.h> main()
{
int n, i, j;
printf("please enter the side of the triangle:");
scanf_s("%d", &n);
for (i = ; i <= n; i++){
for (j = ; j <= n - i; j++){
putchar(' ');
}
for (j = ; j <= i; j++){
putchar('*');
if (j != i){
putchar('_');
}
}
putchar('\n');
}
}
结果:
程序二:
功能描述:输入文本行,统计其中包含的行数、单词书、字符数。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#pragma warning(disable:4996) #define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* count lines, words, and characters in input */
main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = ;
while ((c = getchar()) != 'END')
{
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
程序三:
功能描述:输出当年当月的月历。
#include <stdio.h> main()
{
int n, i, j; scanf_s("%d", &n); if (n == )
n = ;
else
n = n; printf(" Sun Mon Tue Wed Tur Fri Sat\n"); for (i = ; i <= n; i++){
printf("%4c", ' ');
}
for (j = ; j <= ; j++){
if ((j + n) % == ){
printf("%4d", j);
printf("\n");
}
else{
printf("%4d", j);
}
}
return ;
}
结果:
程序四:
功能描述:菲波那切数列。
#include<stdio.h>
#define NUM 20 main()
{
int fib[NUM];
int i; fib[] = ;
fib[] = ;
for (i = ; i < NUM; i++){
fib[i] = fib[i - ] + fib[i - ];
}
for (i = ; i < NUM; i++){
if (i % == )
printf("\n");
printf("%6d", fib[i]);
}
}
结果:
程序五:
功能描述:输入一个文本行,其中包含多个单词,计算其中最长的单词长度。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996) main()
{
char str[];
int i, m = , L = , x = ;
printf("please enter text line:");
gets(str);
for (i = ; i < strlen(str); i++){
if (str[i] >= 'a'&&str[i] <= 'z' || str[i] >= 'A'&&str[i] <= 'Z'){
m++;
continue;
}
else{
if (m>L){
L = m;
}
m = ;
}
}
if (m > L){
L = m;
}
printf("the long of the largest word is %d", L);
}
本博客内容为原创,版权所有违者必究,转载请注明来源 http://www.cnblogs.com/sunshine-blog/
c语言程序设计案例教程(第2版)笔记(一)—零散、输入输出、最小公倍数、选择排序、冒泡排序的更多相关文章
- c语言程序设计案例教程(第2版)笔记(四)—指针、分配存储空间、文件
零散知识点: 指针类型:每个变量占用的首单元地址称为这个变量的存储地址. “&”为“取地址运算符”.格式:& 变量名.功能:返回指定变量的存储地址. “*”为“取内容运算”.格式:* ...
- c语言程序设计案例教程(第2版)笔记(二)—函数、递归
零散知识点 模块化:将一个问题分解成若干个子问题的过程成为模块化. 模块化的优点:不但可以将一个复杂的问题分解成几个相对简单的问题:还可以提高程序代码的重用性. 函数:函数是构成C程序的基本单位.函数 ...
- c语言程序设计案例教程(第2版)笔记(六)—字符串处理实例
字符串处理 功能描述:从键盘输入一个文本行后,为用户提供菜单选择,实现字符串一些操作——显示文本行.查找并替换指定子串.删除指定子串.统计指定子串数目. 实现代码: #include<stdio ...
- c语言程序设计案例教程(第2版)笔记(五)-软件开发基础知识
零散知识点: 软件的主要特征 软件是一种逻辑产品,而不是有型的物质: 软件需要设计.开发,但不是传统意义上的产品制造: 软件不会磨损,但软件需要维护,即:修改代码或增加模块: 虽然软件行业正在向基于组 ...
- c语言程序设计案例教程(第2版)笔记(三)—变量、结构体
零散知识点: 变量 :C语言中,每个变量必须先定义后引用.所谓变量存在是指系统为这个变量分配一块存储空间,此时对变量的操作,就是对变量所对应的存储空间中存放的数据进行操作.人们将变量占据 ...
- 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词
第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...
- C语言学习书籍推荐《C语言程序设计 现代方法(第2版)》下载
下载地址:点我 C语言仍然是计算机领域的通用语言之一,但现在的C语言已经和当初的时候大不相同了.本书主要的一个目的就是通过一种“现代方法”来介绍C语言,书中强调标准C,强调软件工程,不再强调“手工优化 ...
- Python基础教程(第3版) 笔记(二)
1.8模块Python提供了完成(某人的年 龄为32.9,并想将这个值向下圆整为32,因为他还没有满33岁)这种任务的函 数floor.导入模块,可以使用特殊命令import.函数floor包含在模块 ...
- js高级教程第3版笔记(我的理解)陆续更新中
js基础语法'use strict'(严格模式)定义变量var object;只声明未赋值,默认值为undefined;var object1=值;声明并赋值;function fun(a){这样也叫 ...
随机推荐
- 109.Convert sorted list to BST
/* * 109.Convert sorted list to BST * 2016.12.24 by Mingyang * 这里的问题是对于一个链表我们是不能常量时间访问它的中间元素的. * 这时候 ...
- 【转】JavaScript错误处理和堆栈追踪
原文: https://www.cnblogs.com/caoru/p/6699583.html --------------------------------------------------- ...
- 如何删除Windows 7的保留分区
Windows 7的保留分区可以删除,但是必须小心.启动到Windows 7,运行具有管理员权限的CMD.exe,然后输入:diskpartsel disk 0list volsel vol 0 (你 ...
- LUA协程复用
-----协程复用根函数 local function routine(fun, args) while (fun) do fun, args = coroutine.yield(fun(table. ...
- iOS 获取手机 唯一标识
存贮在keychainQuery 可以统计用户使用情况 -(void)gatherMessage{ //采集用户设备信息 NSUserDefaults *userDefaults=[NSUserDef ...
- PHP开发者实用的代码
一.查看邮件是否已被阅读 当你在发送邮件时,你或许很想知道该邮件是否被对方已阅读.这里有段非常有趣的代码片段能够显示对方IP地址记录阅读的实际日期和时间. <? error_reporting( ...
- 创业公司做数据分析(四)ELK日志系统
作为系列文章的第四篇.本文将重点探讨数据採集层中的ELK日志系统.日志.指的是后台服务中产生的log信息,一般会输入到不同的文件里.比方Django服务下,一般会有nginx日志和uWSGI日志. ...
- HBuilder开发App教程05-滴石和websql
滴石 介绍 滴石是用HBuilder开发的一款计划类app. 用到HBuilder,mui.nativejs以及h5一些特性. 预期 眼下仅仅开发到todolist级别, 以后计划做成日计划,月计划, ...
- JavaGUI应用程序打包及数字签名
JavaGUI应用程序部署 JavaGUI程序发布分类: a.Applet:可以嵌入到浏览器中,通过网页的方式展示给用户 b.application :有两种发布方式 :打包成jar包通过bat的方式 ...
- 2016/2/24 1,css有几种引入方式 2,div除了可以声明id来控制,还可以声明什么控制? 3,如何让2个div,并排显示。4,清除浮动 clear:left / right / both
1,css有几种引入方式 使用HTML标签的STYLE属性 将STYLE属性直接加在单个的HTML元素标签上,控制HTML标签的表现样式.这种引入CSS的方式是分散灵活方便,但缺乏整体性和规划性,不利 ...