练习6-1
/*---返回两个int型整数中较小一数的值---*/
#include <stdio.h>
int min2(int a, int b){
if (a > b)
return b;
else
return a;
}
int main(void)
{
int a, b;
scanf("%d %d",&a, &b);
printf("最小值为:%d", min2(a, b));
return 0;
}
练习6-2
/*---创建一个函数,返回三个int型整数中的最小值。---*/
#include <stdio.h>
int min3(int a, int b, int c){
int min;
min = a;
if(b < min)
min = b;
if(c < min)
min = c;
return min;
}
int main (void)
{
int a, b, c;
scanf("%d%d%d",&a, &b, &c);
printf("三个数中的最小值为:%d", min3(a, b, c));
return 0;
}
练习6-3
/*---创建一个函数,返回int型整数的立方。---*/
#include <stdio.h>
int cube(int x){
return x*x*x;
}
int main(void)
{
int a;
scanf("%d",&a);
printf("%d的立方为:%d",a,cube(a));
return 0;
}
练习6-4
/*---使用sqr函数创建另一个函数,返回Int型整数的四次幂。---*/
#include <stdio.h>
int sqr(int a){
return a*a;
}
int pow4(int x){
return sqr(x)*sqr(x);
}
int main(void)
{
int a;
scanf("%d",&a);
printf("%d的四次幂为:%d", a, pow4(a));
return 0;
}
练习6-5
/*--创建一个函数,返回1到n之间所有整数的和。---*/
#include <stdio.h>
int sumup(int n){
int sum=0;
while (n > 0){
sum+=n;
n--;
}
return sum;
}
int main(void)
{
int a;
scanf("%d",&a);
printf("1到%d之间所有整数的和:%d",a,sumup(a));
return 0;
}
练习6-6
/*---创建一个函数,连续发出n次响铃。---*/
#include <stdio.h>
void alert (int n){
while (n-- > 0){
puts("\a");
}
}
int main(void)
{
int n;
scanf("%d",&n);
alert(n);
return 0;
}
练习6-7
/*---创建一个函数,在屏幕上显示出“你好。”并换行。---*/
#include <stdio.h>
void hello(void){
printf("你好。\n");
}
int main(void)
{
hello();
return 0;
}
练习6-8
/*---创建一个函数,返回元素个数为n的int型数组v中的最小值。---*/
#include <stdio.h>
int min_of(const int v[], int n){
int min = v[0];
while(n-- > 0){
if(v[n] < min)
min = v[n];
}
return min;
}
int main(void)
{
int n, v[n], i;
printf("请输入数组的元素个数:");
scanf("%d",&n);
printf("请输入数组各元素的值。");
for(i = 0; i < n; i++){
scanf("%d",&v[i]);
}
printf("数组中最小元素的值为%d",min_of(v,n));
return 0;
}
练习6-9
/*---创建一个函数,对元素个数为n的int型数组v进行倒序排列。---*/
#include <stdio.h>
void rev_intary(int v[], int n){
int temp, i;
for(i = 0;i < n/2; i++){
temp = v[i];
v[i] = v[n-i-1];
v[n-i-1] = temp;
}
}
int main(void)
{
int n, v[n], i;
printf("请输入数组的元素个数:");
scanf("%d",&n);
printf("请输入数组各元素的值。");
for(i = 0; i < n; i++){
scanf("%d",&v[i]);
}
rev_intary(v, n);
puts("输入数组各元素的值。");
for(i = 0; i < n; i++){
printf("%d ",v[i]);
}
return 0;
}
练习6-10
/*---创建一个函数,对元素个数为n的int型数组v2进行倒序排列,并将其结果保存在
数组v1中。---*/
#include <stdio.h>
void intary_rcpy (int v1[], const int v2[], int n){
int temp, i;
temp = n - 1;
for(i = 0; i < n; i++){
v1[temp--] = v2[i];
}
}
int main(void)
{
int n, v1[n], v2[n], i;
printf("请输入数组的元素个数:");
scanf("%d",&n);
printf("请输入数组各元素的值。");
for(i = 0; i < n; i++){
scanf("%d",&v2[i]);
}
intary_rcpy(v1,v2,n);
for(i = 0; i < n; i++){
printf("%d ",v1[i]);
}
return 0;
}
练习6-11
/*---创建一个函数search_idx,将和有n个元素的数组v中的key相等的所有
元素的下标存储在数组idx中,返回和key相等的元素的个数。---*/
#include <stdio.h>
#define MAX_SIZE 10
int search_idx(const int v[], int idx[], int key, int n){
int i, num = 0;
//key = v[n];
for (i = 0; i < n; i++){
if (v[i] == key)
idx[num++] = i;
}
return num;
}
int main(void)
{
int n, v[MAX_SIZE], idx[MAX_SIZE], key, i, num;
printf("请输入v数组的元素个数(< %d):", MAX_SIZE);
scanf("%d", &n);
printf("请输入v数组的元素:");
for(i = 0; i < n; i++){
//printf("请输入v数组的元素:");
scanf("%d",&v[i]);
}
printf("请输入要查找的key值: ");
scanf("%d", &key);
num = search_idx(v, idx, key, n);
printf("key为%d,它在v数组中的个数和下标为:%d\n", key, num);
for(i = 0; i < num; i++){
printf("%d ",idx[i]);
}
putchar(10);
return 0;
}
练习6-14
/*为double型数组的所有元素分配静态存储期,并确认它们都被初始化为0.0。*/
#include <stdio.h>
int main(void)
{
int a;
static double i[5];
for (a = 0; a < 5; a++)
printf("i[%d] = %d\n", a, i[a]);
return 0;
}
练习6-15
/*---显示被调用的次数,显示的是调用3次函数put_count的运行结果。---*/
#include <stdio.h>
void put_count(){
static int a;
a++;
printf("put_coubt:第%d次\n",a);
}
int main(void)
{
int a;
for(a = 0; a < 3; a++)
put_count();
return 0;
}
作用域:
赋给变量的标识符,它的名称都有一个通用的范围,称为作用域。
在程序块(复合语句)中声明的变量的名称,只在该程序块中通用,在其他区域都无效。
文件作用域:
在函数外声明的变量标识符,其名称从声明的位置开始,到该程序的结尾都是通用的。
函数原型声明:
明确记述了函数的返回类型,以及形参的类型和个数等的声明称为函数原型声明。
函数原型声明只声明了函数的返回值和形参等相关信息,并没有定义函数的实体。
头文件和文件包含指令:
包含库函数的函数原型声明的<stdio.h>称为头文件,而取得头文件内容的#include指令
称为文件包含指令。
函数的传递和const类型的修饰符:
在声明形参时加上被称为const 的类型修饰符就可以禁止在函数内修改接收到的数组内容。
线性查找:
从数组的开头出发顺次搜索,找出与目标相同的元素的一系列操作,称为线性查找或顺序查找。
哨兵查找法:
在数组末尾追加的数据称为哨兵,使用哨兵进行查找的方法称为哨兵查找法。
存储期:
自动存储期:在函数中不使用存储类说明符static而定义出的对象(变量),被赋予了自动存储期。
程序执行到对象声明的时候就创建除了相应的对象,而执行到包含该声明的程序块的结尾的时候,该对象就会消失。
静态存储期:在函数中使用static定义出来的对象,或者在函数外声明定义出来的对象都被赋予了静态存储期。
在程序开始执行的时候,具体地说是在main函数执行之前的准备阶段被创建出来,在程序结束的时候消失。