C函数调用

  1 #include<stdio.h>
  2 #include<time.h>
  3 #include<math.h>
  4 #include<stdlib.h>
  5
  6 int No=-1;        //功能选择标志
  7
  8 void HomePage();                            //首页
  9 void FunctionSelection();                    //功能选择
 10 void MultiplicationTable();                    //九九乘法表
 11 void YanghuiTriangle();                        //杨辉三角
 12 void IntLeapYear();                            //判断闰年
 13 void LettersPyramid_1();                    //字母金字塔(1)
 14 void LettersPyramid_2();                    //字母金字塔(2)
 15 void GCD_LCM();                                //最大公约数最小公倍数
 16 void Josephus();                            //约瑟夫环
 17 void JudgePrime();                            //判断素数
 18 void NarcissisticNumber();                    //水仙花数
 19 void PrimeFactors();                        //分解质因数
 20 void JudgmentDay();                            //判断某年某月某日是今年的第几天
 21 void Pattern();                                //打印棱形图案
 22
 23 void main()
 24 {
 25     do{
 26     system("cls");
 27     HomePage();
 28     FunctionSelection();
 29     }while(No!=0);
 30 }
 31
 32 void FunctionSelection()                    //功能选择
 33 {
 34     switch(No)
 35     {
 36     case 1:MultiplicationTable();break;
 37     case 2:YanghuiTriangle();break;
 38     case 3:IntLeapYear();break;
 39     case 4:LettersPyramid_1();break;
 40     case 5:LettersPyramid_2();break;
 41     case 6:GCD_LCM();break;
 42     case 7:Josephus();break;
 43     case 8:JudgePrime();break;
 44     case 9:NarcissisticNumber();break;
 45     case 10:PrimeFactors();break;
 46     case 11:JudgmentDay();break;
 47     case 12:Pattern();break;
 48     }
 49
 50 }
 51
 52 void HomePage()                                //首页
 53 {
 54     char* str_time=NULL;
 55     time_t t;
 56     system("cls");
 57     t=time(0);                        /*获取当前时间*/
 58     str_time=ctime(&t);                /*把日期和时间转换为字符串*/
 59
 60     printf ("┏ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅┓\n");
 61     printf ("┇请选择您需要的功能:                                         ┇\n");
 62     printf ("┣ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅┫\n");
 63     printf ("┇  九九乘法表请按 …………………………………………1          ┇\n");
 64     printf ("┇  杨辉三角请按 ……………………………………………2          ┇\n");
 65     printf ("┇  判断闰年请按 ……………………………………………3          ┇\n");
 66     printf ("┇  字母金字塔(1)请按  ……………………………………4          ┇\n");
 67     printf ("┇  字母金字塔(2)请按  ……………………………………5          ┇\n");
 68     printf ("┇  最大公约数最小公倍数请按 ……………………………6          ┇\n");
 69     printf ("┇  约瑟夫环请按 ……………………………………………7          ┇\n");
 70     printf ("┇  判断素数请按 ……………………………………………8          ┇\n");
 71     printf ("┇  水仙花数请按 ……………………………………………9          ┇\n");
 72     printf ("┇  分解质因数请按 …………………………………………10         ┇\n");
 73     printf ("┇  判断某年某月某日是今年的第几天请按 ………………11         ┇\n");
 74     printf ("┇  打印棱形图案请按 ………………………………………12         ┇\n");
 75     printf ("┇                                                     退出_0 ┇\n");
 76     printf ("┗ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅┛\n");
 77     printf ("                               %s",str_time);
 78     printf ("Please write down the number:");
 79     scanf ("%d",&No);
 80 }
 81
 82
 83
 84 void MultiplicationTable()                    //九九乘法表
 85 {
 86     int i,j;
 87     for(i=1;i<10;i++)
 88     {
 89         for(j=1;j<=i;j++)
 90         {
 91             printf("%d*%d=%-2d ",j,i,i*j);
 92         }
 93         printf("\n");
 94     }
 95     system("pause");
 96 }
 97
 98 void YanghuiTriangle()                        //杨辉三角
 99 {
100     int n;
101     printf("请先定义杨辉三角的深度(3~13最佳):");
102     scanf("%d",&n);
103     //缺少异常机制
104     int a[30][30];
105     int i,j,k;
106     for(i=0;i<n;i++)
107         for(j=0;j<=i;j++)
108         {
109             if(j==0||i==j)    a[i][j]=1;        //对两边的1进行赋值
110         }
111     for(i=2;i<n;i++)
112         for(j=1;j<i;j++)
113             a[i][j]=a[i-1][j-1]+a[i-1][j];    //数为两肩上的数之和
114
115     for(i=0;i<n;i++)
116     {
117         for(k=0;k<n-i;k++)
118             printf("  ");
119         for(j=0;j<=i;j++)
120             printf("%-3d ",a[i][j]);        //输出
121         printf("\n");
122     }
123     system("pause");
124 }
125
126
127
128 void  IntLeapYear()                            //判断闰年
129 {
130     int year,leap;
131     printf("\n请输入年份:");
132     scanf("%d",&year);
133     if((year%4==0 && year%100!=0)||(year%400==0))
134         leap=1;
135     else leap=0;
136     if(leap)
137         printf("%d is ",year);
138     else
139         printf("%d is not ",year);
140     printf("a leap year.\n\n");
141     system("pause");
142 }
143
144 void LettersPyramid_1()                        //字母金字塔(1)
145 {
146     int i,j;
147     for(i=0;i<26;i++)
148     {
149         for(j=0;j<26-i;j++)  printf(" ");
150         for(j=i;j>=0;j--) printf("%c",‘A‘+j);
151         for(j=1;j<i+1;j++) printf("%c",‘A‘+j);
152         putchar(‘\n‘);
153     }
154     system("pause");
155 }
156
157 void LettersPyramid_2()                        //字母金字塔(2)
158 {
159     int i,j;
160     for(i=0;i<26;i++)
161     {
162         for(j=0;j<25-i;j++) putchar(‘ ‘);
163         for(j=0;j<i;j++) putchar(‘A‘+j);
164         for(j=i;j>=0;j--) putchar(‘A‘+j);
165         putchar(10);
166     }
167     system("pause");
168 }
169
170 void GCD_LCM()                            //最大公约数最小公倍数
171 {
172     int n,m,nm,t;
173     printf("请输入两个数:");
174     scanf("%d%d",&n,&m);
175     nm=n*m;
176     if(m>n)
177     {
178         t=m;
179         m=n;
180         n=t;
181     }
182     while(n%m!=0)
183     {
184         t=n%m;
185         n=m;
186         m=t;
187     }
188     printf("最大公约数:%d,最小公倍数:%d\n",m,nm/m);
189     system("pause");
190 }
191
192
193
194
195 void Josephus()                                    //约瑟夫环
196 {
197     int m,n,i,j=0,a[100];
198     int count1=0,count2=0;
199     printf("请输入人数,和退出序数:");
200     scanf("%d%d",&n,&m);
201     for(i=0;i<n;i++)  a[i]=i+1;
202     i=0;
203     while(count2<n)
204     {
205
206         while(a[i]!=0)
207         {
208             count1++;
209             if(count1==m)
210             {
211                 j++;
212                 printf("第%d个退出序数:%d\n",j,a[i]);
213                 a[i]=0;
214
215                 count1=0;
216                 count2++;
217             }
218             i++;
219             i=i%n;
220         }
221             i++;
222             i=i%n;
223     }
224     system("pause");
225 }
226
227
228
229 void JudgePrime()                        //判断素数
230 {
231     int n,j;
232     printf("请输入一个数:");
233     scanf("%d",&n);
234     for(j=2;j<=sqrt(n);j++)
235     {
236         if(n%j==0) break;
237     }
238     if(j>sqrt(n)) printf("%d是素数.\n",n);
239     else printf("%d不是素数.\n",n);
240     system("pause");
241 }
242
243
244 void NarcissisticNumber()                //水仙花数
245 {
246     int i,bai,shi,ge;
247     printf("水仙花数:\n");
248     for(i=100;i<=999;i++)
249     {
250         bai=i/100;
251         shi=i/10-bai*10;
252         ge=i%10;
253         if(i==bai*bai*bai+shi*shi*shi+ge*ge*ge)
254             printf("%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\n\n",i,bai,bai,bai,shi,shi,shi,ge,ge,ge);
255     }
256     system("pause");
257 }
258
259
260
261 void PrimeFactors()                        //分解质因数
262 {
263     int k,n;
264     printf("(分解质因数)请输入一个数:");
265     scanf("%d",&n);
266     printf("%d=",n);
267     for(k=2;k<=n;k++)
268     {
269         while(n%k==0)
270         {
271             printf("%d",k);
272             if(n!=k) printf("*");
273             n=n/k;
274         }
275
276     }
277     printf("\n");
278     system("pause");
279 }
280
281
282 void JudgmentDay()                            //判断某年某月某日是今年的第几天
283 {
284     int year,month,day,sum=0;
285     printf("(判断某年某月某日是今年的第几天)\n请输入年 月 日:");
286     scanf("%d%d%d",&year,&month,&day);
287     switch(month)
288     {
289         case 1:sum=0;break;
290         case 2:sum=31;break;
291         case 3:sum=59;break;
292         case 4:sum=90;break;
293         case 5:sum=120;break;
294         case 6:sum=151;break;
295         case 7:sum=181;break;
296         case 8:sum=212;break;
297         case 9:sum=243;break;
298         case 10:sum=273;break;
299         case 11:sum=304;break;
300         case 12:sum=335;break;
301     }
302     sum+=day;
303     if(year%4==0&&year%100!=0||year%400==0) sum++;
304     printf("\n今天是今年的第%d天.\n\n",sum);
305     system("pause");
306 }
307
308
309 void Pattern()                        //打印棱形图案
310 {
311     int i,j,k,l;
312     char a[7][7]={‘ ‘};
313     for(i=0;i<7;i++)
314     {
315         j=3;
316         k=j-i;
317         l=j+i;
318         if(i>3)
319         {
320             k=i-3;
321             l=6-k;
322         }
323         for(j=k;j<=l;j++)
324         {
325             a[i][j]=‘*‘;
326         }
327     }
328     for(i=0;i<7;i++)
329     {
330         for(j=0;j<7;j++)
331         {
332             printf("%c",a[i][j]);
333         }
334         printf("\n");
335     }
336     system("pause");
337 }
时间: 2024-11-05 17:28:50

C函数调用的相关文章

C++函数调用时的参数传递-3中传递方式

参数传递即实参向形参传递信息,使形参获得对应的存储空间及初值,C++中函数传递主要有3种方式: 1.按值传递. 以按值传递方式进行参数传递的过程为:首先计算出实参的值,然后给它所对应的形参变量分配存储空间,该空间大小等于该形参类型的长度,然后把实参值存入到为形参分配的存储空间里去,该值即为形参的初值,在函数被调用时使用.而这种方式被调用的函数对实参的值改变不会有任何的影响,也就是说,即使形参的值在函数中被改变,也不会对实参值产生任何影响,实参值仍为被调用之前的值.究其原因还是实参和形参各占独立的

【转】C/C++函数调用过程分析

转自:here 这里以一个简单的C语言代码为例,来分析函数调用过程 代码: #include <stdio.h> int func(int param1 ,int param2,int param3) { int var1 = param1; int var2 = param2; int var3 = param3; printf("var1=%d,var2=%d,var3=%d",var1,var2,var3); return var1; } int main(int a

Crush The Crash--汇编级看函数调用

游戏在后期polish以及上线之后,一个不可避免的部分就是要处理各种bug,包括crash. 汇编?似乎只是学校里学习了一下,在现在都倾向于使用高层语言的时代,还有用么?答案是肯定的. 有大量的crash以及bug都是只发生在retail版中,现场都是优化过的汇编代码,大部分是minidump,里面包含的信息非常有限,你拿到的就是一个优化过的汇编代码,加上少量的stack上的内存信息,这种情况下要处理掉crash,能从这些汇编代码中解析minidump并最终击杀问题是唯一的选择. 本文涉及的知识

Javascript读书笔记:函数定义和函数调用

定义函数 使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: var add = new Function("m", "n", "alert(m+n);"); Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:&

JS函数调用的四种方法

js的函数调用会免费奉送两个而外的参数就是 this 和 arguments .arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度. 书上有说4中调用方式: 方法调用模式 函数调用模式 构造器调用模式 apply调用模式 下面我们来看看一些实例更好理解. 1:方法调用模式. 请注意this此时指向myobject. /*方法调用模式*/    var myobject={            value:0,            inc:functio

C/C++:函数调用规则__stdcall,__cdecl,__pascal,__fastcall

__cdecl __cdecl 是 C Declaration  的缩写,表示 C 语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈.被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误. __stdcall __stdcall 是 Standard Call 的缩写,是 C++ 的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是 this 指针.这些堆栈中的参数由被调用的

js函数调用的方法:

js的函数调用会免费奉送两个而外的参数就是 this 和 arguments .arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度. 书上有说4中调用方式: 方法调用模式 函数调用模式 构造器调用模式 apply调用模式 下面我们来看看一些实例更好理解. 1:方法调用模式. 请注意this此时指向myobject. /*方法调用模式*/    var myobject={            value:0,            inc:functio

在linux代码中打印函数调用的堆栈的方法

之前一直有这样的需求,当时问到,也没搜到方法,现在竟然既问到了,也搜到了,哎,世事真是不能强求啊! 在Linux内核调试中,经常用到的打印函数调用堆栈的方法非常简单,只需在需要查看堆栈的函数中加入: dump_stack();或 __backtrace();即可. dump_stack()在~/kernel/ lib/Dump_stack.c中定义 void dump_stack(void){ printk(KERN_NOTICE  "This architecture does not imp

Swift 函数调用到底写不写参数名

最近真正开始学 Swift,在调用函数的时候遇到一个问题:到底写不写函数名? 我们来看两个个例子: // 1 func test(a: Int, b: Int) ->Int { return a + b } test(a: 1, b: 1) // (A) test(1, b:1) // (B) //2 class Test { var name: String var age: Int init(name: String, age: Int) { self.name = name self.ag

分析函数调用关系图(call graph)的几种方法

分析函数调用关系图(call graph)的几种方法 绘制函数调用关系图对理解大型程序大有帮助.我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历.如果运气好一点,借助调试器的单步跟踪功能和call stack窗口,能节约一些脑力.不过如果要分析的是脚本语言的代码,那多半只好老老实实用第一种方法了.如果在读代码之前,手边就有一份调用图,岂不妙哉?下面举出我知道的几种免费的分析C/C++函数调用关系的工具. 函数调用关系图(call graph)是图