习 题练习 1 程序利用函数 sort( )对一组数按照从小到大顺序排序,请编写 sort( )函数。
#include "stdio.h"
void sort(int x[ ],int n)
{
}
void main( )
{ int a[10]={2,14,44,1,22,16,10,9,28,6};
int i;
sort(a,10);
for (i = 0 ; i < 10 ; i++)
printf("%d ",a[i]);
printf("\n");
}
void sort(int x[],int n)
{
int i,j;
int t;
for (i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(x[i]>x[j])
{ t = x[i]; x[i] = x[j]; x[j] = t;}
}
}
练习 2 程序利用函数 average( )求一组数去掉一个最大数和去掉一个最小数后的平均数,请编写 average( )
函数。
#define N 10
float average(float x[ ],int n)
{
}
void main( )
{float a[N]={2,14.5,44.7,1,22.2,16,10.6,9,28.3,6};
float aver;
aver = average(a,N);
printf("average = %f ",aver);
}
float average(float x[ ],int n)
{ float max,min,aver,sum;
int i;
sum = max = min = x[0];
for( i=1;i<n;i++)
{ sum += s[i];
if(max < x[i])
{ max = x[i] ; continue; }
if (min > x[i])
min = x[i];
}
aver = (sum - max - min) / (n-2);
return aver;
}
练习 3 程序利用函数 primecount( )求一组数中的质数个数,请编写 primecount( )函数。
#include "stdio.h"
#include "math.h"
int primecount(int x[ ],int n)
{
}
void main()
{
int a[10]={133,141,44,17,22,16,109,9,27,61};
int count;
count = primecount(a,10);
printf("Prime Count =%d\n",count);
}
int primecount(int x[ ],int n)
{ int count = 0;
int flag ; /*是否为质数标志,0:否; 1:是 */
int i,j,k;
for (i=0;i<n;i++)
{ k=sqrt(x[i]);
flag = 1;
for (j=2 ; j<=k; j++)
if (x[i] % j == 0) flag = 0;
if (flag == 1) count ++;
}
return count;
}
练习 4程序利用函数 primesum( )求一组数中所有质数的和,请编写 primesum( )函数。
#include "stdio.h"
#include "math.h"
int primesum(int x[ ],int n)
{
}
void main( )
{
int a[10]={13,7,44,17,22,16,109,9,27,61};
int sum;
sum = sumcount(a,10);
printf("Prime Sum =%d\n",sum);
}
int primesum(int x[],int n)
{ int sum = 0;
int flag ; /*是否为质数标志,0:否; 1:是 */
int i,j,k;
for (i=0;i<n;i++)
{ k=sqrt(x[i]);
flag = 1;
for (j=2 ; j<=k; j++)
if (x[i] % j == 0) flag = 0;
if (flag == 1) sum += x[i];
}
return sum;
}
练习 6程序利用函数 strcat(str1,str2)将 str1,str2两个字符串合并到 str1中,请编写 strcat( )函数。
#include "stdio.h"
void strcat(char * str1,char * str2)
{
}
void main( )
{
char *str1 = "Welcome ";
char *str2 = "Everyone!";
strcat(str1,str2);
puts(str1);
}
void strcat(char * str1,char * str2)
{
int i = 0,j=0;
while(*(str1+i) != '\0')
i++;
while(*(str2+j) != '\0')
{
*(str1 + i) = *(str2 +j);
i ++;j++;
}
*(str1+i) == '\0';
}
练习 7程序利用函数 strcpy(str1,str2)将字符串 str2拷贝到字符串 str1,请编写 strpy( )函数。
#include "stdio.h"
void strcpy(char * str1,char * str2)
{
}
void main( )
{
char *str1 = "Welcome ";
char *str2 = "Everyone!";
strcpy(str1,str2);
puts(str1);
}
void strcpy(char * str1,char * str2)
{
int i = 0;
while(*(str2+i) != '\0')
{
*(str1 + i) = *(str2 +i);
i ++;
}
*(str1+i) == '\0';
}
练习 8 程序利用函数 strcmp(str1,str2)比较两个字符串
str1,str2的大小,如果,str1>str2,返回 1; str1==str2,返回 0; str1<str2,返回 -1.请编写 strcat( )函数。
#include "stdio.h"
int strcmp(char * str1,char * str2)
{ }
void main()
{char *str1 = "Welcome ";
char *str2 = "Everyone!";
int a;
a = strcmp(str1,str2);
switch (a)
{case 1:printf("Str1>Str2.\n");break;
case 0:printf("Str1==Str2.\n");break;
case -1:printf("Str1<Str2.\n");break; }}
int strcmp( char * str1,char * str2)
{
int i = 0;
while( (*(str1+i) != '\0')&&(*(str1+i)==*(str2+i)) )
i++;
if((*(str1+i) - *(str2+i)) > 0) return 1;
if((*(str1+i) - *(str2+i)) == 0) return 0;
if((*(str1+i) - *(str2+i)) < 0) return -1;
}
练习 9程序利用函数 insert( ) 向一组有序的数中插入一个数 x,请编写 insert( )函数。
#define N 11
void insert(int a[ ],int x,int n)
{ }
void main( )
{int a[N]={2,6,11,15,19,24,30,33,40,55};
int x;
int i;
printf("Please input x:");
scanf("%d",&x);
insert(a,x,N);
for (i = 0 ; i < N ; i++)
printf("%d ",a[i]);
printf("\n"); }
void insert(int a[],int x,int n)
{
int location; //x应插入的位置
int i;
//定位
for(location=0; a[location] < x && location < (n-1);
location++);
//移动元素
for (i=n-1;i>location ; i- -)
a[i] = a[i-1];
//插入数
a[location] = x;
}
练习 10 程序利用函数 count( )统计输入的一个字符串中包含多少个单词,请编写 count( )函数。
#include "stdio.h"
int count(char str[])
{
}
void main( )
{
char str[100];
int wordcount;
gets(str);
wordcount = count(str);
printf("The Number of word is %d\n",wordcount);
}
int count(char str[ ])
{ int wordnum = 0;
int word = 0;
int i ;
for( i = 0 ; str[i]!='\0'; i++)
{ if (str[i] == ' ') word = 0;
else { if ( word == 0) wordnum ++;
word = 1; }
}
return wordnum;
}
练习 11 程序利用函数 count( )统计输入的一个字符串中包含多少个字母,请编写 count( )函数。
#include "stdio.h"
int count(char str[ ])
{
}
void main()
{char str[100];
int wordcount;
gets(str);
wordcount = count(str);
printf("The Number of word is %d\n",wordcount);
}
int count(char str[ ])
{
int num = 0;
int i;
for( i=0; str[i]!='\0'; i++)
if( (str[i]>='a' && str[i]<='z')||(str[i]>='A'
&& str[i]<='Z')) num ++;
return num;
}
练习 12程序利用函数 count( )统计输入的一个字符串中包含多少个数字字符,请编写 count( )函数。
#include "stdio.h"
int count(char str[ ])
{
}
void main( )
{char str[100];
int wordcount;
gets(str);
wordcount = count(str);
printf("The Number of word is %d\n",wordcount);
}
int count(char str[ ])
{
int num = 0;
int i;
for( i=0; str[i]!='\0'; i++)
if(str[i]>='0' && str[i]<='9')
num ++;
return num;
}
练习 13程序利用函数 upper( )将字符串中所有单词的第一个字符变成大写字母,请编写 upper( )函数。
#include "stdio.h"
void upper(char str[ ])
{
}
void main()
{
char str[100];
int count;
printf("Please input a string:");
gets(str);
upper(str);
printf("The new String is,%s\n",str);
}
void upper(char str[ ])
{ int word = 0;
int i = 0;
for( i = 0 ; str[i]!='\0'; i++)
{ if (str[i] == ' ') word = 0;
else {if ( word == 0)
if(str[i]>='a' && str[i]<='z') str[i] - = 32;
word = 1;
}
}
}
练习 14程序利用函数 change( )将 10进制数转换成 2进制数输出,请编写 change( )函数。
#include "stdio.h"
int change(int a,int x[ ])
{
}
void main( )
{int a,length,i;
int x[32];
printf("Please Input a number:");
scanf("%d",&a);
length = change(a,x);
for (i = length - 1 ; i >= 0 ; i - -)
printf("%d",x[i]);
printf("\n"); }
int change(int a,int x[ ])
{
int i=0;
while( a > 0)
{
x[i] = a % 2;
a = a/2;
i ++;
}
return i;
}
练习 15程序利用函数 invert( )使输入的字符串反序存放,
请编写 invert( )函数。
#include "stdio.h"
void invert(char x[ ])
{
}
void main( )
{ char str[80];
printf("Please input a String:");
gets(str);
invert(str);
printf("Inverted String is,%s ",str);
printf("\n");
}
void invert(char x[ ])
{
int i,j;
char ch;
for(i=0,j=strlen(x)-1; i<j; i++,j- - )
{
ch = x[i];
x[i] = x[j];
x[j] = ch;
}
}
练习 16程序中函数 fun的功能是:计算 n!。例如,给
n输入 5,则输出 120.000000。
#include <stdio.h>
#include <conio.h>
double fun ( int n )
{
}
main ( )
{ int n ;
printf("Input n:") ;
scanf("%d",&n) ;
printf("\n\n%d! =%lf\n\n",n,fun(n)) ;
}
double fun ( int n )
{
double fac = 1;
int i;
for(i=1; i<=n; i++)
fac *= i;
return fac;
}
练习 17程序中,请编写函数 int fun(int score[ ],int m,int
below[ ]),它的功能是计算 score中 m个人的平均成绩 aver,
将低于 aver的成绩放在 below中,通过函数名返回人数。
#include <conio.h>
#include <stdio.h>
#include <string.h>
int fun(int score[ ],int m,int below[ ]) { }
main( )
{ int i,n,below[9] ;
int score[9] = {10,20,30,40,50,60,70,80,90} ;
clrscr( ) ;
n = fun(score,9,below) ;
printf( "\nBelow the average score are," ) ;
for (i = 0 ; i < n ; i++) printf("%d ",below[i]) ; }
int fun(int score[],int m,int below[])
{
int aver,sum = 0;
int i;
for(i=0;i<m;i++)
sum += score[i];
aver =sum / m;
for(i=0;i<m;i++)
below[i] = score[i];
return i;
}
练习 18 程序中,将字符串中 ASCII码值为偶数的字符删除,串中剩余字符所形成的一个新串放在 t 所指的数组中。
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun(char s[ ],char t[ ])
{
}
main( )
{char s[100],t[100];
clrscr( );
printf("\nPlease enter string S:"); scanf("%s",s);
fun(s,t);
printf("\nThe result is,%s\n",t); }
void fun(char s[ ],char t[ ])
{
int i,j=0;
for(i=0; s[i]!='\0';i++)
if (s[ i ]%2!=0) t[ j++ ] = s[ i ];
t[j]='\0';
}
练习 19请编写函数 void fun(int a[ ][N]),函数的功能是使数组 a上半三角元素中的值全部置为 0。
例如,a数组中的值为:
| 1 9 7 | 则返回主程序后 | 0 0 0 |
a= | 2 3 8 |,a 数组中的值应为 | 2 0 0 |
| 4 5 6 | | 4 5 0 |
#include "stdio.h,#include "conio.h,
#include "stdlib.h"
#define N 5
int fun ( int a[ ][N] )
{ }
main ( )
{ int a[N][N],i,j;
clrscr( );
printf("***** The array *****\n");
for ( i =0; i<N; i++ )
{ for ( j =0; j<N; j++ )
{ a[i][j] = rand( )%20; printf( "%4d",a[i][j] ); }
printf("\n"); }
fun ( a );
printf ("THE RESULT\n");
for ( i =0; i<N; i++ )
{ for ( j =0; j<N; j++ ) printf( "%4d",a[i][j] );
printf("\n"); } }
int fun ( int a[ ][N] )
{
int i,j;
for( i=0 ; i<N ; i++)
for( j=i ; j<N ; j++)
a[i][j] = 0;
}
练习 20 程序编写函数 sort( ),用 "起泡法 "对输入的 10
个字符按从小到大顺序排序。
#include "stdio.h"
#include "string.h"
#include "test5.h"
#define N 10
char str[N];
sort(str)
char str[N];
{
}
void main( )
{int i,flag;
for(flag=1;flag==1;)
{ printf("\nplease input string:\n");
scanf("%s",&str);
if (strlen(str)!=N)
printf("string length <>10,
please input again:\n");
else flag=0; }
sort(str);
printf("the sort result,\n");
printf("%s\n",str);
}
sort(char str[ ])
{
char t;
int i,j;
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(str[j]>str[j+1])
{
t = str[j];
str[j] = str[j+1];
str[j+1] = t;
}
}
练习 21 程序利用函数 pai( )和公式 π/4=1-1/3+1/5-1/7+… 计算 π的近似值,直到最后一项的绝对值小于 10的 -6次方为止。
#include "stdio.h"
#include "math.h“
float pai( )
{
}
void main( )
{
float pi ;
pi=pai( );
printf("pi=%f\n",pi);
}
float pai( )
{
float t=1,pi=0;
float s = 1;
int i;
for(i=1; fabs(t)>1.0e-6; i++)
{
pi += t;
s = -s;
t = s / (2*i+1);
}
return 4*pi;
}
练习 22 程序利用函数 prime( )来判断一个数是否是素数,要求实现函数 prime。
#include "math.h"
#include "stdlib.h"
#include "string.h"
int prime(int number)
{
}
void main( )
{ int number;
printf("please input a integer\n");
scanf("%d",&number);
if(prime(number))
printf("\n %d is a prime",number);
else
printf("\n %d is not a prime",number); }
int prime(int number)
{
int i,k=sqrt(number);
for (i=2 ; i<=k; i++)
if (number % i == 0) return 0;
return 1;
}
练习 23 程序编写函数 count( ),由实参传来一个字符串,函数 count( )分别统计其中字母、空格、数字和其它字符的个数。
#include "stdio.h"
#include "string.h"
int alph,digit,space,others;
count(char str[ ])
{ }
void main( )
{char text[80];
printf("\nplease input string:\n");
gets(text);
puts(text);
alph=0; digit=0; space=0; others=0;
count(text);
printf("alph=%d,digit=%d,space=%d,others=%d\n",
alph,digit,space,others); }
int alph,digit,space,others;
count(char str[ ])
{int i;
for(i=0; str[i]!='\0'; i++)
{ if ((str[i]>='a' && str[i]<='z')||
(str[i]>='A' && str[i]<='Z') )
alph ++;
else if(str[i]>='0' && str[i]<='9')
digit ++;
else if(str[i] == ' ')
space ++;
else
others ++;
}
}
练习 24 给出年、月、日,请编写函数 sum_day()计算该日是该年的第几天?
#include <stdio.h>
#include <stdlib.h>
static int day_tab[13]={0,31,28,31,30,31,31,30,31,30,31};
sum_day(int year,int month,int day)
{ }
void main( )
{int year,month,day;
int days;
scanf("%d,%d,%d",&year,&month,&day);
days=sum_day(year,month,day);
printf("%d\n",days);
}
static int
day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30};
int sum_day(int year,int month,int day)
{
int days;
int i;
for(i=1;i<month;i++)
days += day_tab[i];
days += day;
return days;
}
练习 25 编写函数,计算一个字符串中子串出现次数。
#include <stdio.h>
#include <stdlib.h>
int count(char s1[ ],char s2[ ])
{
}
void main( )
{char s1[20],s2[20];
printf("input string:");
gets(s1);
printf("input substring:");
gets(s2);
printf("count=%d\n",count(s1,s2));
}
int count(char s1[ ],char s2[ ])
{ int num=0;
int i=0,j=0;
while(s1[i]!='\0')
{
if(s2[j] == '\0')
num ++;
if(s1[i]==s2[j])
j++;
else
j = 0;
i++
}
return num;
}
练习 26 输入一行字符,将此字符串中最长的单词输出。单词全由字母组成,单词之间由空格隔开。
#include <stdio.h>
#include <string.h>
longest(char string[ ])
{ }
void main()
{int i;
char line[100];
printf("input string:\n");
gets(line);
printf("\nThe longest word is:");
for (i=longest(line);line[i]!=' ';i++)
printf("%c",line[i]);
}
int longest(char str[ ])
{ int max=0,tmp,word = 0;
char *p = str ;
while(*p!='\0')
{ if(*p = = ' ')
if (word = = 1)
{if (max < tmp) max = tmp;
word = 0; }
else {if (word = = 0) {word = 1; tmp = 1; }
else tmp++; }
p++; }
if (max < tmp) max = tmp;
return max;
}