8-1 求 x*x的函数
#include <stdio.h>
#include <math.h>
#include <time.h>
float cube(float x){
return (x*x*x);
}
int main(void) {
float x,y;
printf("Please input x:\r\n");
scanf("%f",&x);
y=cube(x);
printf("y = %5.2f,x is :%f\r\n",y,x);
return 0;
}
/*input
*/
/*
Please input x:
4
y = 64.00,x is :4.000000
*/
8-2 将一个给定的整数转换成相应的字符串后显示出来
#include <stdio.h>
void to_str(int n){
char string[10];
int i=0;
if(n<0){//负数先输出负号
putchar('-');
n=-n;
}
while(n>0){
string[i++]=n%10+'0';
n/=10;
}
while(--i>=0){
putchar(string[i]);
}
}
int main(void) {
printf("the converted string\r\n");
to_str(-178);
return 0;
}
/*input
*/
/*
the converted string
-178
*/
8-6 求1+1/2+1/3+1/4+....的值,并在主函数中调用它
#include <stdio.h>
double count(int n){
int i;
double sum = 0;
if(n<0){
printf("data is error\r\n");
return 0;
}
for(i = 1;i<=n;i++){
sum += 1.0/i;
}
return sum;
}
int main(){
int n;
double s;
printf("Please input the data:\r\n");
scanf("%d",&n);
s=count(n);
printf("s=%6.2lf",s);
return 0;
}
/*
Please input the data:
5
s= 2.28
*/
8-7 计算n元数组的平均值,并在主函数中调用
#include <stdio.h>
double aver(int a[],int n){
int i;
double ave = 0,sum = 0;
if(n<0){
printf("data is error\r\n");
return 0;
}
for(i = 0;i<n;i++){
sum += a[i];
}
ave = (sum*1.0/n);
return ave;
}
int main(){
int n=10,a[10],i;
double s;
printf("Please input the data:\r\n");
for(i = 0;i<10;i++)
scanf("%d",&a[i]);
s=aver(a,n);
printf("aver=%6.2lf",s);
return 0;
}
/*
Please input the data:
1 2 5 7 7 9 8 7 1 2
aver= 4.9
*/
8-8 交换3*4二维数组的i j两行
#include <stdio.h>
void exchange(int b[][4],int i,int j){
int t;
int k;
for(k=0;k<4;k++){
t = b[i][k];
b[i][k] = b[j][k];
b[j][k]=t;
}
}
int main(){
int i,j,a[3][4]={{1,1,1,1},{2,2,2,2},{3,3,3,3}};
exchange(a,1,2);
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d ",a[i][j]);
}
printf("\r\n");
}
return 0;
}
/*
1 1 1 1
3 3 3 3
2 2 2 2
*/
8-9 编写函数fun(char str[])判断字符串str是否是回文,是返回1否则返回0.回文:13531 “helleh”
#include <stdio.h>
int fun(char str[]){
int n,k,flag=1;
for(n=0;str[n]!='\0';n++);
printf("n = %d\r\n",n);
for(k=0;k<n/2;k++){
if(str[k]!=str[n-k-1]){
flag = 0;
break;
}
}
return flag;
}
int main(){
char s[80];
printf("Please input the strings:\r\n");
gets(s);
if(fun(s) == 1)
printf("%s是回文",s);
else
printf("%s不是回文",s);
return 0;
}
/*
Please input the strings:
1123211
n = 7
1123211是回文*/
8-10
数组作为函数参数时,不是值传递,而是地址传递。即把实参数组的起始地址传递给形参数组。两者共占一段内存,因此,形参数组元素值的变化就是实参数组中对应元素值的变化。数组名作为函数参数可以实现大量数据的传递。
#include <stdio.h>
int fun(char str[]){
int n,k,flag=1;
for(n=0;str[n]!='\0';n++);
printf("n = %d\r\n",n);
for(k=0;k<n/2;k++){
if(str[k]!=str[n-k-1]){
flag = 0;
break;
}
}
return flag;
}
int main(){
void swap();
int b[2]={10,2};
swap(b);
printf("b[0] = %d b[1] = %d",b[0],b[1]);
return 0;
}
void swap(int a[]){
int t;
t=a[0];
a[0]=a[1];
a[1]=t;
}
/*
b[0] = 2 b[1] = 10
*/
8-11 用选择法对数组中的10个元素进行按由小到大的排序。
#include <stdio.h>
void sort(int a[],int n){
int i,j,k,t;
for(i = 0;i<n-1;i++){
k = i;
for(j=i+1;j<n;j++){
if(a[j]<a[k]) k=j;
}
if(k!=i){
t = a[i];
a[i]=a[k];
a[k]=t;
}
}
}
int main(){
int a[10],i;
printf("Enter array\r\n");
for(i = 0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the result is\r\n");
for(i = 0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
/*
Enter array
12 454 78 55 66 22 44 55 23 45
the result is
12 22 23 44 45 55 55 66 78 454
*/
8-12 任何整数的立方都可以表示成n个相邻奇数之和,最大奇数为d=2m-1,而m=1+2+3+...n。编写程序,由键盘输入n,求n的立方是有哪些奇数之和
//函数嵌套
#include <stdio.h>
int add(int n){
int sum=0;
int i;
for(i=0;i<=n;i++)
sum+=i;
return sum;
}
int maxodd(int n){
int m,d;
m=add(n);
d=2*m-1;
return d;
}
int main(){
int i,n,d;
int flag=0;
printf("input the data\r\n");
scanf("%d",&n);
d=maxodd(n);
for(i = 0;i<n;i++){
printf("%5d",d);
d-=2;
flag++;
if(flag==5)
break;
}
return 0;
}
/*
input the data
4
19 17 15 13
*/
8-13 函数的递归调用
递归求n!
#include <stdio.h>
#include <stdlib.h>
long fact(int n)
{
long k;
if(n<0){
printf("data error\r\n");
exit(0);
}
else if(n==0||n==1) return 1;
else return (n*fact(n-1));
}
int main(){
int n;
long f;
scanf("%d",&n);
f=fact(n);
printf("the ret is %d!= %ld\r\n",n,f);
return 0;
}
/*
5
the ret is 5!= 120
*/
8-14 递归法将整数n 转换成字符串,n的位数是任意的
#include <stdio.h>
#include <stdlib.h>
void tranvers(int n)
{
if(n/10!=0)
tranvers(n/10);
printf("%c",n%10+'0');
}
int main(){
int n;
printf("please input the number\r\n");
scanf("%d",&n);
if(n<10){
printf("-");
n=-n;
}
tranvers(n);
return 0;
}
/*
please input the number
-79895
-79895
*/
8-15 分析程序运行结果
#include <stdio.h>
#include <stdlib.h>
int main(){
int k=1,n=3;
n+=k;
k+=n;
{
char k='B';
printf("%d\r\n",k-'A');
}
printf("%d %d\r\n",n,k);
return 0;
}
/*
1
4 5
*/
8-16 求n元数组中最大值及其在数组中出现的次数
#include <stdio.h>
#include <stdlib.h>
int max,count;
void max_count(int a[],int n){
int i;
max=a[0];
count=1;
for(i=1;i<n;i++){
if(a[i]>max){
max=a[i];
count=1;
}
else if(a[i]==max)
count++;
}
}
int main(){
int a[10],n=10;
int i;
printf("please input the 10 data:\r\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max_count(a,n);
printf("max = %d ,count = %d\r\n",max,count);
return 0;
}
/*
please input the 10 data:
1 2 2 2 2 3 5 4 4 5
max = 5 ,count = 2
*/
8-18 利用宏定义计算圆的面积
#include <stdio.h>
#define PI 3.1415926
#define R 3.0
#define S PI*R*R
void main(){
printf("square is %6.2f.\r\n",S);
return 0;
}
/*
square is 28.27.
*/
8-19 使用带参数的宏定义
#include <stdio.h>
#define MAX(a,b) a>b?a:b
#define SQR(c) c*c
void main(){
int x=3,y=4;
x=MAX(x,y);
y=SQR(x);
printf("x = %d,y=%d.\r\n",x,y);
return 0;
}
/*
x = 4,y=16.
*/
8-20 文件包含
f1.c
/*文件 f1.c*/
int max(int a,int b){
return a>b?a:b;
}
f2.c
#include <stdio.h>
#include "f1.c"
void main(){
int x=3,y=4;
x=max(x,y);
printf("max = %d\r\n",x);
return 0;
}
/*
max = 4
*/
8-21 #if ....#endif
#include <stdio.h>
void main(){
float r=4.5,s;
#ifdef PI
s=PI*r*r;
#else
#define PI 3.14159
s=PI*r*r;
#endif
printf("s=%f",s);
return 0;
}
/*
s=63.61719
*/
8-22 函数应用举例
#include <stdio.h>
double count(int n){
double sum = 0;
int i;
for(i=1;i<=n;i++)
sum+=1.0/i;
return sum;
}
void main(){
double s;
s=count(50)+count(100)+count(150)+count(200);
printf("s=%8.2lf\r\n",s);
return 0;
}
/*
s= 21.16
*/
8-23 通过键盘键入一个正整数m,验证6 - n之间的所有偶数都可以分解为两个素数之和的形式。
#include <stdio.h>
#include <math.h>
int prime(int n){
int i,k;
k=sqrt(n);
for(i=2;i<=k;i++){
if(n%i==0)
return 0;
}
return 1;
}
void main(){
int a,b,n,k;
while(1){
printf("Please input a number > 6:\r\n");
scanf("%d",&n);
if(n>6){
break;
}
}
for(k=6;k<=n;k++){
for(a=3;a<=k/2;a+=2){//将偶数分解为两个素数之和
b=k-a;
if(prime(b)){
printf("%d = %d + %d\r\n",k,a,b);
}
}
}
return 0;
}
/*
Please input a number > 6:
22
6 = 3 + 3
8 = 3 + 5
10 = 3 + 7
10 = 5 + 5
12 = 5 + 7
14 = 3 + 11
14 = 7 + 7
16 = 3 + 13
16 = 5 + 11
18 = 5 + 13
18 = 7 + 11
20 = 3 + 17
20 = 7 + 13
20 = 9 + 11
22 = 3 + 19
22 = 5 + 17
22 = 9 + 13
22 = 11 + 11
*/
第二层循环主要寻找a、b两个素数。除了2以外,其他素数都是奇数,所以a b 始终取奇数
8-24 计算m中取n的组合数的程序,公式如下:
#include <stdio.h>
#include <math.h>
//调试未通过
long function1(long m,long n)
//该函数用于计算m和n的组合数
{
long a,c = 100.0;
#if 1
a=function2(m);
c=function2(n);
c=a/c;
a=function2(m-n);
c=c/a;
#endif
return c;
}
long function2(long n)
//该函数用于整数的一个阶乘
{
long k=1;
int i;
for(i=0;i<=(int)n;i++)
k=k*i;
return k;
}
int main(){
long m,c,n;
printf("Please input m and n\r\n");
scanf("%ld%ld",&m,&n);
c=function1(m,n);
printf("C(%ld,%ld)=%ld\n",m,n,c);
return 0;
}
/*
*/
8-25 输入10个数,显示出其中的最大值和最小值
#include <stdio.h>
#include <math.h>
int max,min;
void search(int a[],int n){
int i;
max=min=a[0];
for(i=1;i<n;i++){
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
}
int main(){
int a[10],i;
for(i = 0;i<10;i++)
scanf("%d",&a[i]);
search(a,10);
printf("max=%d,min=%d\r\n",max,min);
return 0;
}
/*
12 45 656 12 32 45 77 52 2 99
max=656,min=2
*/
/*
*/
8-26 综合应用程序
#include <stdio.h>
#include <math.h>
double Juxing_mianji(){
int a,b;
printf("请输入长和宽:\r\n");
scanf("%d%d",&a,&b);
return (a*b);
}
//计算圆的面积
double Yuan_mianji(){
int r;
printf("请输入圆的半径:\r\n");
scanf("%d",&r);
return (3.1415926*r*r);
}
//计算三角形的面积
double Sanjiaoxing_mianji(){
int a,b;
printf("请输入三角形的底边、高:\r\n");
scanf("%d%d",&a,&b);
return ((a*b)/2.0);
}
int main(){
int choice;
do{
printf(" ===============功能选项=============\r\n");
printf(" ===============1 计算矩形面积\r\n");
printf(" ===============2 计算圆的面积\r\n");
printf(" ===============3 计算三角形面积\r\n");
printf(" ===============0 exit...\r\n");
printf("请选择\r\n");
scanf("%d",&choice);
switch(choice){
case 1:
printf("矩形面积为:%.2f\r\n",Juxing_mianji());
break;
case 2:
printf("圆面积为:%.2f\r\n",Yuan_mianji());
break;
case 3:
printf("三角形面积为:%.2f\r\n",Sanjiaoxing_mianji());
break;
case 0:
break;
default:
printf("输入0-3的非法数字,请重新输入\r\n");
break;
}
}while(0!=choice);
return 0;
}
/*
===============功能选项=============
===============1 计算矩形面积
===============2 计算圆的面积
===============3 计算三角形面积
===============0 exit...
请选择
1
请输入长和宽:
12 24
矩形面积为:288.00
===============功能选项=============
===============1 计算矩形面积
===============2 计算圆的面积
===============3 计算三角形面积
===============0 exit...
请选择
3
请输入三角形的底边、高:
12 2
三角形面积为:12.00
*/
8-27 猜字游戏
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#define MAX_NUMBER 100
#define MIN_NUMBER 1
#define MAX_TIMES 7
//返回一个随机数
int makeNumber(){
int number;
number = (rand()%(MAX_NUMBER - MIN_NUMBER))+MIN_NUMBER;
return number;
}
//键盘输入猜想数字,进行比较,提示大小、错误,最多7
void guessNumber(int number){
int guess;
int times=0;
assert(number>=MIN_NUMBER && number<=MAX_NUMBER);
do{
times++;
printf("round is %d\r\n",times);
scanf("%d",&guess);
if(guess>number){
printf("wrong!too high.\r\n");
}
if(guess<number){
printf("wrong!too low.\r\n");
}
}while(guess!=number && times<MAX_TIMES);
if(guess == number)
printf("Congratulation.you are right.");
else
printf("Mission failed at %d attempts.",MAX_TIMES);
}
int main(){
int number;
int count;
srand(time(NULL));
do{
number=makeNumber();
guessNumber(number);
printf("Continue?Y/N:\r\n");
count=getchar();
while(getchar()!='\n'){
;
}
}while(count!='N' && count!='n');
return 0;
}