第41题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,其功能是:将一个数字字符串转换为一个整数(不得调用C语言提供
的将字符串转换为整数的函数)。
例如:若输入字符串"-1234",则函数把它转换为整数值-1234。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
void wwjt ( );
long fun ( char *p)
{
/**********Program**********/
/********** End **********/
}
main() /* 主函数 */
{
char s[6];
long n;
printf("Enter a string:\n") ;
gets(s);
n = fun(s);
printf("%ld\n",n);
wwjt ( );
}
void wwjt( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i ;
char s[20] ;
long n ;
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(i = 0 ; i < 10 ; i++)
{
fscanf(in, "%s", s) ;
n = fun(s);
fprintf(out, "%ld\n", n) ;
}
fclose(in) ;
fclose(out) ;
}
答案: long n=0;
int flag=1;
if(*p=='-') /*负数时置flag为-1*/
{
p++;flag= -1;
}
else if(*p=='+') /*正数时置flag为1*/
p++;
while(*p!='\0')
{
n=n*10+*p-'0'; /*将字符串转成相应的整数*/
p++;
}
return n*flag;
第42题 (20.0分) 难度:易 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:删除所有值为y的元素。数组元素中的值和y的值由
主函数通过键盘输入。
------------------------------------------------*/
#include <stdio.h>
#include<conio.h>
#include<stdio.h>
#define M 20
void wwjt();
void fun(int bb[],int *n,int y)
{
/**********Program**********/
/********** End **********/
}
main()
{
int aa[M],n,y,k;
printf("\nPlease enter n:");scanf("%d",&n);
printf("\nEnter %d positive number:\n",n);
for(k=0;k<n;k++) scanf("%d",&aa[k]);
printf("The original data is:\n");
for(k=0;k<n;k++) printf("%5d",aa[k]);
printf("\nEnter a number to deletede:");scanf("%d",&y);
fun(aa,&n,y);
printf("The data after deleted %d:\n",y);
for(k=0;k<n;k++) printf("%4d",aa[k]);
printf("\n");
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int n;
int i[10];
int o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read FILE Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FILE Error");
}
for(n=0;n<10;n++)
{
fscanf(IN,"%d",&i[n]);
}
fun(i,&n,3);
for(o=0;o<n;o++)
{
fprintf(OUT,"%d\n",i[o]);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i,j;
for(i=0;i<*n;)
{
if(bb[i]==y)
{for(j=i;j<*n;j++)
bb[j]=bb[j+1];
*n=*n-1;
}
else
i++;
}
----------------------
第43题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。
字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔
开,一行的开始没有空格。
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入
所编写的若干语句。
-------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#define N 80
void wwjt();
int fun(char *s)
{
/**********Program**********/
/********** End **********/
}
void main()
{
char line[N];
int num=0;
printf("Enter a string:\n ");
gets(line);
num=fun(line);
printf("The number of word is:%d\n\n ",num);
wwjt();
}
void wwjt()
{
FILE *in, *out;
char line[N];
int i,num=0;
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(i=0;i<3;i++)
{
fgets(line,80,in);
num=fun(line);
fprintf(out,"%d\n",num);
}
fclose(in);
fclose(out);
}
答案: int i,j=0;
for(i=0;s[i]!='\0';i++)
if(s[i]!=' '&&(s[i+1]==' '||s[i+1]=='\0'))
j++;
return j;
第44题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的
平方根,并作为函数值返回。
例如:若n为1000时,程序输出应为:s=153.909064。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
void wwjt ( );
double fun( int n)
{
/**********Program**********/
/********** End **********/
}
void main() /* 主函数 */
{
printf("s =%f\n", fun ( 1000) );
wwjt();
}
void wwjt ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i, n ;
double s;
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(i = 0 ; i < 10 ; i++)
{
fscanf(in, "%d", &n) ;
s = fun(n) ;
fprintf(out, "%f\n", s) ;
}
fclose(in) ;
fclose(out) ;
}
答案: double sum=0.0;
int i;
for(i=21; i<=n; i++)
if((i % 3==0) && (i % 7==0))
sum+=i;
return sqrt(sum) ;
第45题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:任输入十个国家的名字,按由小到大排序。
-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
void main( )
{
char a[10][20],b[20]; //用来保存国家的名字 b表示中间变量
int i,j; //循环变量
/**********Program**********/
/********** End **********/
for (i=0;i<10;i++) printf("%s\n",a[i]);
}
答案: for (i=0;i<10;i++)
gets(a[i]);
for (i=0;i<9;i++)
for (j=i+1;j<10;j++)
if (strcmp(a[i],a[j])>0)
{ strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);
}
第46题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非
素数的个数通过k返回。
例如:若输入17,则应输出:4 6 8 9 10 12 14 15 16。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt ( );
void fun( int m, int *k, int xx[] )
{
/**********Program**********/
/********** End **********/
}
main()
{
int m, n, zz[100];
printf( "\nPlease enter an integer number between 10 and 100: " );
scanf( "%d", &n );
fun( n, &m, zz );
printf( "\n\nThere are %d non-prime numbers less than %d:", m, n );
for( n = 0; n < m; n++ )
printf( "\n %4d", zz[n] );
wwjt();
}
void wwjt()
{
FILE *in, *out ;
int m, n, zz[100];
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
fscanf( in, "%d", &n );
fun( n, &m, zz );
fprintf(out, "%d\n%d\n", m, n );
for( n = 0; n < m; n++ )
fprintf(out, "%d\n", zz[n] );
fclose(in) ;
fclose(out) ;
}
答案: int i,j,n=0;
for(i=4;i<m;i++) /*找出大于1小于整数m的非素数*/
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j<i)
xx[n++]=i;
}
*k=n; /*返回非素数的个数*/
第47题 (20.0分) 难度:中 第4章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:对任意输入的 x,用下式计算并输出 y 的值。
5 x<10
y= 0 x=10
-5 x>10
------------------------------------------------*/
#include<stdio.h>
void wwjt();
int fun(int n)
{
/**********Program**********/
/********** End **********/
}
void main ()
{
int x,y;
printf("enter x:");
scanf("%d",&x);
y=fun(x);
printf("x=%d,y=%d\n",x,y);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int i;
int iIN;
long int iOUT;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..it May Be Changed");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. it May Be Changed");
}
for(i=0;i<5;i++)
{
fscanf(IN,"%d",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%ld\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案: int m;
if(n<10)
m=5;
else
if(n==10) m=0;
else m=-5;
return m;
或
int m;
if(n>=10)
if(n>10)
m=-5;
else m=0;
else m=5;
return m;
第48题 (20.0分) 难度:中 第1章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数fun求1!+2!+3!+ …… +n!的和,在main函
数中由键盘输入n值,并输出运算结果。请编写fun
函数。
例如:若n值为5,则结果为153。
------------------------------------------------*/
#include<stdio.h>
void wwjt();
long int fun(int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int n;
long int result;
scanf("%d",&n);
result=fun(n);
printf("%ld\n",result);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int i;
int iIN;
long int iOUT;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(i=0;i<10;i++)
{
fscanf(IN,"%d",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%ld\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i;
float f=1,s=0;
for(i=1;i<=n;i++)
{f=f*i;
s=s+f;}
return s;
----------------------
第49题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:假定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了尾部
的*号之外,将字符中的其它的*号全部删除。形参p已指向字符串中最后的一个
字母。在编写函数时,不得使用C语言提供的字符串函数。
例如:字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容应当
是ABCDEFG*******。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt ( );
void fun( char *a, char *p )
{
/**********Program**********/
/********** End **********/
}
void main()
{
char s[81],*t;
printf("Enter a string:\n");
gets(s);
t=s;
while(*t)
t++;
t--;
while(*t=='*')
t--;
fun( s , t );
printf("The string after deleted:\n");
puts(s);
wwjt( );
}
void wwjt( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i ; char s[81],*t ;
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(i = 0 ; i < 10 ; i++)
{
fscanf(in, "%s", s) ;
t=s;
while(*t)
t++;
t--;
while(*t=='*')
t--;
fun(s,t) ;
fprintf(out, "%s\n", s) ;
}
fclose(in) ;
fclose(out) ;
}
答案: char *t=a;
for(;t<=p;t++)
if(*t!='*')
*(a++)=*t;
for(;*t!='\0';t++)
*(a++)=*t;
*a='\0';
第50题 (20.0分) 难度:中 第95章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编程序,输入两个字符串a,b(<40个字符),将两者连接后输出c(不能用strcat库函数)。
-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
void main( )
{
/**********Program**********/
/********** End **********/
}
答案: char a[40], b[40], c[80];
int i, j;
printf("分二行输入两个字符串: \n");
gets(a); gets(b);
for( i=0; a[i]!='\0'; i++) c[i]=a[i];
for( j=0; b[j]!='\0'; j++) c[i+j]=b[j];
c[i+j]='\0';
puts(c);