1.数字金字塔:输入一个正整数,输出n行数字金字塔
#include<stdio.h>
void pyramid(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
for (int j = 1; j <= i; j++) {
printf("%d", i);
printf(" ");
}
printf("\n");
}
}
int main() {
int n;
printf("enter n:");
scanf("%d", &n);
pyramid(n);
return 0;
}
运行结果如图:
注:1.用printf打出空格号时,一定要在双引号之间加一个空格号,否则无效;
2.定义pyramid()函数时,省略了return语句,并不意味着函数不能返回。对于void类型的 函数,如果省略了return语句,当函数中所有语句都执行完后,遇到最后的大括号即自动返回主函数;
3.由于函数没有返回结果,函数调用不可能出现在表达式中,通常用独立的调用语句方式,如:pyramid(n)。
2.复数运算:计算2个复数之和与之积。分别输入2个复数的实部与虚部,用函数实现计算2个复数之和与之积。
#include<stdio.h>
double result_real, result_imag;/*全局变量,用于存放函数结果*/
void complex_add(double real1,double imag1,double real2,double imag2) {
result_real = real1 + real2;
result_imag = imag1 + imag2;
}
void complex_prod(double real1,double imag1,double real2,double imag2) {
result_real = real1 * real2 - imag1 * imag2;
result_imag = real1 * imag2 + real2 * imag1;
}
int main() {
double real1, real2, imag1, imag2;
printf("enter 1st complex number:");
scanf("%lf%lf", &real1, &imag1);
printf("enter 2nd complex number:");
scanf("%lf%lf", &real2, &imag2);
complex_add(real1, imag1, real2, imag2);
printf("addition of complex is %lf+%lfi\n", result_real, result_imag);
complex_prod(real1, imag1, real2, imag2);
printf("product of complex is %lf+%lfi\n", result_real, result_imag);
return 0;
}
注:1.局部变量是定义在函数内部的变量,它的有效作用范围局限于所在的函数内部,可以避免各个函数间的相互干扰。形参是局部变量;
2.除了作用于函数的局部变量外,C语言还允许定义作用于复合语句中的局部变量,其有效使用范围被局限于复合语句内,一般用作小范围内的临时变量;
3.局部变量一般定义在函数或复合语句的开始处;
4.当函数局部变量与复合语句的局部变量同名时,以复合语句为准;
5.全局变量定义在函数外而不属于任何函数,作用范围是从定义开始到程序所在文件结束,对作用范围内所有的函数都起作用,多用于多函数间的全局数据表示;
6.全局变量和局部变量作用范围不同,允许同名;
7.一般全局变量定义在程序的最前面,即第一个函数的前面
3.用函数实现财务现金记账:先输入操作类型(1收入,2支出,0结束),再输入操作金额,计算现金剩余额,经多次操作直到输入操作类型为0时结束。
#include<stdio.h>
double cash; /*定义全局变量,保存现金余额*/
void income(double number) {
cash = cash + number; /*改变全局变量cash*/
}
void expend(double number) {
cash = cash - number; /*改变全局变量cash*/
}
int main(void) {
int choice;
double value;
cash = 0;
printf("give your choice:0--end,1--income,2--expend:");
scanf("%d", &choice);
while (choice != 0) {
if (choice == 1 || choice == 2) {
printf("enter cash value:");
scanf("%lf", &value);
if (choice == 1) {
income(value);
}
else {
expend(value);
}
printf("current cash:%lf\n", cash);
}
printf("enter your choice:0--end,1--income,2--expend:");
scanf("%d", &choice);
}
return 0;
}
4.(静态局部变量应用)输入正整数n,输出1!~ n!的值。要求定义并调用含静态变量的函数fact_s(n)进行计算n!
#include<stdio.h>
double fact_S(int n) {
static double f = 1; /*定义静态变量,第一次赋值为1*/
f = f * n; /*上一次调用时的值再乘n*/
return(f);
}
int main() {
int n;
printf("enter a n:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("%d!=%d\n", i, fact_S(i));
}
return 0;
}
注:1.静态局部变量不会像普通局部变量那样因为函数调用结束而被系统回收,它的生存周期会持续到程序结束。由于存储单元被保留,一旦含有静态局部变量的函数被再次调用,则静态局部变量会被重新激活,上一次函数调用后的值仍然被保留着,可供本次调用继续使用;
2.静态变量赋初值只在函数第一次调用时起作用,若没有赋初值,系统将自动赋初值0。