1.下列给定程序中,函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。请改正程序中的错误,使它能得出正确的结果。
#include <stdio.h>
#define MAXLINE 20
fun ( char *pstr[6])
{ int i, j ;
char *p ;
for (i = 0 ; i < 5 ; i++ ) {
for (j = i + 1; j < 6; j++) {
/**************found**************/
if(strcmp(*(pstr+i),___1___)>0)
{
p = *(pstr + i) ;
/**************found**************/
pstr[i] = ___2___ ;
/**************found**************/
*(pstr + j) = ___3___ ;
}
}
}
}
main( )
{ int i ;
char *pstr[6], str[6][MAXLINE] ;
for(i = 0; i < 6 ; i++) pstr[i] = str[i] ;
printf( "\nEnter 6 string(1 string at each line): \n" ) ;
for(i = 0 ; i < 6 ; i++) scanf("%s", pstr[i]) ;
fun(pstr) ;
printf("The strings after sorting:\n") ;
for(i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]) ;
}
2.给定程序的功能是将十进制正整数m转换成k进制(2≤k≤9)数的数字输出。 例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
#include <stdio.h>
void fun( int m, int k )
{
int aa[20], i;
for( i = 0; m; i++ ) {
/**********found**********/
aa[i] = ___1___;
/**********found**********/
m /= ___2___;
}
for( ; i; i-- )
/**********found**********/
printf( "%d", ___3___[ i-1 ] );
}
main()
{
int b, n;
printf( "\nPlease enter a number and a base:\n" );
scanf( "%d %d", &n, &b );
fun( n, b );
}
3.给定程序MODI1.C中函数fun的功能是:根据形参m的值(2<m<9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。
例如,若输入2 ,
则输出 1 2
2 4
若输入4,
则输出: 1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
请改正程序函数中的错误,使它得出正确的结果。
#include <stdio.h>
#define M 10
int a[M][M] = {0} ;
fun(int a[][M], int m)
{ int j, k ;
for (j = 0 ; j < m ; j++ )
for (k = 0 ; k < m ; k++ )
/**************found**************/
___1___ = (k+1)*(j+1);
}
main ( )
{ int i, j, n ;
printf ( " Enter n : " ) ; scanf ("%d", &n ) ;
/**************found**************/
fun ( ___2___ ) ;
for ( i = 0 ; i < n ; i++)
{ for (j = 0 ; j < n ; j++)
/**************found**************/
printf ( "%4d", ___3___ ) ;
printf ( "\n" ) ;
}
}
4.实现矩阵(3行3列)的转置
#include <stdio.h>
int fun(int array[3][3])
{
int i,j,arr[3][3] ;
memcpy(arr, array, 9*sizeof(int)) ;
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 3 ; j++)
/**************found**************/
array[i][j] = ___1___ ;
}
main()
{
int i,j;
int array[3][3]={{100,200,300},
{400,500,600},
{700,800,900}};
for (i=0;i<3;i++)
{ for (j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
/**************found**************/
fun(___2___);
printf("Converted array:\n");
for (i=0;i<3;i++)
{ for (j=0;j<3;j++)
/**************found**************/
printf("%7d", ___3___);
printf("\n");
}
}
5.求出数组xx中最大数max及最大数的个数cnt和数组xx中值能被3整除或能被7整除的数的算术平均值pj(保留两位小数);
#include <stdio.h>
#define N 20
void main()
{ int max;
int cnt,xx[N]={78,43,56,34,43,32,85,43,46,10,90,34,90,3,52,61,42,89,90,54};
float pj;
long j=0;
int I,k;
/*************found************/
___1___
/*************found************/
for(___2___;I<N;I++)
/*************found************/
{if (xx[I]>max) ___3___;
if (xx[I]%3==0||xx[I]%7==0)
{j+=xx[I];k++;}
}
for (I=0,cnt=0;I<N;I++)
if (xx[I]==max) cnt++;
pj=(float)(j*100/k)/100;
printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max,cnt,pj);
}
6.
函数ReadDat()实现从文件in.dat中读取一篇英文文章,存入到字符串数组XX中;请编制函数encryptChar(),按给定的替代关系对数组XX中的所有字符进行替代,仍存入数组XX对应的位置上,最后调用函数WriteDat()把结果XX输出到文件 out.dat中。
替代关系:f(p)=p*[3 mod 256,mod为取余运算,P是数组xx中某一个字符的ASCII值,f(p)是计算后的无符号整型值(注意:中间变量定义成整型变量),如果计算后f(p)值小于等于32或是偶数,则该字符不变,否则用f(p)替代所对应的字符。注意:部分源程序存放在test.c文件中,原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按此替代关系进行处理。
#include <stdio.h>
#include <string.h>
void main()
{
char xx[80];
int i,j;
printf("\n please input :");
scanf("%s",xx);
/***************found***************/
for (i=0;___1___;i++)
if((('A'<=xx[i])&&(xx[i]<='Z'))||(((xx[i]*11) % 256 )<=32))
/***************found***************/
___2___
else
/***************found***************/
xx[i]=___3___;
printf("\n xx=%s",xx);
}
7. 给定程序MODll.c中函数fun的功能是;由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。
例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763
所得平均值为:195.838745,在平均值以上的实数个数应为:5
请改正程序中的错误,使程序能输出正确的结果。
#include <conio.h>
#include <stdio.h>
int fun(float x[], int n)
/************found************/
int j, c=0; float xa=0.0;
for (j=0; j<n; j++ )
xa += x[j]/n;
printf("ave =%f\n",xa);
for (j=0; j<n; j++ )
/************found************/
if (x[j] => xa)
c++;
return c;
}
main ( )
{ float x[100] = {193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763};
printf("%d\n", fun (x, 8));
}
8.
下列给定程序中,函数fun的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。例如,输入1、2、3、4,程序运行后输出以下方阵:4 1 2 33 4&n...
下列给定程序中,函数fun的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。例如,输入1、2、3、4,程序运行后输出以下方阵:
4 1 2 3
3 4 1 2
2 3 4 1
1 2 3 4
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#define M 4
/**************found**************/
void fun(int a)
{ int i,j,k,m;
printf("Enter 4 number : ");
for(i=0; i<M; i++) scanf("%d",&a[i]);
printf("\n\nThe result :\n\n");
for(i=M;i>0;i--)
{ k=a[M-1];
for(j=M-1;j>0;j--)
/**************found**************/
aa[j]=a[j-1];
a[0]=k;
for(m=0; m<M; m++) printf("%d ",a[m]);
printf("\n");
}
}
main()
{ int a[M];
fun(a); printf("\n\n");
}
9.输出M行M列整数方阵,然后求两条对角线上各元素之和,返回此和数
#include <conio.h>
#include <stdio.h>
#define M 5
/************found************/
int fun(int n, int xx[][])
{ int i, j, sum=0;
printf( "\nThe %d x %d matrix:\n", M, M );
for( i = 0; i < M; i++ )
{ for( j = 0; j < M; j++ )
/************found************/
printf( "%f ", xx[i][j] );
printf("\n");
}
for( i = 0 ; i < n ; i++ )
sum += xx[i][i]+xx[i][ n-i-1 ];
return( sum );
}
main( )
{ int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
printf ( "\nThe sum of all elements on 2 diagnals is %d.",fun( M, aa ));
}
10.程序改错:功能:用插入排序法将n个字符进行排序(降序)。
提示:插入法排序的思路是:先对数组的头两个元素进行排序,然后根据前两个元素的情况插入第三个元素,再插入第四个元素…)。
#define N 81
#include <stdio.h>
#include <string.h>
void fun(char *aa, int n)
{ int a ,b,t;
for( a = 1; a<n; a++)
{ t = aa[a]; b = a-1;
/************FOUND************/
While((b>=0)&&(t>aa[b]))
{ aa[b+1]=aa[b]; b--; }
/************FOUND************/
aa[b+1] = t
}
}
main()
{ char a[N];
int i;
printf("\nEnter a string: ");gets( a);
fun(a , strlen(a));
printf("\nThe string: ");puts(a);
}
11.对N个数进行从大到小排序
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define N 20
/**********FOUND**********/
void fun( int a, int n )
{ int i, j, k, t ;
for ( j = 0; j < n-1; j++)
{ k = j;
for ( i = j + 1; i < n ; i++ )
/**********FOUND**********/
if ( a [i] < a[k] ) k = i;
t = a[j] ; a[j] = a[k]; a[k] = t;
}
}
main ( )
{ int a[N] , i;
for ( i = 0; i < N; i ++ ) a[ i] = rand()%100;
printf("#### before sort ####\n\n");
for ( i = 0; i < N; i ++ ) printf ( (i+1)%10 ? "%6d":"%6d\n", a[ i ] );
fun ( a, N );
printf("**** after sort ****\n\n");
for ( i = 0; i < N; i ++ ) printf ( (i+1)%10 ? "%6d":"%6d\n", a[ i ] );
printf("\n");
}
12.用冒泡法对6个字符串进行排序
#include <stdio.h>
#include <conio.h>
#define MAXLINE 20
fun ( char *pstr[6])
{ int i, j ;
char *p ;
for (i = 0 ; i < 5 ; i++ ) {
for (j = i + 1; j < 6; j++) {
/**************FOUND**************/
if(strcmp(*(pstr + i), pstr + j) > 0)
{
p = *(pstr + i) ;
/**************FOUND**************/
*(pstr + i) = pstr + j ;
*(pstr + j) = p ;
}
}
}
}
main( )
{ int i ;
char *pstr[6], str[6][MAXLINE] ;
for(i = 0; i < 6 ; i++) pstr[i] = str[i] ;
printf( "\nEnter 6 string(1 string at each line): \n" ) ;
for(i = 0 ; i < 6 ; i++) scanf("%s", pstr[i]) ;
fun(pstr) ;
printf("The strings after sorting:\n") ;
for(i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]) ;
}
13.程序已经定义了N×N的数组,并在主函数中自动赋值,请编写函数fun,使数组右上半三角元素乘以m。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
int fun ( int a[][N], int m )
{
int i,j,k;
for(j=0;j<N;j++)
for(i=0;i<=j;j++)
a[i][j]=a[i][j]*m;
}
NONO( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *rf, *wf ;
int i, j, n, a[5][5] ;
rf = fopen("bc02.in", "r") ;
wf = fopen("bc02.out", "w") ;
for(i = 0 ; i < 5 ; i++)
for(j = 0 ; j < 5 ; j++)
fscanf(rf, "%d ", &a[i][j]) ;
fscanf(rf, "%d", &n) ;
fun(a, n) ;
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 5; j++ ) fprintf(wf, "%4d", a[i][j] );
fprintf(wf, "\n");
}
fclose(rf) ;
fclose(wf) ;
}
main ( )
{ int a[N][N], m, i, j;
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");
}
do m = rand()%10 ; while ( m>=3 );
printf("m = %4d\n",m);
fun ( a ,m );
printf ("THE RESULT\n");
for ( i =0; i<N; i++ )
{ for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] );
printf("\n");
}
NONO ( );
}
14.请编写函数fun,该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;
#include <stdio.h>
#define N 50
#define M 11
void fun( int *a, int *b)
{
}
double rnd()
{ static t=29,c=217,m=1024,r=0;
r=(r*t+c)%m; return((double)r/m);
}
NONO(int d[M])
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *wf ; int i ;
wf = fopen("bc.out", "w") ;
for(i = 0 ; i < 10 ; i++) fprintf(wf, "%4d---%4d : %4d\n", i*10, i*10+9, d[i]) ;
fprintf(wf, " Over 100 : %4d\n", d[10]) ;
fclose(wf) ;
}
main()
{ int age[N], i, d[M];
for(i=0; i<N;i++)age[i]=(int)(115*rnd());
printf("The original data :\n");
for(i=0;i<N;i++) printf((i+1)%10==0?"%4d\n":"%4d",age[i]);
printf("\n\n");
fun( age, d);
for(i=0;i<10;i++)printf("%4d---%4d : %4d\n",i*10,i*10+9,d[i]);
printf(" Over 100 : %4d\n",d[10]);
NONO(d);
}
15..函数fun的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据
18.\x05函数fun的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中.
例如,二维数组中的数据为:
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应是:
33 33 33 33 44 44 44 44 55 55 55 55
#include <stdio.h>
void fun(int (*s)[10], int *b, int *n, int mm, int nn)
{
}
main()
{ int w[10][10] = {{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j ;
int a[100] = {0}, n = 0 ;void NONO ();
printf("The matrix:\n") ;
for(i = 0 ; i < 3 ; i++)
{ for(j = 0 ; j < 4 ; j++) printf("%3d",w[i][j]) ;
printf("\n") ;
}
fun(w, a, &n, 3, 4) ;
printf("The A array:\n") ;
for(i = 0 ; i < n ; i++) printf("%3d",a[i]);printf("\n\n") ;
NONO() ;
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。*/
FILE *rf, *wf ; int i, j, k ;
int w[10][10], a[100], n = 0, mm, nn ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(k = 0 ; k < 5 ; k++) {
fscanf(rf, "%d %d", &mm, &nn) ;
for(i = 0 ; i < mm ; i++)
for(j = 0 ; j < nn ; j++) fscanf(rf, "%d", &w[i][j]) ;
fun(w, a, &n, mm, nn) ;
for(i = 0 ; i < n ; i++) fprintf(wf, "%3d", a[i]) ; fprintf(wf, "\n") ;
}
fclose(rf) ; fclose(wf) ;
}
16.输入4个字母,按从大到小顺序,并且输出,利用冒泡法或者选择法进行从大到小进行排序
# include <stdio.h>
void fun(char ch[],int n)//n为排序的个数。
{
}
void NONO ();
int main()
{
char ch[4];
printf("输入四个字符:\n");
scanf("%c%c%c%c",&ch[0],&ch[1],&ch[2],&ch[3]);
fun(ch,4);
printf("%c%c%c%c",ch[0],ch[1],ch[2],ch[3]);
NONO ();
return 0;
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[100];
FILE *rf, *wf ;
int i ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%s", &s) ;
fun(s, 4) ;
fprintf(wf, "%c%c%c%c\n", s[0],s[1],s[2],s[3]) ;
}
fclose(rf) ;
fclose(wf) ;
}
17.对姓名串排序(选择排序)和查找(顺序查找)。在name字符串数组中查找字符串str的位置,其在字符串中的位置(即下标加1)作为函数值返回,未找到,返回为-1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 5
#define N 20
void PaiXu(char name[M][N])
{
int i,j;
char temp[20];
for(i=0;i<M-1;i++)
for(j=0;j<M-1-i;j++)
if(strcmp(name[j+1],name[j])>0)
{
strcpy(temp,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],temp);
}
}
int fun(char name[M][N],char str[80])
{
}
//函数声明
void NONO ();
int main()
{
char name[M][N]={"ZhangMing","LiWenBin","WangYangHai","HuBin","LiJu"},findName[N];
int i;
PaiXu(name);
for(i=0;i<M;i++)
puts(name[i]);
gets(findName);
printf("该姓名所在位置第%d个。\n",fun(name,findName));
NONO ();
return 0;
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[M][N];
FILE *rf, *wf ;
int i,t ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < M ; i++)
fscanf(rf, "%s", &s[i]) ;
PaiXu(s);
t=fun(s,"zhangsan") ;
fprintf(wf,"该姓名所在位置第%d个。\n",t) ;
fclose(rf) ;
fclose(wf) ;
}