《明解C语言》笔记及课后习题答案 【第六章】

练习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函数执行之前的准备阶段被创建出来,在程序结束的时候消失。

                


           


版权声明:本文为VividColors原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。