一级目录
二级目录
三级目录
第四章
第五章 数组
1. 使用for 循环输入10 个整数存入一维数组a中,统计奇数和偶数的个数。
# include <stdio.h>
int main ( )
{
int i;
int a[ 10 ] ;
int count1 = 0 , count2 = 0 ;
for ( i = 0 ; i < 10 ; i++ )
{
scanf ( "%d" , & a[ i] ) ;
if ( a[ i] % 2 == 0 )
{
count1++ ;
}
else
count2++ ;
}
printf ( "奇数有%d个\n偶数有%d个" , count2, count1) ;
return 0 ;
}
2. 使用for 循环输入10 个整数存入一维数组a中,找出其中的最大数及其下标位置、最小数及其下标位置。若存在相同的则报告首次出现的最大数或最小数。
# include <stdio.h>
int main ( )
{
int a[ 10 ] ;
int i;
int max, min, maxr, minc;
for ( i = 0 ; i < 10 ; i++ )
{
scanf ( "%d" , & a[ i] ) ;
}
max = a[ 0 ] ;
min = a[ 0 ] ;
maxr = 0 ;
minc = 0 ;
for ( i = 0 ; i < 10 ; i++ )
{
if ( max < a[ i] )
{
max = a[ i] ;
maxr = i;
}
if ( min > a[ i] )
{
min = a[ i] ;
minc = i;
}
}
printf ( "最大数=%d 下标=%d\n最小数=%d 下标=%d" , max, maxr, min, minc) ;
return 0 ;
}
4. 使用for 循环输入10 个整数存入一维数组a中,查找指定数是否存在(输出“存在”或“不存在”)。
# include <stdio.h>
int main ( )
{
int i;
int a[ 10 ] ;
int n;
for ( i = 0 ; i < 10 ; i++ )
{
scanf ( "%d" , & a[ i] ) ;
}
scanf ( "%d" , & n) ;
for ( i = 0 ; i < 10 ; i++ )
{
if ( n == a[ i] )
{
printf ( "存在" ) ;
return 0 ;
}
}
printf ( "不存在" ) ;
return 0 ;
}
5. 使用for 循环实现: 将裴波那契数列的前12 项存入一维数组a中并以4 个一行的形式输出,每个数据占4 个位置且右对齐。
# include <stdio.h>
int main ( )
{
int a[ 12 ] = { 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 } ;
int i;
int count = 0 ;
for ( i = 0 ; i < 12 ; i++ )
{
printf ( "%4d" , a[ i] ) ;
count++ ;
if ( count % 4 == 0 )
printf ( "\n" ) ;
}
return 0 ;
}
6. 使用for 循环实现: 输入10 个整数存入一维数组a中,将数组中的数据循环左移一个位置后输出,每个数据后跟一个空格。
# include <stdio.h>
int main ( )
{
int a[ 10 ] ;
int i;
int tmp;
for ( i = 0 ; i < 10 ; i++ )
{
scanf ( "%d" , & a[ i] ) ;
}
tmp = a[ 0 ] ;
for ( i = 1 ; i < 10 ; i++ )
{
a[ i - 1 ] = a[ i] ;
}
a[ 9 ] = tmp;
for ( i = 0 ; i < 10 ; i++ )
{
printf ( "%d " , a[ i] ) ;
}
return 0 ;
}
7. 使用for 循环实现: 输入10 个整数存入一维数组a中,将数组中的数据循环右移一个位置后输出(每个数据后跟一个空格)。
# include <stdio.h>
int main ( )
{
int a[ 10 ] ;
int i;
int tmp;
for ( i = 0 ; i < 10 ; i++ )
{
scanf ( "%d" , & a[ i] ) ;
}
tmp = a[ 9 ] ;
for ( i = 9 ; i > 0 ; i-- )
{
a[ i] = a[ i - 1 ] ;
}
a[ 0 ] = tmp;
for ( i = 0 ; i < 10 ; i++ )
{
printf ( "%d " , a[ i] ) ;
}
return 0 ;
}
8. 使用for 循环实现: 输入10 个成绩模拟10 位选手的最后得分,输出各选手的名次(每个数据后跟一个空格)。
# include <stdio.h>
int main ( )
{
int a[ 10 ] ;
int b[ 10 ] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 } ;
int i, j;
for ( i = 0 ; i < 10 ; i++ )
{
scanf ( "%d" , & a[ i] ) ;
}
for ( i = 0 ; i < 10 ; i++ )
{
for ( j = 0 ; j < 10 ; j++ )
{
if ( a[ i] < a[ j] )
b[ i] ++ ;
}
}
for ( i = 0 ; i < 10 ; i++ )
{
printf ( "%d " , b[ i] ) ;
}
return 0 ;
}
9. 使用for 循环实现: 输入10 个整数存入一维数组a中,将数组中的元素升序排序后输出( 每个数据后跟一个空格) 。
# include <stdio.h>
int main ( )
{
int a[ 10 ] ;
int i, j;
int tmp;
for ( i = 0 ; i < 10 ; i++ )
{
scanf ( "%d" , & a[ i] ) ;
}
for ( i = 0 ; i < 9 ; i++ )
{
for ( j = 0 ; j < 9 - i; j++ )
{
if ( a[ j] > a[ j + 1 ] )
{
tmp = a[ j] ;
a[ j] = a[ j + 1 ] ;
a[ j + 1 ] = tmp;
}
}
}
for ( i = 0 ; i < 10 ; i++ )
{
printf ( "%d " , a[ i] ) ;
}
return 0 ;
}
```c
```c
# include <stdio.h>
int main ( )
{
int i, j;
int a[ 10 ] ;
for ( i = 0 ; i < 10 ; i++ )
{
scanf ( "%d" , & a[ i] ) ;
}
for ( i = 0 ; i < 10 ; i++ )
{
for ( j = 0 ; j < 9 ; j++ )
{
if ( a[ j] > a[ j + 1 ] )
{
int tmp = a[ j + 1 ] ;
a[ j + 1 ] = a[ j] ;
a[ j] = tmp;
}
}
}
for ( i = 0 ; i < 10 ; i++ )
{
printf ( "%d " , a[ i] ) ;
}
return 0 ;
}
10. 使用for 循环实现: 输入16 个整数组成4 * 4 的矩阵,输出矩阵的所有元素之和。
# include <stdio.h>
int main ( )
{
int a[ 4 ] [ 4 ] ;
int sum = 0 ;
int i, j;
for ( i = 0 ; i < 4 ; i++ )
{
for ( j = 0 ; j < 4 ; j++ )
{
scanf ( "%d" , & a[ i] [ j] ) ;
}
}
for ( i = 0 ; i < 4 ; i++ )
{
for ( j = 0 ; j < 4 ; j++ )
{
sum += a[ i] [ j] ;
}
}
printf ( "%d" , sum) ;
return 0 ;
}
15. 相信看了16 题你应该就有思路了
16. 使用for 循环实现: 输入16 个整数组成4 * 4 的矩阵,输出最小值及其所在位置。若有多个最小值则报告首次出现的位置。
# include <stdio.h>
int main ( )
{
int a[ 4 ] [ 4 ] ;
int i, j;
int min, row, col;
for ( i = 0 ; i < 4 ; i++ )
{
for ( j = 0 ; j < 4 ; j++ )
{
scanf ( "%d" , & a[ i] [ j] ) ;
}
}
min = a[ 0 ] [ 0 ] ;
row = col = 0 ;
for ( i = 0 ; i < 4 ; i++ )
{
for ( j = 0 ; j < 4 ; j++ )
{
if ( min > a[ i] [ j] )
{
min = a[ i] [ j] ;
row = i;
col = j;
}
}
}
printf ( "第%d行第%d列\n%d" , row, col, min) ;
return 0 ;
}
21.使用函数scanf("%s",字符地址)输入三个字符串分别存入s1、s2和s3中,然后使用strcat函数将三个字符串拼接在一起存入s4中并使用printf("%s",字符地址)输出。
# include <stdio.h>
# include <string.h>
int main ( )
{
char s1[ 20 ] ;
char s2[ 20 ] ;
char s3[ 20 ] ;
char s4[ 60 ] = "" ;
scanf ( "%s" , s1) ;
scanf ( "%s" , s2) ;
scanf ( "%s" , s3) ;
strcat ( s4, s1) ;
strcat ( s4, s2) ;
strcat ( s4, s3) ;
printf ( "%s" , s4) ;
return 0 ;
}
22.使用函数scanf("%s",字符地址)输入一个长度小于100的字符串,将所有的大写字母转换为小写字母,小写字母转换为大写字母,其他字符不变,最后使用printf("%s",字符地址)输出。
# include <stdio.h>
# include <string.h>
int main ( )
{
char s[ 100 ] ;
int i;
scanf ( "%s" , s) ;
for ( i = 0 ; i < strlen ( s) ; i++ )
{
if ( 'A' <= s[ i] && s[ i] <= 'Z' )
s[ i] += 32 ;
else if ( 'a' <= s[ i] && s[ i] <= 'z' )
s[ i] -= 32 ;
}
printf ( "%s" , s) ;
return 0 ;
}
23.使用函数scanf("%s",字符地址)输入一个长度小于100的字符串,统计其中大写字母、小写字母、数字以及其他字符的个数。
# include <stdio.h>
# include <string.h>
int main ( )
{
char s[ 100 ] ;
int count_C = 0 ;
int count_L = 0 ;
int count_N = 0 ;
int count_O = 0 ;
int i;
scanf ( "%s" , s) ;
for ( i = 0 ; i < strlen ( s) ; i++ )
{
if ( 'A' <= s[ i] && s[ i] <= 'Z' )
count_C++ ;
else if ( 'a' <= s[ i] && s[ i] <= 'z' )
count_L++ ;
else if ( '0' <= s[ i] && s[ i] <= '9' )
count_N++ ;
else
count_O++ ;
}
printf ( "大写%d个\n" , count_C) ;
printf ( "小写%d个\n" , count_L) ;
printf ( "数字%d个\n" , count_N) ;
printf ( "其他%d个" , count_O) ;
return 0 ;
}
24.使用函数gets输入一个长度小于100的字符串,统计其中英文字母、数字以及其他字符的个数。
# include <stdio.h>
# include <string.h>
int main ( )
{
char s[ 100 ] ;
int count_A = 0 ;
int count_N = 0 ;
int count_O = 0 ;
int i;
gets ( s) ;
for ( i = 0 ; i < strlen ( s) ; i++ )
{
if ( ( 'A' <= s[ i] && s[ i] <= 'Z' ) || ( 'a' <= s[ i] && s[ i] <= 'z' ) )
count_A++ ;
else if ( '0' <= s[ i] && s[ i] <= '9' )
count_N++ ;
else
count_O++ ;
}
printf ( "字母%d个\n" , count_A) ;
printf ( "数字%d个\n" , count_N) ;
printf ( "其他%d个" , count_O) ;
return 0 ;
}
25.使用函数gets输入一个长度小于100的字符串,将所有的大写字母转换为小写字母,小写字母转换为大写字母,其他字符不变,最后使用puts输出字符串。
# include <stdio.h>
# include <string.h>
int main ( )
{
char s[ 100 ] ;
int i;
gets ( s) ;
for ( i = 0 ; i < strlen ( s) ; i++ )
{
if ( 'A' <= s[ i] && s[ i] <= 'Z' )
s[ i] += 32 ;
else if ( 'a' <= s[ i] && s[ i] <= 'z' )
s[ i] -= 32 ;
}
puts ( s) ;
return 0 ;
}
26. 使用函数gets输入一个长度小于100 的字符串,统计其中每个字母(不区分大小写)出现的次数。
# include <stdio.h>
# include <string.h>
int main ( )
{
int a[ 26 ] = { 0 } ;
char s[ 100 ] ;
int i = 0 ;
int j = 0 ;
gets ( s) ;
for ( j = 0 ; j < strlen ( s) ; j++ )
{
if ( s[ j] >= 'a' && s[ j] <= 'z' )
s[ j] -= 32 ;
a[ s[ j] - 65 ] ++ ;
}
for ( i = 0 ; i < 26 ; i++ )
{
if ( a[ i] > 0 )
printf ( "%c:%d\n" , i + 65 , a[ i] ) ;
}
return 0 ;
}
27. 使用函数gets输入一个长度小于100 的字符串,统计其中每个数字出现的次数。
# include <stdio.h>
# include <string.h>
int main ( )
{
char s[ 100 ] ;
int a[ 10 ] = { 0 } ;
int i;
gets ( s) ;
for ( i = 0 ; i < strlen ( s) ; i++ )
{
a[ s[ i] - '0' ] ++ ;
}
for ( i = 0 ; i < 10 ; i++ )
{
if ( a[ i] > 0 )
printf ( "%d:%d\n" , i, a[ i] ) ;
}
return 0 ;
}
第六章 其他数据类型
1.定义一个结构体类型STUDENT,包含5个成员:学号、姓名、数学、英语和计算机(学号和姓名定义为字符数组类型,三门成绩定义为整型)。
定义一个结构体类型变量存放一位学生的信息,输入学生的学号、姓名、数学、英语和计算机成绩,输出其平均分(保留两位小数)。
#include<stdio.h>
struct STUDENT
{
char num[20];
char name[20];
int Mat;
int Eng;
int Com;
};
int main()
{
struct STUDENT st;//定义结构体数组
float ave = 0;
scanf("%s%s%d%d%d",st.num,st.name,&st.Mat,&st.Eng,&st.Com);
ave = (st.Mat + st.Eng + st.Com) / 3.0;
printf("%s%s的平均分是%.2f",st.num,st.name,ave);
return 0;
}
2.定义一个结构体类型STUDENT,包含5个成员:学号、姓名、数学、英语和计算机(学号和姓名定义为字符数组类型,三门成绩定义为整型)。
定义一个结构体类型数组存放3位学生的信息,依次输入他们的学号、姓名、数学、英语和计算机成绩,以列表形式输出3位学生的学号、姓名、数学、英语、计算机、平均成绩(保留两位小数)。
#include<stdio.h>
struct STUDENT
{
char num[20];
char name[20];
int Mat;
int Eng;
int Com;
};
int main()
{
struct STUDENT st[3];//定义结构体数组
int i;
float ave = 0;
for (i = 0; i < 3; i++)
{
scanf("%s%s%d%d%d",st[i].num,st[i].name,&st[i].Mat,&st[i].Eng,&st[i].Com);
}
for (i = 0; i < 3; i++)
{
ave = (st[i].Mat + st[i].Eng + st[i].Com) / 3.0;
printf("%s\t%s\t%d\t%d\t%d\t%.2f\n",st[i].num,st[i].name,st[i].Mat,st[i].Eng,st[i].Com,ave);
}
return 0;
}
3.定义一个枚举类型WEEKDAY,用0~6代表Sunday(星期日)~Saturday(星期六)。编写程序,从键盘输入0~6的任意一个整数,输出对应的星期几。
#include<stdio.h>
enum WEEKDAY//定义枚举类型 WEEKDAY
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thurday,
Friday,
Saturday
};
int main()
{
int input;
scanf("%d",&input);
switch(input)
{
case Sunday:
{
printf("Sunday");
break;
}
case Monday:
{
printf("Monday");
break;
}
case Tuesday:
{
printf("Tuesday");
break;
}
case Wednesday:
{
printf("Wednesday");
break;
}
case Thurday:
{
printf("Thurday");
break;
}
case Friday:
{
printf("Friday");
break;
}
case Saturday:
{
printf("Saturday");
break;
}
}
return 0;
}
第七章 函数
1.
(1)编写函数Add,返回整数x与y的和。
(2)编写函数Sub,返回整数x与y的差。
(3)编写函数main,输入整数a和b的值,输出它们的和与差。
#include<stdio.h>
int Add(int x,int y)
{
return x + y;
}
int Sub(int x,int y)
{
return x - y;
}
int main()
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d+%d=%d\n",x,y,Add(x,y));
printf("%d-%d=%d",x,y,Sub(x,y));
return 0;
}
2.
(1)编写函数Max,返回整数x和y中较大值。
(2)编写函数Min,返回整数x和y中较小值。
(3)编写函数main,输入整数a和b的值,输出它们的最大值和最小值。
#include<stdio.h>
int Max(int x,int y)
{
return x > y ? x : y;//三木操作符实现比较大小
}
int Min(int x,int y)
{
return x < y ? x : y;
}
int main()
{
int x,y;
scanf("%d%d",&x,&y);
printf("最大值=%d\n",Max(x,y));
printf("最小值=%d",Min(x,y));
return 0;
}
3.
(1)编写函数Flower,判断整数N是否为水仙花数。若是水仙花数则返回1,否则返回0。
(2)编写函数main,找出100至999之间的水仙花数(一个一行)。
#include<stdio.h>
int Flower(int n)
{
int a,b,c,tmp;
tmp = n;
a = n % 10;
n /= 10;
b = n % 10;
n /= 10;
c = n % 10;
//上面分别找出个位十位百位数字
if (tmp == a * a * a + b * b * b + c * c * c)
return 1;
return 0;
}
int main()
{
int i;
for (i = 100; i < 1000; i++)
{
if (Flower(i) == 1)
printf("%d\n",i);
}
return 0;
}
4.
(1)编写函数Reverse,判断整数N是否为回文数。若是回文数则返回1,否则返回0。
(2)编写函数main,输出10~999之间的回文数,每个数据后跟一个空格且5个一行。
#include<stdio.h>
int Reverse (int n)
{
int sum = 0;
int tmp = n;
while(tmp)
{
sum = sum * 10 + tmp % 10;//逆序数字
tmp /= 10;
}
if (sum == n)
return 1;
return 0;
}
int main()
{
int i;
int count = 0;
for (i = 10; i < 1000; i++)
{
if (Reverse(i) == 1 )
{
count++;
printf("%d ",i);
if (count % 5 == 0)//判断5个一行,一定要放在第一个if里面,不然会出错
printf("\n");
}
}
return 0;
}
5.
(1)编写函数Perfect,判断整数N是否为完全数。若是完全数则返回‘Y’,否则返回‘N’。
(2)编写函数main,找出100以内的完全数,输出时每个数据后跟一个空格。
#include<stdio.h>
char Perfect(int n)//这边注意返回值类型是char类型
{
int sum = 0;
int i;
for (i = n - 1; i >= 1; --i)
{
if (n % i == 0)//找出每个n中(除自身以外)的因数
sum += i;
}
if (sum == n)
return 'Y';
return 'N';//没找到
}
int main()
{
int i;
for (i = 1; i <= 100; i++)
{
if (Perfect(i) == 'Y')
{
printf("%d ",i);
}
}
return 0;
}
6.
(1)编写函数Fact,求n的阶乘。
(2)编写函数main,输入两个整数a和b,输出它们的阶乘差,即a!-b!。
#include<stdio.h>
//法一:循环
int Fact(int n)
{
int i;
int mul = 1;
for (i = 2; i <= n; i++)
{
mul *= i;//实现阶乘
}
return mul;
}
//法二:递归实现
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",Fact(a) - Fact(b));
return 0;
}
7.1 )编写函数Fact,求n的阶乘。
(2 )编写函数Comb,求组合数C ( m, n) 。
(3 )编写函数main,输入m和n,输出组合数C ( m, n) 的值。
# include <stdio.h>
int Fact ( int n)
{
int i, mul = 1 ;
for ( i = 2 ; i <= n; i++ )
{
mul *= i;
}
return mul;
}
int Comb ( int a, int b, int c)
{
return a / ( b * c) ;
}
int main ( )
{
int m, n;
scanf ( "%d%d" , & n, & m) ;
printf ( "%d" , Comb ( Fact ( n) , Fact ( m) , Fact ( n - m) ) ) ;
return 0 ;
}
8.
(1 )编写函数Fun,返回下图公式的值(其中m为整数)。
(2 )编写函数main,输入整数m,输出下图公式的值(保留两位小数)。
# include <stdio.h>
float Fun ( int a)
{
int i;
int flag = - 1 ;
float sum = 1.0 ;
for ( i = 2 ; i <= a; i++ )
{
sum += flag * ( 1.0 / ( i * i) ) ;
}
return sum;
}
int main ( )
{
int m, n;
scanf ( "%d" , & m) ;
printf ( "%.2f" , Fun ( m) ) ;
return 0 ;
}
9.
(1 )编写函数Fun,返回1 + 2 + 3 + . . . + n 的值(其中n为整数)
(2 )编写函数main,输出下图公式的值(保留两位小数)。
# include <stdio.h>
int Fun ( int a)
{
int i;
int sum = 1 ;
for ( i = 2 ; i <= a; i++ )
{
sum += i;
}
return sum;
}
int main ( )
{
int m;
float sum = 1.0 ;
int i;
for ( i = 2 ; i <= 100 ; i++ )
{
sum += 1.0 / Fun ( i) ;
}
printf ( "%.2f" , sum) ;
return 0 ;
}
10.
(1 )根据图中递归定义形式,编写递归函数Fun,求n的阶乘。
(2 )编写main函数实现:输入n,输出n的阶乘n!
# include <stdio.h>
int Fun ( int a)
{
if ( a < 2 )
return 1 ;
else
return a * Fun ( a - 1 ) ;
}
int main ( )
{
int m;
scanf ( "%d" , & m) ;
printf ( "%d" , Fun ( m) ) ;
return 0 ;
}
11.
1 )根据图中递归定义形式,编写递归函数Fun,求1 + 2 + 3 + . . . + n 的和。
(2 )编写main函数实现:输入n,输出1 + 2 + 3 + . . . + n的和。
# include <stdio.h>
int Fun ( int a)
{
if ( a == 1 )
return 1 ;
else
return a + Fun ( a - 1 ) ;
}
int main ( )
{
int m;
scanf ( "%d" , & m) ;
printf ( "%d" , Fun ( m) ) ;
return 0 ;
}
12.
(1 )编写函数IsPrime,判断整数N是否为素数;
(2 )编写函数IsAsc,判断一个两位整数N是否为升序数。
(3 )编写函数main,输出10 ~50 之间的素数、孪生素数、升序素数。孪生素数是指相差为2 的两个素数,如3 和5 、5 和7
# include <stdio.h>
int IsPrime ( int a)
{
int i;
for ( i = 2 ; i < a; i++ )
{
if ( a % i == 0 )
return 0 ;
}
return 1 ;
}
int IsAsc ( int a)
{
int x = a / 10 ;
int y = a % 10 ;
return x < y ? 1 : 0 ;
}
int main ( )
{
int i;
printf ( "素数:" ) ;
for ( i = 10 ; i <= 50 ; i++ )
{
if ( IsPrime ( i) )
printf ( "%d " , i) ;
}
printf ( "\n孪生素数:" ) ;
for ( i = 10 ; i <= 50 ; i++ )
{
if ( IsPrime ( i) && IsPrime ( i + 2 ) )
printf ( "%d和%d " , i, i + 2 ) ;
}
printf ( "\n升序素数:" ) ;
for ( i = 10 ; i <= 50 ; i++ )
{
if ( IsPrime ( i) && IsAsc ( i) )
printf ( "%d " , i) ;
}
return 0 ;
}
13.
练习一维数组作为函数参数:
( 1 ) 编写函数Input,实现输入n个整数存入一维数组a;
( 2 ) 编写函数Output,实现输出一维数组a的n个元素;
( 3 ) 编写函数GetMax,找出一维数组a的n个元素中的最大值;
( 4 ) 编写函数GetMin,找出一维数组a的n个元素中的最小值;
( 5 ) 编写函数Sort,实现对一维数组a的n个元素升序排列;
( 6 ) 编写主函数main(内容如下)调用上述函数,实现输入10 个整数,输出其中的最大值和最小值,并将10 个数升序排列输出。
int main ( )
{
int b[ N] ;
Input ( b) ;
printf ( "排序前:" ) ;
Output ( b) ;
printf ( "最大=%d\n" , GetMax ( b) ) ;
printf ( "最小=%d\n" , GetMin ( b) ) ;
Sort ( b) ;
printf ( "排序后:" ) ;
Output ( b) ;
}
# include <stdio.h>
# define N 10
void Input ( int * b)
{
int i;
for ( i = 0 ; i < N; i++ )
{
scanf ( "%d" , & b[ i] ) ;
}
}
void Output ( int * b)
{
int i;
for ( i = 0 ; i < N; i++ )
printf ( "%d " , b[ i] ) ;
printf ( "\n" ) ;
}
int GetMax ( int * b)
{
int Max = b[ 0 ] ;
int i;
for ( i = 1 ; i < N; i++ )
{
if ( Max < b[ i] )
Max = b[ i] ;
}
return Max;
}
int GetMin ( int * b)
{
int Min = b[ 0 ] ;
int i;
for ( i = 1 ; i < N; i++ )
{
if ( Min > b[ i] )
Min = b[ i] ;
}
return Min;
}
void Sort ( int * b)
{
int i, j;
for ( i = 0 ; i < N - 1 ; i++ )
{
for ( j = 0 ; j < N - 1 - i; j++ )
{
if ( b[ j] > b[ j + 1 ] )
{
int tmp = b[ j] ;
b[ j] = b[ j + 1 ] ;
b[ j + 1 ] = tmp;
}
}
}
}
int main ( )
{
int b[ N] ;
Input ( b) ;
printf ( "排序前:" ) ;
Output ( b) ;
printf ( "最大=%d\n" , GetMax ( b) ) ;
printf ( "最小=%d\n" , GetMin ( b) ) ;
Sort ( b) ;
printf ( "排序后:" ) ;
Output ( b) ;
return 0 ;
}
14.
(1 )编写函数PrintStar,输出高为n的等腰三角形。
(2 )编写main函数实现:调用PrintStar函数,输入n,输出高为n的等腰三角形。
# include <stdio.h>
void PrintStar ( int n)
{
int i, j;
for ( i = 0 ; i < n; i++ )
{
for ( j = 0 ; j < n - 1 - i; j++ )
printf ( " " ) ;
for ( j = 0 ; j < 2 * i + 1 ; j++ )
{
printf ( "*" ) ;
}
printf ( "\n" ) ;
}
}
int main ( )
{
int n;
scanf ( "%d" , & n) ;
PrintStar ( n) ;
return 0 ;
}
15.
(1 )根据图1 递归定义形式,编写递归函数Fun,求x的n次方。
(2 )编写main函数实现:输出图2 表达式的值。
# include <stdio.h>
int Fun ( int x, int n)
{
if ( n == 0 )
return 1 ;
else
return x * Fun ( x, n - 1 ) ;
}
int main ( )
{
int i;
int sum = 0 ;
for ( i = 1 ; i <= 5 ; i++ )
{
sum += Fun ( i, i + 1 ) ;
}
printf ( "%d" , sum) ;
return 0 ;
}
16.
(1 )编写函数IsPrime,判断整数n是否为素数;
(2 )验证“歌德巴郝猜想:任意一个大于等于4 的偶数可写成两个素数之和”。
# include <stdio.h>
int IsPrime ( int a)
{
int i;
for ( i = 2 ; i < a; i++ )
{
if ( a % i == 0 )
return 0 ;
}
return 1 ;
}
int main ( )
{
int n, i, j;
scanf ( "%d" , & n) ;
for ( i = 2 ; i <= n / 2 ; i++ )
{
for ( j = i; j <= n; j++ )
if ( IsPrime ( i) && IsPrime ( j) && i + j == n && n >= 4 && n % 2 == 0 )
printf ( "%d+%d=%d\n" , i, j, n) ;
}
return 0 ;
}
17.
(1 )编写函数IsPrime,判断整数n是否为素数;
(2 )验证“歌德巴郝猜想:任意一个大于等于7 的奇数可写成三个素数之和”。
# include <stdio.h>
int IsPrime ( int a)
{
int i;
for ( i = 2 ; i < a; i++ )
{
if ( a % i == 0 )
return 0 ;
}
return 1 ;
}
int main ( )
{
int n, i, j, k;
scanf ( "%d" , & n) ;
for ( i = 2 ; i <= n / 3 ; i++ )
{
for ( j = i; j <= n; j++ )
{
for ( k = j; k <= n ; k++ )
if ( IsPrime ( i) && IsPrime ( j) && IsPrime ( k) && n >= 7 && n % 2 == 1 && i + j + k == n)
printf ( "%d+%d+%d=%d\n" , i, j, k, n) ;
}
}
return 0 ;
}
18.
练习二维数组作为函数参数:
( 1 ) 编写函数Input,实现输入N* N个整数存入二维数组a;
( 2 ) 编写函数Output,实现以矩阵形式输出二维数组a;
( 3 ) 编写函数Change,实现对二维数组a的转置;
( 4 ) 编写主函数main(内容如下),调用上述函数,输入9 个整数存入3 * 3 矩阵,输出该矩阵的转置。
int main ( )
{
int a[ N] [ N] ;
Input ( a) ;
printf ( "转置前:\n" ) ;
Output ( a) ;
Change ( a) ;
printf ( "转置后:\n" ) ;
Output ( a) ;
}
# define N 3
# include <stdio.h>
void Input ( int a[ ] [ N] )
{
int i, j;
for ( i = 0 ; i < N; i++ )
{
for ( j = 0 ; j < N; j++ )
scanf ( "%d" , & a[ i] [ j] ) ;
}
}
void Output ( int a[ ] [ N] )
{
int i, j;
for ( i = 0 ; i < N; i++ )
{
for ( j = 0 ; j < N; j++ )
printf ( "%d " , a[ i] [ j] ) ;
printf ( "\n" ) ;
}
}
void Change ( int a[ ] [ N] )
{
int i, j;
for ( i = 0 ; i < N; i++ )
{
for ( j = i + 1 ; j < N; j++ )
{
int tmp = a[ i] [ j] ;
a[ i] [ j] = a[ j] [ i] ;
a[ j] [ i] = tmp;
}
}
}
int main ( )
{
int a[ N] [ N] ;
Input ( a) ;
printf ( "转置前:\n" ) ;
Output ( a) ;
Change ( a) ;
printf ( "转置后:\n" ) ;
Output ( a) ;
}
19.
使用指针参数编写函数Fun,实现求两个整数的最大公约数和最小公倍数。
编写main实现:输入两个整数,输出它们的最大公约数和最小公倍数。
# include <stdio.h>
void Fun ( int a, int b, int * m, int * n)
{
int x = a, y = b;
while ( * m = a % b)
{
a = b;
b = * m;
}
* m = b;
* n = x * y / ( * m) ;
}
int main ( )
{
int a, b;
int m, n;
scanf ( "%d%d" , & a, & b) ;
Fun ( a, b, & m, & n) ;
printf ( "最大公约数=%d\n最小公倍数=%d" , m, n) ;
return 0 ;
}
20.
使用指针参数编写函数Fun,实现求1 + 2 + 3 + . . . + n和1 * 2 * 3 * . . . * n。
编写main实现:输入整数n,输出1 + 2 + 3 + . . . + n和1 * 2 * 3 * . . . * n。
# include <stdio.h>
void Fun ( int n, int * x, int * y)
{
int i;
* x = 0 ;
* y = 1 ;
for ( i = 1 ; i <= n; i++ )
{
* x += i;
}
for ( i = 2 ; i <= n; i++ )
{
* y *= i;
}
}
int main ( )
{
int n;
int x, y;
scanf ( "%d" , & n) ;
Fun ( n, & x, & y) ;
printf ( "%d\n%d" , x, y) ;
return 0 ;
}
21.
(1 )编写函数Fact,求n的阶乘。
(2 )编写函数main,输入m,输出1 ! + 2 ! + 3 ! + . . . . + m! 的值。
# include <stdio.h>
int Fact ( int n)
{
int i;
int mul = 1 ;
for ( i = 2 ; i <= n; i++ )
{
mul *= i;
}
return mul;
}
int main ( )
{
int n, i, sum = 0 ;
scanf ( "%d" , & n) ;
for ( i = 1 ; i <= n; i++ )
{
sum += Fact ( i) ;
}
printf ( "%d" , sum) ;
return 0 ;
}