![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
zyh_helen
Helen , 他 , 很努力 !
展开
-
可变参数列表的实现
在学习C语言的过程中,大家是不是和我一样,认为printf是一个神一样的函数?他可以接受不同数目,不同类型的参数,他到底是怎么实现的呢?让我们去看一下它的源代码:printf源代码:int printf(const char *fmt,...){ int res; va_list arg; va_start(arg,fmt); res = vprintf(fmt原创 2015-05-19 20:15:48 · 719 阅读 · 0 评论 -
小谈c语言运算符的“优先级”及“结合性”
论坛和博客上常常看到关于C语言中运算符的迷惑,甚至是错误的解读。这样的迷惑或解读大都发生在表达式中存在着较为复杂的副作用时。但从本质上看,仍然是概念理解上的偏差。本文试图通过对三个典型表达式的分析,集中说说运算符的优先级、结合性方面的问题,同时说明它们跟求值过程之间存在的区别与联系。 优先级决定表达式中各种不同的运算符起作用的优先次序,而结合性则在相邻的运算符的具有同等优先级时,决转载 2015-04-26 16:02:57 · 795 阅读 · 0 评论 -
字符串操作函数
头文件:mystring.h#ifndef __MYSTRING_H__#define __MYSTRING_H__#includeint myStrlen(const char *a);char *myStrcpy(char *a,const char *b);char *myStrncpy(char *a,const char *b,int n);char *myStr原创 2015-04-09 14:55:03 · 538 阅读 · 0 评论 -
冒泡法排序
冒泡排序算法的运作如下:(从后往前)比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码如下:// 起泡法排序:// n个元素,比较原创 2015-04-06 21:28:17 · 1040 阅读 · 0 评论 -
#define(宏替换)以及如何打开预编译之后的“.i”文件看宏的本质
#include#include#define PI 3.14 /*PI是符号常量,不开辟空间,只是个临时符号宏的本质是:替换*/int main(){ double result; int r = 3; result = r*r*PI; cout<<result<<endl; return 0;}关于程序运行过程如下图所示下面介绍打开".i"原创 2015-03-20 21:12:24 · 2041 阅读 · 0 评论 -
杨辉三角以及九九乘法表
问题描述:输出杨辉三角的前十行,以及九九乘法表代码:九九乘法表:#include //scanf printf#include //system//九九乘法表int main(){ system("mode con cols=100 lines=100"); system("color 0A"); int i; int j; for(i=1;i<=9;原创 2015-04-09 15:04:04 · 1108 阅读 · 0 评论 -
自写atoi----字符串转化为整形
字符串转化为整形的各类情况: char *str1 = "12345"; //普通char *str2 = "+12345"; //正数char *str3 = "-12345"; //负数char *str4 = " 12345"; //前面有若干个空格char *str5 = " 1 2 3 4 5"; //数字间存在空格原创 2015-04-14 23:10:32 · 1545 阅读 · 0 评论 -
自写字符串连接函数strcat
#include#define STRLEN 100char *mystrcat(char *dest,const char *src){ char *ret = dest; while(*dest != '\0') { dest++; } while(*dest++ = *src++) { ; } return ret;}int main(){ char原创 2015-04-13 23:03:58 · 1356 阅读 · 0 评论 -
用交换实现字符串翻转
#includechar *reverse_string(char *string){ char *ret = string; //保存数组的首地址 char *left = string;//指向数组的第一个字符 char *right; //指向数组的最后一个非'\0'字符 char temp; //临时变量,用于交换 while(*string原创 2015-04-13 22:52:26 · 1130 阅读 · 0 评论 -
error C2227: left of '->first' must point to class/struct/union
今天调试程序时,遇到这么一个错误:error C2227: left of '->first' must point to class/struct/union#includeusing namespace std;#define ElemType intstruct node{ struct node *first; struct node *last; int size原创 2015-04-26 15:58:58 · 12362 阅读 · 0 评论 -
自写strcmp
#includeint my_strcmp(char *dest,const char *src){ while(*dest != '\0' && *src != '\0') { if(*dest == *src) { dest++; src++; } if(*dest > *src) { return 1; } if(*dest < *sr原创 2015-04-21 23:10:16 · 917 阅读 · 0 评论 -
自写strcpy
#includechar *my_strcpy(char *dest,const char *src){ char *ret = dest;//保存数组的首地址,下面的操作会改变dest的值 while((*dest = *src) != '\0')//将src数组的内容全部赋给dest,包括'\0',当'\0'拷贝过去之后拷贝完成即函数结束 { src++; dest++;原创 2015-04-21 23:30:41 · 902 阅读 · 0 评论 -
[c语言]PAT编程题引出int和long的区别
题目描述给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。输入描述:输入第1行给出正整数T(输出描述:对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。输入例子:41 2 32 3 421474原创 2015-06-23 10:38:55 · 2027 阅读 · 1 评论 -
[c语言]文件信息输入与输出
要求:将学生信息(姓名,年龄,学号,家庭住址)写入文件,并输出某一学生信息(比如最后一个学生)程序中所涉及的函数如下:1:文件打开函数:fopen(欲打开的文件名称or文件路径,哪种方式)2:文件关闭函数:fclose(文件指针)3:文件信息写入函数(数据块):fwrite(要写入数据的地址,要写入数据项的字节数size,要写入size字节数据项的个数,文件指针原创 2015-06-21 23:37:30 · 3561 阅读 · 0 评论 -
强制类型转化(数组名以及数组名取地址)
代码:void main(){ int a[4] = {1,2,3,4}; int *ptr0 = &a[0] + 1; int *ptr1 = (int *)(&a + 1); int *ptr2 = (int *)((int)a + 1); int *ptr3 = (int *)(a + 1); cout<<*ptr0<<" "<<ptr1[-1]<<" "<<*ptr原创 2015-05-18 09:34:35 · 3816 阅读 · 0 评论 -
单词翻转(i am a student)--->>(student a am i)
问题描述:写一个函数将i am a student 转化为 student a am i解题思路://i am a student --->--> student a am i#includeusing namespace std;/*翻转函数--->利用交换*/void words_reverse(char str[],int left,int right)原创 2015-05-01 21:26:18 · 2520 阅读 · 0 评论 -
字符串翻转的两种方法(1:利用额外空间 2:交换)
#includeusing namespace std;#define STRLENTH 100char *str_reverse1(char *str){ char temp[STRLENTH];//字符数组:存放逆序后的字符 char *p = str; //字符指针:指向最后一个非'\0'字符 int i = 0; /*找到最后一个非'\0'字符并使p指向它*/原创 2015-05-01 16:18:33 · 1699 阅读 · 0 评论 -
内存重叠之strcpy&memmove
淘宝面试题:已知strcpy函数的原型是:char *strcpy(char *dst, const char *src);1:实现strcpy函数;2:解释为什么返回char *;3: 假如考虑dst和src内存重叠情况,strcpy如何实现;原始代码:char *my_strcpy(char *dst,const char *src){ char *ret原创 2015-05-12 20:42:30 · 997 阅读 · 0 评论 -
字符串反转实现的几种方式
方式一:将字符串反向输出来,不改变内存(递归实现)void reverse_string(char *str){ /*遇到'\0'什么也不做,函数结束*/ if(*str == '\0') ; else { /*输出下一个*/ reverse_string(str + 1); cout<<*str; }}方式二:改变内存(交换法)/*非递归实现:操作内存*/原创 2015-05-10 18:43:18 · 4198 阅读 · 2 评论 -
判断一个字符串是否为回文数字符串
#include#define STRLEN 100int Is_palindromic_str(char *str){ int left = 0;//字符串数组的第一个字母的下标 int i = 0; while(str[i] != '\0') { i++; } int right = i - 1;//字符串数组最后一个字母(非‘\0’)的下标 while(left <原创 2015-04-26 19:36:22 · 4304 阅读 · 0 评论 -
静态局部变量求n的阶乘
#include#includeint factorial(int n){//静态局部变量,是在编译时赋初值的,在程序执行时它已经有初值//以后每次使用时不再重新赋值而只是保留上次函数调用结束时的值 static total = 1; int i; for(i=1;i<=n;i++) { total = total*i; } return total;}int原创 2015-04-13 19:52:37 · 5257 阅读 · 0 评论 -
判断一个数是否为回文数
问题描述:输入一个数值判断是否为回文数(回文数是指一个像12321、123321这样“对称”的数)解题思路:将数值的各个位存放在数组中,若数组中元素左右对称,则为回文数,反之不是设置:left(数组最左边下标)right(数组最右边下标),首先判断第一个和最后一个数值是否相等,若相等,left++,right--,直至left==right,过程中若遇到不相等的左右两位,即说明不是原创 2015-04-23 09:13:23 · 6926 阅读 · 0 评论 -
编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。
//**************************************************************// Author: Zong Yin Hu// This file can be compiled and use only the compiled version// when delivering the product to a third party/原创 2015-03-14 14:02:07 · 2419 阅读 · 0 评论 -
编写一个函数实现n^k,使用递归实现
#includeint index(int n,int k){ if(k == 1) return n; else return n*index(n,k-1);}int main(){ printf("%d\n",index(4,2)); return 0;}原创 2015-03-14 13:27:51 · 500 阅读 · 0 评论 -
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
#includeint DigitSum(int n){// int total=0; if(n == 0) //递归结束的条件 return 0; else return (n%10) + DigitSum(n/10); //条件逼近 }int main(){ printf("%d\n",DigitSum原创 2015-03-14 13:25:27 · 578 阅读 · 0 评论 -
VC6.0 error LNK2001: unresolved external symbol _main解决办法
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。 初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为: unre转载 2015-03-12 14:11:18 · 626 阅读 · 0 评论 -
函数指针,数组指针,指针数组
/*#includeint main(){ int (*p)[3]; //()的优先级高所以p首先是一个指针(指向int[3])的指针 int a[3]={1,2,3}; p=&a; //p=a不正确,a是数组首元素的地址(类型为int)} #includeint main(){ int *p[2]; //指针数组(从右向左看,p先与[2原创 2015-03-12 12:44:23 · 892 阅读 · 0 评论 -
.编写一个函数,将一个数字字符串转换成该字符串对应的数字
/*编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)例如:“12“ 返回12 “-123“ 返回-123函数原型:int my_atof(char *str){}*/#include#define MAXSIZE 100int my_atof(char *str){ int a = 0; //整数 int state;原创 2015-03-10 21:54:37 · 6553 阅读 · 0 评论 -
用递归和非递归实现斐波那契数
#include//递归函数实现:由于数据变量的压栈出栈,效率低//当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开销。int fib1(int n){ if(n <= 2) return 1; else return fib1(n-1)+fib1(n-2);}//非递归函数实现:效率较快,虽然代码的可读性稍微差些。int fib2(原创 2015-03-12 00:13:08 · 2526 阅读 · 0 评论 -
编写一个函数将字符串中的数字字符转化为相应的整数
/*为下面的函数原型编写函数定义:int ascii_to_integer(char *str);这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数包含了任何非数字字符,函数就返回零。请不必担心算数溢出。提示:这个技巧很简单:发现一个数字之前,把当前值乘以10,并把乘后的结果和新的数字所代表的值相加。For example:"12"令原创 2015-03-10 21:10:26 · 15009 阅读 · 0 评论 -
main函数中的两个参数
详细一点。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为:main (argc,argv)int argv;char *argv[];或写转载 2015-04-01 12:55:30 · 883 阅读 · 0 评论 -
c语言system函数
windows操作系统下system () 函数详解(主要是在C语言中的应用)函数名: system功 能: 发出一个DOS命令用 法: int system(char *command);system函数已经被收录在标准c库中,可以直接调用程序例:#include stdlib.h>#include stdio.h>int main转载 2015-04-04 19:38:50 · 4057 阅读 · 0 评论 -
给定一段正整数范围,统计9(或者1~9任意一个数)的个数
问题描述:给定一段正整数的范围,统计其中某个数(1~9)的范围大部分人的代码如下:/**********************************************编写程序数一下1到100的所有整数中出现多少次数字9******************************************/#includeint main(){ int coun原创 2015-04-10 23:00:46 · 1500 阅读 · 0 评论 -
编写一个程序,被调用后,能求出平均分,最高分,最低分
问题描述:有一个一维数组,存放十个学生的成绩,编写一个程序,当主函数调用此函数后,能求出平均分,最高分,最低分。解题思路:众所周知,一个函数只能带回一个函数返回值,此处,要求通过函数调用得到三个值,那该怎么办呢?------------->>>>全局变量可以解决这个问题代码如下:#includefloat Max; //全局变量, 存放最大值,整个源程序有效(定义开始到整原创 2015-04-12 14:53:00 · 9137 阅读 · 2 评论 -
二分法查找(数组元素无序)
问题描述:一数组,含有一堆无序数据,首先将数据按顺序排列,再用二分法实现某个元素的查找,若找到,返回该元素在数组中的下表,否则,返回不存在提示信息。#include#includeint *bubble_sort(int a[],int n)//冒泡排序(将数据升序排列){ int i; int j; int tmp; for(j=0;j<n-1;++j)//n个元素需要原创 2015-04-12 22:51:41 · 6886 阅读 · 0 评论 -
打擂台算法
算法描述:擂台上怎样决定出最后的优胜者? 先找一个人站在台上,第二个人上去与之比武,获胜者留在擂台上。再上去第三个人,与台上的人(即刚才的得胜者)比武,胜者留在台上,败者下台,直到所有的人都比试过后,最后留在擂台上的即是冠军!应用:求一组数据中的最大值或者最小值问题描述:有一个2*3的矩阵,求其中的最大值(最小值),并输出其所在的行号以及列号代码如原创 2015-04-06 21:56:56 · 10061 阅读 · 0 评论 -
猴子吃桃问题
问题描述:一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第十天就只剩余一个桃子,用多种方法求出这只猴子原来共摘了多少桃子。解题思路:代码如下:#include //scanf printf#include //system#include //powint main(){ system("mode con cols=100 lines=原创 2015-04-11 20:43:09 · 962 阅读 · 0 评论 -
输入一行字符,统计其中有多少单词,单词之间用空格隔开
问题描述: 输入一行字符,统计其中有多少单词,单词之间用空格隔开解题思路:判断单词是否出现,可以用空格的出现来判断(连续的若干空格看做成一个),若当前字符为空格,表明word未出现,当前字符非空格,之前字符为空格表明新单词出现,count++,之前字符是否为空格,用状态标志位word来标记代码如下:#include //printf#include //gets原创 2015-04-11 10:12:05 · 9348 阅读 · 1 评论 -
c语言实现系统关机注销等功能
#include //printf#include //system#include //strcat---exitint print(){ int n; printf("*****c语言关机程序*****\n"); printf("1:实现十分钟内定时关机\n"); printf("2:立即关闭计算机\n"); printf("3:注销计算机\n"); printf(原创 2015-04-04 20:56:00 · 3114 阅读 · 0 评论 -
c语言模拟ATM机界面
问题描述:相信大家都在ATM机上取过钱吧,本博客将模拟ATM机的界面以及实现简易的功能(账户密码修改,账户余额查询,取款,存款)鉴于水平有限,如有不足之处,请多多指教头文件:ATM.H#ifndef _ATM_H__#define _ATM_H__//包含的头文件#include //printf scanf#include //exit原创 2015-04-05 22:19:43 · 12365 阅读 · 1 评论