文章标题
来源:互联网 发布:网络女歌手歌曲大全 编辑:程序博客网 时间:2024/06/05 05:36
课堂练习
1、计算器简单实现
#include <stdio.h>#include <unistd.h>//函数的声明float add(float a, float b);float sub(float a, float b);float mul(float a, float b);float div(float a, float b);int main(void){ //用标准输入scanf printf("从键盘输入两个数,以回车结束:\n"); float a, b, ret; //默认是行缓冲。留在了你的输入的缓冲区,留下了一个'\n' scanf("%f %f", &a, &b); char ch = 0; printf("从键盘输入你要计算的运算符:+ - * /:\n"); do { scanf("%c", &ch); }while (ch == '\n'); switch (ch) { case '+': ret = add(a, b); break; case '-': ret = sub(a, b); break; case '*': ret = mul(a, b); break; case '/': ret = div(a, b); break; default: printf("error.\n"); break; } printf("%.2f %c %.2f = %.2f.\n", a, ch, b, ret);/* //调用函数 float ret = add(a, b); //float类型默认精度小数点后6位 printf("ret = %.2f.\n", ret);*/ return 0;}//函数实现(定义)float add(float a, float b){ float c = a + b; return c;// return a + b;}float sub(float a, float b){ return a - b;}float mul(float a, float b){ return a * b;}float div(float a, float b){ if (b == 0) { printf("除数不能是0.\n"); //高精度向低精度隐式转换,会丢掉数据。低精度向高精度隐式转换,结果更精确。// return -1;// 结束整个程序 _exit(0); } return a / b;}
2、迭代函数练习
#include <stdio.h>#include <unistd.h>//函数的声明float add(float a, float b);float sub(float a, float b);float mul(float a, float b);float div(float a, float b);int main(void){ //用标准输入scanf printf("从键盘输入两个数,以回车结束:\n"); float a, b, ret; //默认是行缓冲。留在了你的输入的缓冲区,留下了一个'\n' scanf("%f %f", &a, &b); char ch = 0; printf("从键盘输入你要计算的运算符:+ - * /:\n");/* scanf("%c", &ch); //ch = 10.对应‘\n’的asc码值: printf("ch = %d.\n", ch);*/ do { scanf("%c", &ch); }while (ch == '\n'); switch (ch) { case '+': ret = add(a, b); break; case '-': ret = sub(a, b); break; case '*': ret = mul(a, b); break; case '/': ret = div(a, b); break; default: printf("error.\n"); break; } printf("%.2f %c %.2f = %.2f.\n", a, ch, b, ret); return 0;}//函数实现(定义)float add(float a, float b){ float c = a + b; return c;}float sub(float a, float b){ return a - b;}float mul(float a, float b){ return a * b;}float div(float a, float b){ if (b == 0) { printf("除数不能是0.\n"); _exit(0); } return a / b;}
3、递归算法练习
#include <stdio.h>//计算阶乘(递归)int jiecheng(int a){ if (a <= 0) { printf("参数错误.\n"); return -1; } //回归条件 if (a == 1) return 1; return a * jiecheng(a-1);}//递归解决求fibo数列某一项的值: 1 1 2 3 5 8 13 21 34 55int fibo(int num){ if (num > 0) { if (1 == num) return 1; if (2 == num) return 1; return fibo(num-2) + fibo(num-1); }}int main(void){ int a = 0; while (1) { printf("输入0表示推出.\n"); scanf("%d", &a); if (0 == a) break; printf("%d项的fibo值:%d.\n", a, fibo(a)); } return 0;}
4、带返回值的函数练习
//函数三要素:返回值、参数列表、声明#include <stdio.h>#include <string.h>//main函数作为整个程序的入口,返回值给了他的父进程//char *argv[]指针数组:[]优先级很高,argv[]代表数组,里面所有的元素是char*类型,每个main函数的参数都是字符串(char *)//直接给main函数传参,一空格表示一个参数的结束int main(int argc, char *argv[]){ //strcmp比较两个字符串大小strcmp(const char *s1, const char *s2) int ret = strcmp("08", "123467"); printf("ret = %d.\n", ret); ret = strcmp("923456", "123467"); printf("ret = %d.\n", ret); char *p = "中国"; printf("%s.\n", p); char str[] = "123"; char *p_str = "123"; char *p_str1 = "123"; if (p_str == p_str1) printf("==.\n"); if (str == p_str) printf("ok.\n"); return 0;}
5、宏定义
//借鉴:http://blog.csdn.net/qustdjx/article/details/7907173#include <stdio.h>//宏定义:1、常数#define NUM 5#define X NUM+NUM#define INT_16 short#define INT_t int int main(int argc, char *argv[]){ int a = NUM; printf("a = %d.\n", a); int b = X*X; // NUM + NUM * NUM + NUM printf("b = %d.\n", b); INT_16 c; return 0;}
6、带参宏和普通函数的练习
#include <stdio.h>int cnt_num_1(int num){ //分析:1、& 0x1 2、num >>=1;3、每次判断(num>>=1)& 0x1 int cnt = 0, flag = 0x1; while (num) { //if条件成立,表示统计一次个数// if (1 == (num & flag)) if (num & flag) { cnt++;// printf("cnt = %d.\n", cnt); } //num向右移一位 num >>= 1; // === num = num>>1 } return cnt;}//统计带负数的整形int cnt_1(int a){ int cnt = 0; unsigned flag = 1; while (flag) { if (a & flag) cnt++; flag <<= 1; } return cnt;}//参数void func(int a, int b, int c){ printf("%d %d %d.\n", a+b+c, b*=2, c*=3); }int main(){ //14 4 9 //入参的时候,由右向左 func(1, 2, 3);/* int a = 9; int b = -9; //调用函数返回数值里二进制1的个数 int ret = cnt_num_1(a); printf("ret = %d.\n", ret); ret = cnt_1(b); printf("ret = %d.\n", ret); int in = 0x80000000; printf("in =0x%x.\n", in);*//* unsigned a = 1; int a = 1; float b = 3.14; double c = -3.1415; //分析:1、a+b整体隐式转换为float,2、第一的结果整体+double又转换为double类型,3、最后转换为整形 //怎么存的,怎么取 int d = a + b + c; printf("d = %d.\n", d);*//* int a = -20; unsigned int b = 6; //隐式转换:1、低精度向高精度,安全没有错误;2、小范围默认转化为大范围(指的是表示最大数值的那个类型) //分析:1、C语言是强类型语言,两个操作数之间运算必须类型一致,2、转换问题? if (a - b > 0) { printf(">.\n"); } else { printf("<.\n"); }*//* int a = -9; printf("a = 0x%x.\n", a); unsigned i = 0; //相当于== unsigned int for (i=8; i>=0; i--) { printf("i = 0x%x.\n", i); }*/ return 0;}
7、新建一个库函数
//数学库//链接的时候需要-lm#include <stdio.h>#include <math.h>int main(void){ double ret = sqrt(16); printf("ret = %.2f.\n", ret); char *p1; short *p2; double *p3; printf("sizeof(p1) = %d.\n", sizeof(p1)); printf("p1 = %p.\n", p1); return 0;}
8、字符串比较函数
#include <stdio.h>#include <string.h>//清零操作功能子函数//memset清零操作//char *my_memset(char *p, int c, int lenth)void my_memset(char *p, int c, int lenth){ //参数省略 int i = 0; for (i=0; i<lenth; i++) { p[i] = c; }// return p;}//复制字符串功能子函数//strcpy复制字符串char *my_strcpy(char *des, const char *src){ //参数判断省略 char *p_store = des; while ((*des++=*src++) != 0); return p_store;}int my_strcmp(const char *s1, const char *s2){ //省略 // "1234567" "1234567" "\0123" "\00" while (*s1 == *s2) { if (*s1 == 0 && *s2 == 0) break; s1++; s2++; } if (*s1 != *s2) { return (*s1 > *s2 ? 1 : -1); } if (*s1 == *s2) return 0;}
9、高仿shell
#include <stdio.h>#include <string.h>//定义一些我们自己的命令#define ls_ "ls"#define pwd_ "pwd"#define mkdir_ "mkdir"//自定义命令个数#define NUM 3//每个命令支持最大字符个数#define CNT 100//全局变量,3行100字符的数组, 默认是全为0char buf[NUM][CNT];//进行命令初始化void init_command(void){ strcpy(buf[0], ls_); strcpy(buf[1], pwd_); strcpy(buf[2], mkdir_);}int main(void){ //定义一个输入命令的字符数组 char cmd[CNT]; memset(cmd, 0, sizeof(cmd)); //初始化命令 init_command(); //工作 while (1) { printf("[root@]# "); //输入命令 scanf("%s", cmd); //查找命令 int i = 0; for (i=0; i<NUM; i++) { if (!strcmp(buf[i], cmd)) { printf("%s是合法命令:%s\n", cmd, buf[i]); break; } } if (i >= 3) { printf("%s是非法命令,请重新输入\n", cmd); } } return 0;}
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- HmacSHA256
- 自定义matrix类(数据结构与算法C++)
- 用原型单元格(prototype cell)自定义table view
- opencv2,RGB转Lab色彩空间
- Java中的HashMap
- 文章标题
- 判断等式成立下进制新思路
- 开闭原则 OCP
- 使用回调函数排序整形、浮点型、字符串等类型的数据
- selenium+robot接口测试:接口传参中文报错
- mongodb创建索引
- Spring data redis-StringRedisTemplate 用法
- 使用python绘制一个简单的三维图
- Java课程学习六:编程题