计算机二级C语言的注意事项及相应真题-4-程序设计

目录

    • 31.找出学生的最高分,由函数值返回
    • 32.计算并输出下列多项式的值
    • 33.将一个数字字符串转换成与其面值相同的长整型整数。可调用strlen函数求字符串的长度
    • 34.将字符串中的前导*号全部移到字符串的尾部。函数fun中给出的语句仅供参考
    • 35.将一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回
    • 36.将具有n个元素的形参数组x中的偶数依原顺序输出到字符数组str中,每个数字后面加一个小数点,并生成一个结果字符串str由函数返回
    • 37.分别统计形参t所指二维数组中字母A和C的个数
    • 38.查找x在s所指数组中下标的位置作为函数值返回,若x不存在,则返回-1
    • 39.判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回
    • 40.除了字符串前导的`*`号之外,将串中其它*号全部删除

31.找出学生的最高分,由函数值返回

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。

注意:部分源程序存在文件prog1.c中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

prog1.c:

#include <stdio.h>
#include <stdlib.h>
#define   N   8
struct  slist
{  double   s;struct slist  *next;
};
typedef  struct slist  STREC;//声明了一个自定义类型名STREC
double  fun( STREC *h  )
{}STREC * creat( double *s)//创建链表
{ STREC  *h,*p,*q;   int  i=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;//开辟了节点空间,while(i<N)//创建n个节点{ q=(STREC*)malloc(sizeof(STREC));//开辟空间q->s=s[i]; i++; p->next=q; p=q;//把数组s的元素存入q节点,把q节点接在p节点后,再把q节点赋给p,也就是让指针p后移}p->next=0;//设p的指针域为空,也就是后面没有节点了return  h;//返回头节点
}
outlist( STREC *h)//输出链表
{ STREC  *p;p=h->next;   printf("head");//设p为头节点h的下一节点do{ printf("->%2.0f",p->s);p=p->next;}//在循环中指针p后移来输出节点while(p!=0);printf("\n\n");
}
main()
{  double  s[N]={85,76,69,85,91,72,64,87}, max;void NONO ();STREC  *h;/头节点h=creat( s );   outlist(h);//创建链表,然后输出链表max=fun( h );//fun函数返回最高分printf("max=%6.1f\n",max);NONO();getchar();
}
void NONO ()//系统用于评分测试的函数
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i,j ; double  s[N],max;STREC *h ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {//有10组测试数据for(j=0 ; j < N; j++) fscanf(in, "%lf,", &s[j]) ;//从文件指针in指向的文件in.dat中获取数组sh=creat( s );//创建链表max=fun( h );fprintf(out, "%6.1lf\n", max) ;//结果输出到文件指针out指向的文件out.dat中}fclose(in) ;//关闭fclose(out) ;
}

解题思路:
遍历链表,比较节点中成员s的大小,找出最大的返回
设一节点p为头节点h的下一节点,再设一节点q为p节点的下一节点,用一while循环,循环为q不为NULL就好了

答案:

1.自己做的

#include <stdio.h>
#include <stdlib.h>
#define   N   8
struct  slist
{  double   s;struct slist  *next;
};
typedef  struct slist  STREC;
double  fun( STREC *h  )
{
STREC *p=h->next,*q;//p节点为头节点h的下一节点
q=p->next;//q节点为p节点的下一节点
while(q)//循环条件q节点不为NULL
{if(p->s<q->s)//如果q节点的s大于p节点的,则让指针p指向此时的q节点p=q;q=q->next;//指针q后移
}
return p->s;//返回最大的
}STREC * creat( double *s)
{ STREC  *h,*p,*q;   int  i=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;while(i<N){ q=(STREC*)malloc(sizeof(STREC));q->s=s[i]; i++; p->next=q; p=q;}p->next=0;return  h;
}
outlist( STREC *h)
{ STREC  *p;p=h->next;   printf("head");do{ printf("->%2.0f",p->s);p=p->next;}while(p!=0);printf("\n\n");
}
main()
{  double  s[N]={85,76,69,85,91,72,64,87}, max;void NONO ();STREC  *h;h=creat( s );   outlist(h);max=fun( h );printf("max=%6.1f\n",max);NONO();getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i,j ; double  s[N],max;STREC *h ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {for(j=0 ; j < N; j++) fscanf(in, "%lf,", &s[j]) ;h=creat( s );max=fun( h );fprintf(out, "%6.1lf\n", max) ;}fclose(in) ;fclose(out) ;
}

2。题库答案:

#include <stdio.h>
#include <stdlib.h>
#define   N   8
struct  slist
{  double   s;struct slist  *next;
};
typedef  struct slist  STREC;
double  fun( STREC *h  )
{STREC *c;//设一指针cdouble max;c=h->next;//让c指向头节点h的下一节点max=c->s; //把c节点的s赋给maxwhile (c->next!=0)//c节点的下一节点不为空{c=c->next;//指针c后移if (max<c->s) max=c->s; //c节点的s大于max,则赋给max}return max;
}STREC * creat( double *s)
{ STREC  *h,*p,*q;   int  i=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;while(i<N){ q=(STREC*)malloc(sizeof(STREC));q->s=s[i]; i++; p->next=q; p=q;}p->next=0;return  h;
}
outlist( STREC *h)
{ STREC  *p;p=h->next;   printf("head");do{ printf("->%2.0f",p->s);p=p->next;}while(p!=0);printf("\n\n");
}
main()
{  double  s[N]={85,76,69,85,91,72,64,87}, max;void NONO ();STREC  *h;h=creat( s );   outlist(h);max=fun( h );printf("max=%6.1f\n",max);NONO();getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i,j ; double  s[N],max;STREC *h ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {for(j=0 ; j < N; j++) fscanf(in, "%lf,", &s[j]) ;h=creat( s );max=fun( h );fprintf(out, "%6.1lf\n", max) ;}fclose(in) ;fclose(out) ;
}

测试:

main函数的:
在这里插入图片描述

in.dat:
在这里插入图片描述

out.dat:
在这里插入图片描述

32.计算并输出下列多项式的值

请编写函数fun,其功能是:计算并输出下列多项式的值:
请添加图片描述

例如,在主函数中从键盘给n输入50后,输出为: s=1.718282。

注意:要求n的值大于1但不大于100。

部分源程序在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

PROG1.C:

#include <stdio.h>
#pragma warning (disable:4996)
double fun(int  n)
{}
main()
{ int  n;    double  s;void NONO( );printf("\nInput n:  ");  scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n\n",s);NONO();
}
void NONO()//系统用于评分测试的函数
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */FILE *rf, *wf ; int n, i ; double s ;rf = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {//有10组测试数据fscanf(rf, "%d", &n) ;//从文件指针rf指向的文件in.dat中获取ns = fun(n) ;fprintf(wf, "%lf\n", s) ;//结果输出到文件指针wf指向的文件out.dat中}fclose(rf) ; fclose(wf) ;//关闭
}

解题思路:
这种题找清楚规律就好了,在题目的公式中可看出分母是阶乘,需要注意的题目说n的范围最大可为100,那int显然是不够的
好吧,这题有些离谱了,这个n的最大可达100,也即是100!,那就算long long 也存不下,但是吧我又发现当n=9时,再往后的分式结果非常的小,后面的值基本定在了1.718282,放个图看下
这张图用的是20!
在这里插入图片描述

总之反正你用double在out.dat中也没出现inf表示爆了,

答案:

1.自己做的:

#include <stdio.h>
#pragma warning (disable:4996)
double fun(int  n)
{
double i=1,a=1;//a是求阶乘也就是分母的中间变量,用long long 在out.dat中会出现inf
double s=0;
while(i<=n)
{
a*=i;
s+=1.0/a;
i++;
}
return s;
}
main()
{ int  n;    double  s;void NONO( );printf("\nInput n:  ");  scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n\n",s);NONO();
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */FILE *rf, *wf ; int n, i ; double s ;rf = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {fscanf(rf, "%d", &n) ;s = fun(n) ;fprintf(wf, "%lf\n", s) ;}fclose(rf) ; fclose(wf) ;
}

2.题库答案:

#include <stdio.h>
#pragma warning (disable:4996)
double fun(int  n)
{   int i;double sum=0.0,tmp=1.0; if(n<=1||n>100){ printf("Input n(n>1&&n<=100):  ");  scanf("%d",&n);}//他加了对输出的限制,符合题目for(i=1;i<=n;i++){	tmp*=i; sum+=1.0/tmp; }return sum; 
}
main()
{ int  n;    double  s;void NONO( );printf("\nInput n:  ");  scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n\n",s);NONO();
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */FILE *rf, *wf ; int n, i ; double s ;rf = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {fscanf(rf, "%d", &n) ;s = fun(n) ;fprintf(wf, "%lf\n", s) ;}fclose(rf) ; fclose(wf) ;
}

测试:

main函数:
在这里插入图片描述

in.dat:
在这里插入图片描述

out.dat:
看到这样,不用惊讶,解题思路那里说过了
在这里插入图片描述

33.将一个数字字符串转换成与其面值相同的长整型整数。可调用strlen函数求字符串的长度

请编函数fun,其功能是将一个数字字符串转换成与其面值相同的长整型整数。可调用strlen函数求字符串的长度。

例如:在键盘输入字符串2345210,函数返回长整型数2345210。

注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。

PROG1.C:

#include   <stdio.h>
#include   <string.h>
void NONO();long  fun( char  *s )
{}
main()
{  char  s[10];    long  r;printf("请输入一个长度不超过9个字符的字符串 :  ");  gets(s);r = fun( s );printf(" r = %ld\n" , r );NONO();getchar();
}void NONO()//系统用于评分测试的函数
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i;long r;char s[10], *p;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {//有10组测试数据fgets(s, 10, fp);//从文件指针fp指向的文件in.dat中获取字符数组sp=strchr(s,'\n');//又是这个,使指针p指向字符数组的中换行符if(p) *p=0;//把换行符变为字符空r = fun(s);fprintf(wf, "%ld\n", r);//结果输出到文件指针wf指向的文件out.dat中}fclose(fp) ;/关闭fclose(wf) ;
}

解题思路:
就是把数字字符串转换为整数,只要知道数字字符减取去字符’0’就是整数了就很简单,这个很好理解

答案:

1.自己做的:

#include   <stdio.h>
#include   <string.h>
void NONO();long  fun( char  *s )
{
long r=0;//这里很容易理解,就不多说了
while(*s!='\0')
{r=r*10+*s-'0';s++;
}
return r;
}
main()
{  char  s[10];    long  r;printf("请输入一个长度不超过9个字符的字符串 :  ");  gets(s);r = fun( s );printf(" r = %ld\n" , r );NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i;long r;char s[10], *p;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {fgets(s, 10, fp);p=strchr(s,'\n');if(p) *p=0;r = fun(s);fprintf(wf, "%ld\n", r);}fclose(fp) ;fclose(wf) ;
}

2.题库答案:

#include   <stdio.h>
#include   <string.h>
void NONO();long  fun( char  *s )
{   int i,n;long a,r;a=0;r=0;n=strlen(s);//他选择用了strlen()for(i=0;i<n;i++){a=*(s+i)-48;//字符0的ASCII码就是48r=r*10+a;}return r;
}
main()
{  char  s[10];    long  r;printf("请输入一个长度不超过9个字符的字符串 :  ");  gets(s);r = fun( s );printf(" r = %ld\n" , r );NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i;long r;char s[10], *p;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {fgets(s, 10, fp);p=strchr(s,'\n');if(p) *p=0;r = fun(s);fprintf(wf, "%ld\n", r);}fclose(fp) ;fclose(wf) ;
}

测试:

main函数:
在这里插入图片描述

in.dat:
在这里插入图片描述

有趣,这次输出out.dat不出所料又出了问题,放张图
可以看到有个0,这显然错了
在这里插入图片描述

本因为是如往常只是p=strchr(s,'\n');这句话的问题,因为windows系统里换行符会识别为\r\n,这句话的功能只把\n转换为了'\0',那就把\r算入了字符串里,导致了错误,但这次不同,还有其他的因素,
如果仅仅只是把p=strchr(s,'\n');改成p=strchr(s,'\r');的话,就会出现,下图的情况
出现了-38的情况
在这里插入图片描述
下断点会发现,
\n没有出现,换行符是由\r\n组成的,\r是把光标移至行尾,\n是实现换行,
在这里插入图片描述
再看获取的下一个字符串
\n跑到了下一字符串的开头处,这说明上一字符串少获取了一字符
在这里插入图片描述
这里看下正常字符串的获取,
通过对比更明显看出那个字符串少获取了一字符,那就应该还要在fgets(s, 10, fp);这句话,让获取的最大字符数加1即可,也就是改成fgets(s,11,fp);
在这里插入图片描述

好了,将这两处都改好后,再看out.dat就是正确的了

out.dat:
在这里插入图片描述

34.将字符串中的前导*号全部移到字符串的尾部。函数fun中给出的语句仅供参考

假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:将字符串中的前导号全部移到字符串的尾部。函数fun中给出的语句仅供参考。

例如,字符串中的内容为:*******A*BC*DEF*G****,移动后,字符串中的内容应当是:ABCDEF*G***********。在编写函数时,不得使用C语言提供的字符串函数。

注意:部分源程序存在文件prog1.c中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

prog1.c:

#include <stdio.h>
void  fun( char *a )这个函数中给出的部分他注释很清楚了
{/* 以下代码仅供参考 */char *p,*q;int n=0;p=a;while(*p=='*')  /* 统计串头'*'个数n */{n++; p++;}q=a;/* 向前复制字符串,请填写相应的语句完成其功能 */for(;n>0;n--)  /* 在串尾补n个'*' */*q++='*';//指针后移再解引,等同于*(t+1)='*';*q='\0';  
}main()
{  char  s[81];  int  n=0; void NONO ();printf("Enter a string:\n");gets(s);fun( s );printf("The string after moveing:\n");puts(s);NONO();getchar();
}
void NONO ()//系统用于评分测试的函数
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i ; char s[81] ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {//有10组测试数据fscanf(in, "%s", s) ;//从文件指针in指向的文件in.dat中获取字符串sfun(s) ;fprintf(out, "%s\n", s) ;   //结果输出到文件指针out指向的文件out.dat中 }fclose(in) ;//关闭fclose(out) ;
}

解题思路:
题目代码中的思路是先用while循环统计出了*个数n,也使指针p指向了前导*结束后的第一个字符,就以题目中例子p指向了字符串中的A,再下一句q=a,就应该知道应该是*p=*q,两个指针都向后移的方式来实现向前复制字符串,字符串前移完后,此时q为字符串的末尾,接上*

答案:

1.自己做的:

#include <stdio.h>
void  fun( char *a )
{/* 以下代码仅供参考 */char *p,*q;int n=0;p=a;while(*p=='*')  /* 统计串头'*'个数n */{n++; p++;}q=a;/* 向前复制字符串,请填写相应的语句完成其功能 */while(*p!='\0')//就跟我在解题思路里说的一样的{*q=*p;q++;p++;}for(;n>0;n--)  /* 在串尾补n个'*' */*q++='*';*q='\0';  
}main()
{  char  s[81];  int  n=0; void NONO ();printf("Enter a string:\n");gets(s);fun( s );printf("The string after moveing:\n");puts(s);NONO();getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i ; char s[81] ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {fscanf(in, "%s", s) ;fun(s) ;fprintf(out, "%s\n", s) ;    }fclose(in) ;fclose(out) ;
}

2.题库答案:

#include <stdio.h>
void  fun( char *a )
{/* 以下代码仅供参考 */char *p,*q;int n=0;p=a;while(*p=='*')  /* 统计串头'*'个数n */{n++; p++;}q=a;/* 向前复制字符串,请填写相应的语句完成其功能 */while(*p)//他循环条件简写了下{*q=*p;q++;p++;}for(;n>0;n--)  /* 在串尾补n个'*' */*q++='*';*q='\0';  
}main()
{  char  s[81];  int  n=0; void NONO ();printf("Enter a string:\n");gets(s);fun( s );printf("The string after moveing:\n");puts(s);NONO();getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i ; char s[81] ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {fscanf(in, "%s", s) ;fun(s) ;fprintf(out, "%s\n", s) ;    }fclose(in) ;fclose(out) ;
}

测试:

main函数:
在这里插入图片描述

in.dat:
在这里插入图片描述

out.dat:
在这里插入图片描述

35.将一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回

请编写函数fun,其功能是:将一组得分中,去掉一个最高分和一个最低分,然后求

平均值,并通过函数返回。函数形参a指向存放得分的数组,形参n中存放得分个数(n>2) 。

例如,若输入9.9 8.5 7.6 8.5 9.3 9.5 8.9 7.8 8.6 8.4十个得分,则输出结果为:8.687500。

注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

PROG1.C:

#include  <stdio.h>
void NONO();
double fun(double  a[ ] , int  n)
{}main()
{  double  b[10],  r;    int  i;printf("输入10个分数放入b数组中 :  ");for (i=0; i<10; i++)   scanf("%lf",&b[i]);printf("输入的10个分数是 :  ");for (i=0; i<10; i++)   printf("%4.1lf ",b[i]);    printf("\n");r = fun(b, 10);printf("去掉最高分和最低分后的平均分 :  %f\n", r );NONO();getchar();
}void NONO()//系统用于评分测试的函数
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j ;double b[10], r ;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {//有10组测试数据for(j = 0 ; j < 10 ; j++) {fscanf(fp, "%lf ", &b[j]) ;//从文件指针fp指向的文件in.dat中获取数组b}r = fun(b, 10) ;//返回平均值fprintf(wf, "%f\n", r) ;//结果输出到文件指针wf指向的文件out.dat中}fclose(fp) ;//关闭fclose(wf) ;
}

解题思路:
设两个变量,一个存最大值max,一个存最小值min,再设个avg,这三个变量都初始化为a[0],还有注意这三个变量都要设为浮点型,要筛出max和min要设一个循环遍历所有得分,在此之中可以让avg累加为所有得分之和,之后再减去max和min,再除以n-2即为平均值了

答案:

1.自己做的:

#include  <stdio.h>
void NONO();
double fun(double  a[ ] , int  n)
{
double max=a[0],min=a[0];
double avg=a[0];
for(int i=1;i<n;i++)//因为初始化为a[0]了,下标从1开始
{if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];avg+=a[i];
}
avg=avg-max-min;
avg=avg/(n-2);
return avg;
}main()
{  double  b[10],  r;    int  i;printf("输入10个分数放入b数组中 :  ");for (i=0; i<10; i++)   scanf("%lf",&b[i]);printf("输入的10个分数是 :  ");for (i=0; i<10; i++)   printf("%4.1lf ",b[i]);    printf("\n");r = fun(b, 10);printf("去掉最高分和最低分后的平均分 :  %f\n", r );NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j ;double b[10], r ;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {for(j = 0 ; j < 10 ; j++) {fscanf(fp, "%lf ", &b[j]) ;}r = fun(b, 10) ;fprintf(wf, "%f\n", r) ;}fclose(fp) ;fclose(wf) ;
}

2.题库答案:

#include  <stdio.h>
void NONO();
double fun(double  a[ ] , int  n)//大差不差,还是我那个思路
{double min,max,s,avg;int i;min=a[0];max=a[0];s=0.0;avg=0.0;for(i=0;i<n;i++){if(min>a[i])min=a[i];if(max<a[i])max=a[i];s+=a[i];}avg=(s-min-max)/(n-2);return avg;
}main()
{  double  b[10],  r;    int  i;printf("输入10个分数放入b数组中 :  ");for (i=0; i<10; i++)   scanf("%lf",&b[i]);printf("输入的10个分数是 :  ");for (i=0; i<10; i++)   printf("%4.1lf ",b[i]);    printf("\n");r = fun(b, 10);printf("去掉最高分和最低分后的平均分 :  %f\n", r );NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j ;double b[10], r ;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {for(j = 0 ; j < 10 ; j++) {fscanf(fp, "%lf ", &b[j]) ;}r = fun(b, 10) ;fprintf(wf, "%f\n", r) ;}fclose(fp) ;fclose(wf) ;
}

测试:

main函数:
在这里插入图片描述

in.dat:
在这里插入图片描述

out.dat:
在这里插入图片描述

36.将具有n个元素的形参数组x中的偶数依原顺序输出到字符数组str中,每个数字后面加一个小数点,并生成一个结果字符串str由函数返回

请编写函数fun,其功能是:将具有n个元素的形参数组x中的偶数依原顺序输出到字符数

组str中,每个数字后面加一个小数点,并生成一个结果字符串str由函数返回。

例如:当数组x内容为1, 4, 19, 82, 61,2,输出结果是: 4. 82.2.

注意:部分源程序在文件PROG1. C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

PROG1. C:

#include <stdio.h>
#include <string.h>/* 函数int_to_str的功能是将参数n中的整数转换成字符串,存入s指内存中 */
void int_to_str(int n,char *s)
{sprintf(s,"%d",n);	//这个函数我还是第一次见,就是打印到字符串,在解题思路细讲
}char  *fun(int x[], int n)
{static char str[200],s[10];int i;*str = 0;/* 请在这里填入你编写的代码*/return str;
}int main()
{void NONO();int x[] = {1,4,19,82,61,2};printf("str=%s\n", fun(x, 6));NONO();return 0;
}void NONO()//系统用于评分测试的函数
{int i;int x[10][20] = {{11,5,6,8,9,18,54},{1,4,19,82,61,2},{87,78,54,32},{9,1,2,3,4,67,8,12},{91,12,33,55,66},{9,7,8,5,6,4,3,2,1,12},{12,13,14,15,11,16,17,18},{21,23,22,24,25,26,27,28,29},{33,32,31,41,42,43,51,42,53,54,66},{71,72,81,82,91,92}};//这回没有弄in.dat这样的输出,直接弄了个10行的数组,也就是10组测试数据,int y[10] ={7,6,4,8,5,10,8,9,11,6};//数组y里的元素是每组测试数据的元素个数FILE *fp;fp = fopen("out.dat","w") ;for(i = 0; i< 10; i++)//10组测试fprintf(fp, "str=%s\n", fun(x[i], y[i]));//结果输出到文件指针fp指向的文件out.dat中fclose(fp);}

解题思路:

int sprintf(char *str, const char *format, ...)

str – 这是指向一个字符数组的指针,该数组存储了 C 字符串。
format – 这是字符串,包含了要被写入到字符串 str 的文本。

嗯,用中文形容参数就是
int sprintf(指向字符串的指针,“输出到字符串的”);

sprintf()函数的头文件是#include<stdio.h>,sprintf函数打印到字符串中(要注意字符串的长度要足够容纳打印的内容,否则会出现内存溢出),sprintf()函数在我们完成其他诗句类型转换成字符串类型的操作中应用广泛

呃,举个例子吧,就以题目这个sprintf(s,"%d",n),如果n=65,
执行sprintf(s,"%d",65);,那字符串s=“65”,
如果执行sprintf(s,“%c”,65),那打印入字符串的就是A,举了例子这样应该好理解多了吧

回到题目,设一指针p指向数组str,筛出数组x中的偶数,用题目给的int_to_str存入数组str,且求出该数的长度len,然后执行p=p+len,题目说每个数字后毒药价格小数点,*p='.',然后如此循环存入就可以了

答案:

1.自己做的:

#include <stdio.h>
#include <string.h>/* 函数int_to_str的功能是将参数n中的整数转换成字符串,存入s指内存中 */
void int_to_str(int n,char *s)
{sprintf(s,"%d",n);	
}char  *fun(int x[], int n)
{static char str[200],s[10];int i;*str = 0;/* 请在这里填入你编写的代码*/char *p=str;
for(i=0;i<n;i++)
{if(x[i]%2==0)//筛出偶数{int_to_str(x[i],p);int len=0;//该数长度while(x[i]){x[i]/=10;len++;}p+=len;//指针后移*p='.';//在数的末尾加小数点p++;//指针再后移一位}
}*p='\0';//字符串结束符return str;
}int main()
{void NONO();int x[] = {1,4,19,82,61,2};printf("str=%s\n", fun(x, 6));NONO();return 0;
}void NONO()
{int i;int x[10][20] = {{11,5,6,8,9,18,54},{1,4,19,82,61,2},{87,78,54,32},{9,1,2,3,4,67,8,12},{91,12,33,55,66},{9,7,8,5,6,4,3,2,1,12},{12,13,14,15,11,16,17,18},{21,23,22,24,25,26,27,28,29},{33,32,31,41,42,43,51,42,53,54,66},{71,72,81,82,91,92}};int y[10] ={7,6,4,8,5,10,8,9,11,6};FILE *fp;fp = fopen("out.dat","w") ;for(i = 0; i< 10; i++)fprintf(fp, "str=%s\n", fun(x[i], y[i]));fclose(fp);}

再来个借助函数的,思路是一样的,但方式有些不同:

#include <stdio.h>
#include <string.h>/* 函数int_to_str的功能是将参数n中的整数转换成字符串,存入s指内存中 */
void int_to_str(int n,char *s)
{sprintf(s,"%d",n);	
}char  *fun(int x[], int n)
{static char str[200],s[10];int i;*str = 0;/* 请在这里填入你编写的代码*/char *p=str;for(i=0;i<n;i++)//看起来比上面那个清爽多了{if(x[i]%2==0)//筛出偶数{int_to_str(x[i],s);//存入字符串,不过是先存入字符串s,用字符串s做一个过渡int len=strlen(s);//获取字符串s的长度,也就是获取当前这数的长度strcpy(p,s);//将字符串s复制给字符串strp+=len;//指针后移*p='.';//这些还是一样的p++;}}
*p='\0';return str;
}int main()
{void NONO();int x[] = {1,4,19,82,61,2};printf("str=%s\n", fun(x, 6));NONO();return 0;
}void NONO()
{int i;int x[10][20] = {{11,5,6,8,9,18,54},{1,4,19,82,61,2},{87,78,54,32},{9,1,2,3,4,67,8,12},{91,12,33,55,66},{9,7,8,5,6,4,3,2,1,12},{12,13,14,15,11,16,17,18},{21,23,22,24,25,26,27,28,29},{33,32,31,41,42,43,51,42,53,54,66},{71,72,81,82,91,92}};int y[10] ={7,6,4,8,5,10,8,9,11,6};FILE *fp;fp = fopen("out.dat","w") ;for(i = 0; i< 10; i++)fprintf(fp, "str=%s\n", fun(x[i], y[i]));fclose(fp);}

2.题库答案:

#include <stdio.h>
#include <string.h>/* 函数int_to_str的功能是将参数n中的整数转换成字符串,存入s指内存中 */
void int_to_str(int n,char *s)
{sprintf(s,"%d",n);	
}char  *fun(int x[], int n)
{static char str[200]={'\0'};//呃,原来是可以改动外边的吗,他这里初始化字符串str,后面就不用加字符串结束符int i,j;char* strP = str;//还是是用指针的/* 请在这里填入你编写的代码*///获取数组中的偶数for (i = 0;i < n;i++){if (x[i] % 2 == 0){int temp = x[i];char s[10]={'\0'};char* strP2 = s;//呃,令人疑惑的操作,感觉多此一举//获取整数的每一位并记录在s[10]中while (temp) {int_to_str(temp % 10, strP2++);//他是每次存入一位数,这样就不用去判断该数的长度了temp /= 10;}//反向取出每一位并赋值给str[200]这个里面for ( j=(strP2-s-1);j>=0;j--){*strP = s[j];++strP;}//添加小数点*strP = '.';++strP;}}return str;
}int main()
{void NONO();int x[] = {1,4,19,82,61,2};printf("str=%s\n", fun(x, 6));NONO();return 0;
}void NONO()
{int i;int x[10][20] = {{11,5,6,8,9,18,54},{1,4,19,82,61,2},{87,78,54,32},{9,1,2,3,4,67,8,12},{91,12,33,55,66},{9,7,8,5,6,4,3,2,1,12},{12,13,14,15,11,16,17,18},{21,23,22,24,25,26,27,28,29},{33,32,31,41,42,43,51,42,53,54,66},{71,72,81,82,91,92}};int y[10] ={7,6,4,8,5,10,8,9,11,6};FILE *fp;fp = fopen("out.dat","w") ;for(i = 0; i< 10; i++)fprintf(fp, "str=%s\n", fun(x[i], y[i]));fclose(fp);}

测试:

main函数:
在这里插入图片描述

out.dat:
在这里插入图片描述

37.分别统计形参t所指二维数组中字母A和C的个数

请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。

注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

PROG1.C:

#include  <stdio.h>
#include  <stdlib.h>
#define  M  14
void NONO();
void  fun( char (*t)[M], int *a ,int *c)
{}void  get( char (*s)[M] )//这个函数是获取二维数组的
{  int  i, j;for( i=0; i<M; i++ ){  for( j=0; j<M; j++){  s[i][j]=65+rand()%12; printf( "%c ",s[i][j]); }//元素是用随机数函数rand()得出的,范围65+为0到11,printf("\n");}
}main()
{  char  a[M][M];int   x, y;get (a);fun ( a, &x,&y );printf("A = %d   C = %d\n",x,y);NONO();getchar();
}void NONO()//系统用于评分测试的函数
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j, x, y ;char  a[M][M];fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for( i=0; i<M; i++ )//就一组测试数据{  for( j=0; j<M; j++){  fscanf(fp, "%c ", &a[i][j]); }//从文件指针fp指向的文件in.dat中获取数组a}fun ( a, &x,&y );fprintf(wf, "A=%d\n", x) ;//结果输出到文件指针wf指向的文件out.dat中fprintf(wf, "C=%d\n", y) ;fclose(fp) ;//关闭fclose(wf) ;
}

解题思路:

随机数函数公式:rand()%(n-m+1)+m,随机数范围为[m,n]

题目很简单,就是遍历二维数组筛出字符’A’,'C’的个数,但要注意*a,*c可都没有初始化,要先初始化为0,

答案:

1.自己做的:

#include  <stdio.h>
#include  <stdlib.h>
#define  M  14
void NONO();
void  fun( char (*t)[M], int *a ,int *c)
{*a=0,*c=0;//初始化for(int i=0;i<M;i++)
{for(int j=0;j<M;j++){if(t[i][j]=='A')(*a)++;//记得打个括号,让其先执行解引符*if(t[i][j]=='C')(*c)++;}
}}void  get( char (*s)[M] )
{  int  i, j;for( i=0; i<M; i++ ){  for( j=0; j<M; j++){  s[i][j]=65+rand()%12; printf( "%c ",s[i][j]); }printf("\n");}
}main()
{  char  a[M][M];int   x, y;get (a);fun ( a, &x,&y );printf("A = %d   C = %d\n",x,y);NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j, x, y ;char  a[M][M];fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for( i=0; i<M; i++ ){  for( j=0; j<M; j++){  fscanf(fp, "%c ", &a[i][j]); }}fun ( a, &x,&y );fprintf(wf, "A=%d\n", x) ;fprintf(wf, "C=%d\n", y) ;fclose(fp) ;fclose(wf) ;
}

2.题库答案:

#include  <stdio.h>
#include  <stdlib.h>
#define  M  14
void NONO();
void  fun( char (*t)[M], int *a ,int *c)
{int i,j;*a=0;*c=0;for(i=0;i<M;i++){for(j=0;j<M;j++){if(t[i][j]==67){//这里他用ASCII码*c=*c+1;}else if(t[i][j]==65){*a=*a+1;}elsecontinue;//continue是跳过了当前循环,算是提速了}}
}void  get( char (*s)[M] )
{  int  i, j;for( i=0; i<M; i++ ){  for( j=0; j<M; j++){  s[i][j]=65+rand()%12; printf( "%c ",s[i][j]); }printf("\n");}
}main()
{  char  a[M][M];int   x, y;get (a);fun ( a, &x,&y );printf("A = %d   C = %d\n",x,y);NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j, x, y ;char  a[M][M];fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for( i=0; i<M; i++ ){  for( j=0; j<M; j++){  fscanf(fp, "%c ", &a[i][j]); }}fun ( a, &x,&y );fprintf(wf, "A=%d\n", x) ;fprintf(wf, "C=%d\n", y) ;fclose(fp) ;fclose(wf) ;
}

测试:

main函数:
在这里插入图片描述

in.dat:
在这里插入图片描述

out.dat:
在这里插入图片描述

38.查找x在s所指数组中下标的位置作为函数值返回,若x不存在,则返回-1

请编写函数fun,函数的功能是查找x在s所指数组中下标的位置作为函数值返回,若x不存在,则返回-1。

注意:部分源程序存在PROG1.C中,请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

PROG1.C:

#include  <stdio.h>
#include  <stdlib.h>
#define   N   15
void NONO();
int  fun( int *s, int x)
{}
main()
{  int a[N]={ 29,13,5,22,10,9,3,18,22,25,14,15,2,7,27},i,x,index;printf("a数组中的数据 :\n");for(i=0; i<N; i++) printf("%4d",a[i]);  printf("\n");printf("给x输入待查找的数 :  ");   scanf("%d",&x);index=fun( a, x );printf("index=%d\n",index);NONO();getchar();
}void NONO()//系统用于评分测试的函数
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j, a[10], x, index;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {//有10组测试数据for(j = 0 ; j < 10 ; j++) {fscanf(fp, "%d ", &a[j]);//从文件指针fp指向的文件in.dat获取数组a}fscanf(fp, "%d", &x);//从文件指针指向的文件in.dat获取xindex = fun(a, x);fprintf(wf, "%d\n", index);//结果输出到文件指针wf指向的out.dat中}fclose(fp);//关闭fclose(wf);
}

解题思路:
考查从数组里筛出一个元素,返回下标,这题应该是这篇最简单的了,真希望考试是这道题

答案:

1.自己做的:

#include  <stdio.h>
#include  <stdlib.h>
#define   N   15
void NONO();
int  fun( int *s, int x)
{
for(int i=0;s[i];i++)//这么简单就不多说了
if(s[i]==x)
return i;
return -1;
}
main()
{  int a[N]={ 29,13,5,22,10,9,3,18,22,25,14,15,2,7,27},i,x,index;printf("a数组中的数据 :\n");for(i=0; i<N; i++) printf("%4d",a[i]);  printf("\n");printf("给x输入待查找的数 :  ");   scanf("%d",&x);index=fun( a, x );printf("index=%d\n",index);NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j, a[10], x, index;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {for(j = 0 ; j < 10 ; j++) {fscanf(fp, "%d ", &a[j]);}fscanf(fp, "%d", &x);index = fun(a, x);fprintf(wf, "%d\n", index);}fclose(fp);fclose(wf);
}

2.题库答案:

#include  <stdio.h>
#include  <stdlib.h>
#define   N   15
void NONO();
int  fun( int *s, int x)
{int i;for(i=0;i<N;i++){if(s[i]==x)return i;}
return -1;
}
main()
{  int a[N]={ 29,13,5,22,10,9,3,18,22,25,14,15,2,7,27},i,x,index;printf("a数组中的数据 :\n");for(i=0; i<N; i++) printf("%4d",a[i]);  printf("\n");printf("给x输入待查找的数 :  ");   scanf("%d",&x);index=fun( a, x );printf("index=%d\n",index);NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, j, a[10], x, index;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {for(j = 0 ; j < 10 ; j++) {fscanf(fp, "%d ", &a[j]);}fscanf(fp, "%d", &x);index = fun(a, x);fprintf(wf, "%d\n", index);}fclose(fp);fclose(wf);
}

测试:

main函数:
在这里插入图片描述

in.dat:
在这里插入图片描述

out.dat:
在这里插入图片描述

39.判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回

请编写函数fun,其功能是:判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。

例如:若输入的数据为123,则输出结果为:输入的数字是3位。

注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

PROG1.C:

#include  <stdio.h>
void NONO();
int  fun(int  n)
{}
main()
{  int  n, place ;do{printf("请输入一个4位以内的正整数:    ");scanf("%d", &n);}  while (n<0 || n>9999);//do-while循环限制了输入的n为[0,9999]范围内才会跳出循环place = fun(n);printf( "输入的数字是%d位\n", place );NONO();getchar();
}void NONO()//系统用于评分测试的函数
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, n, place ;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for( i=0; i<10; i++ )//有10组测试数据{fscanf(fp, "%d ", &n);//从文件指针fp指向的文件in.dat获取nplace = fun(n);fprintf(wf, "%d\n", place);//结果输出到文件指针wf指向的文件out.dat中}fclose(fp) ;//关闭fclose(wf) ;
}

解题思路:
这题很简单,不多说了ヾ(•ω•`)o

答案:

1.自己做的:

#include  <stdio.h>
void NONO();
int  fun(int  n)
{
int i=0;
while(n)
{
n/=10;
i++;
}
return i;
}
main()
{  int  n, place ;do{printf("请输入一个4位以内的正整数:    ");scanf("%d", &n);}  while (n<0 || n>9999);place = fun(n);printf( "输入的数字是%d位\n", place );NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, n, place ;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for( i=0; i<10; i++ ){fscanf(fp, "%d ", &n);place = fun(n);fprintf(wf, "%d\n", place);}fclose(fp) ;fclose(wf) ;
}

2.题库答案:

#include  <stdio.h>
void NONO();
int  fun(int  n)
{int k=0;while(n!=0){n=n/10;k++;}return k;
}
main()
{  int  n, place ;do{printf("请输入一个4位以内的正整数:    ");scanf("%d", &n);}  while (n<0 || n>9999);place = fun(n);printf( "输入的数字是%d位\n", place );NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i, n, place ;fp = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;for( i=0; i<10; i++ ){fscanf(fp, "%d ", &n);place = fun(n);fprintf(wf, "%d\n", place);}fclose(fp) ;fclose(wf) ;
}

测试:

main函数:
在这里插入图片描述

in.dat:
在这里插入图片描述

out.dat:
在这里插入图片描述

40.除了字符串前导的*号之外,将串中其它*号全部删除

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。

例如,字符串中的内容为:****A*BC*DEF*G******,删除后,字符串中的内容应当是:****ABCDEFG

注意:部分源程序存在文件prog1.c中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

prog1.c:

#include <stdio.h>
void  fun( char *a )
{/* 以下代码仅供参考 */int i=0,k;while(a[i]=='*') i++;//把前导*遍历完了k=i;while(a[i]!='\0')  /* 以下程序段实现非*字符前移 */{}a[k]='\0';
}main()
{  char  s[81];void NONO ();printf("Enter a string:\n");gets(s);fun( s );printf("The string after deleted:\n");puts(s);NONO();getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i ; char s[81] ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {//有10组测试数据fscanf(in, "%s", s) ;//从文件指针in指向的文件in.dat获取字符串sfun(s) ;fprintf(out, "%s\n", s) ;    //结果输出到文件指针out指向的文件out.dat中}fclose(in) ;//关闭fclose(out) ;
}

解题思路:
总之我是用前移的方式,覆盖掉*号,我的方法我感觉很笨,具体的看代码吧

1.自己做的:(我觉得我这个应该有很大的进步空间换言之写的感觉有点烂)

#include <stdio.h>
void  fun( char *a )
{/* 以下代码仅供参考 */int i=0,k;while(a[i]=='*') i++;k=i;while(a[i]!='\0')  /* 以下程序段实现非*字符前移 */{if(a[i]=='*'){k=i;while(a[k+1]!='\0')//数组元素前移,覆盖掉*号{a[k]=a[k+1];k++;}a[k]='\0';//看题目有的字符串后面有*,依题意这些*是要去掉的,赋予字符串末尾为空字符的方式去掉末尾*i--;//这是为了处理连续*号的情况}   i++;}a[k]='\0';
}main()
{  char  s[81];void NONO ();printf("Enter a string:\n");gets(s);fun( s );printf("The string after deleted:\n");puts(s);NONO();getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i ; char s[81] ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {fscanf(in, "%s", s) ;fun(s) ;fprintf(out, "%s\n", s) ;    }fclose(in) ;fclose(out) ;
}

2.题库答案:

#include <stdio.h>
void  fun( char *a )//他这个好,这思路对比我的简直神了,太妙了
{/* 以下代码仅供参考 */int i=0,k;while(a[i]=='*') i++;k=i;while(a[i]!='\0')  /* 以下程序段实现非*字符前移 */{if(a[i]!='*') a[k++]=a[i];//这里就是把字母筛出接在前导*号后i++;}a[k]='\0';//再以空字符结束字符串
}main()
{  char  s[81];void NONO ();printf("Enter a string:\n");gets(s);fun( s );printf("The string after deleted:\n");puts(s);NONO();getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i ; char s[81] ;in = fopen("in.dat","r") ;out = fopen("out.dat","w") ;for(i = 0 ; i < 10 ; i++) {fscanf(in, "%s", s) ;fun(s) ;fprintf(out, "%s\n", s) ;    }fclose(in) ;fclose(out) ;
}

没话说,这段题库答案确实好,可以多看看这个思路

测试:

main函数:
在这里插入图片描述

in.dat:
在这里插入图片描述

out.dat:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法---滑动窗口练习-7(串联所有单词的子串)

串联所有单词的子串 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;串联所有单词的子串 2. 讲解算法原理 算法的基本思想是使用滑动窗口来遍历字符串s&#xff0c;并利用两个哈希表&#xff08;hash1和hash2&#xff09;来统计窗口中子串的频次。 …

docker容器技术基础入门-1

文章目录 容器(Container)传统虚拟化与容器的区别Linux容器技术Linux NamespacesCGroupsLXCdocker基本概念docker工作方式docker容器编排 容器(Container) 容器是一种基础工具&#xff1b;泛指任何可以用于容纳其他物品的工具&#xff0c;可以部分或完全封闭&#xff0c;被用于…

#QT(定时轮播电子相册)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a; &#xff08;1&#xff09;使用QOBJECT的TIMER &#xff08;2&#xff09;EVENT时间 &#xff08;3&#xff09;多定时器定时溢出判断 &#xff08;4&#xff09;QLABEL填充图片 3.记录 4.代码 widget.h #ifndef WIDGET_H…

批量查询快递不再难,前缀单号助你轻松搞定!

在快递业务日益繁忙的当下&#xff0c;批量查询快递单号成为了许多人的迫切需求。如何能够快速、准确地找到所需的快递单号呢&#xff1f;其实&#xff0c;利用前缀单号进行批量查询是一个高效且实用的方法。下面&#xff0c;就让我们一起了解如何利用前缀单号轻松查找快递单号…

Yolo系列算法-理论部分-YOLOv3

0. 写在前面 YOLO系列博客&#xff0c;紧接上一篇Yolo系列算法-理论部分-YOLOv2-CSDN博客 1. YOLOv3-定型之作 2018年&#xff0c;Redmon团队推出YOLOv3的网络模型&#xff0c;将骨干网络&#xff08;backbone&#xff09;由darknet-19替换成darknet-53网络&#xff0c;加入特…

如何在CasaOS系统玩客云中安装内网穿透工具实现远程访问内网主机下载资源

文章目录 1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 2月底&#xff0c;玩客云APP正式停止运营&#xff0c;不再提供上传、云添加功能。3月初&#xff0c;有用户进行了测试&#xff0c;局域网内的各种服务还能继续使用&#xff0c;但…

unity学习(60)——选择角色界面--MapHandler2-MapHandler.cs

1.新建一个脚本&#xff0c;里面有static变量loadingPlayerList using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Assets.Scripts.Model {internal class LoadData{public static List<Pl…

Go-知识select

Go-知识select 1. select 的特性1.1 chan读写1.2 返回值1.3 default 2. select 经典使用2.1 永久阻塞2.2 快速检错2.3 限时等待 3. 实现原理3.1 数据结构3.2 实现逻辑3.3 原理总结 4. 总结4.1 大概原理4.2 参数4.3 返回值 一个小活动&#xff1a; https://developer.aliyun.com…

springboot基于SpringBoot的学生请假管理系统的设计与实现

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对学生请假管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上…

江科大stm32学习笔记【6-2】——定时器定时中断定时器外部时钟

一.定时器定时中断 1.原理 2.硬件 3.程序 此时CK_PSC72M&#xff0c;定时1s&#xff0c;也就是定时频率为1Hz&#xff0c;所以可以PSC7200-1,ARR10000-1。 Timer.c: #include "stm32f10x.h" // Device headerextern uint16_t Num;//声明跨文件的…

力扣经典题:分割平衡字符串

大佬的代码非常简洁 int balancedStringSplit(char * s){short i0,count0,sign0;while(s[i]){signs[i]L?sign1:sign-1;if(sign0) count;}return count; }

Transformer代码从零解读【Pytorch官方版本】

文章目录 1、Transformer大致有3大应用2、Transformer的整体结构图3、如何处理batch-size句子长度不一致问题4、MultiHeadAttention&#xff08;多头注意力机制&#xff09;5、前馈神经网络6、Encoder中的输入masked7、完整代码补充知识&#xff1a; 1、Transformer大致有3大应…

第十四届蓝桥杯省赛真题 Java A 组【原卷】

文章目录 发现宝藏【考生须知】试题 A \mathrm{A} A : 特殊日期试题 B: 与或异或试题 C : \mathrm{C}: C: 平均试题 D: 棋盘试题 E : \mathrm{E}: E: 互质数的个数试题 F: 阶乘的和试题 G: 小蓝的旅行计划试题 H: 太阳试题 I: 高塔试题 J \mathrm{J} J : 反异或 01 串 发现…

ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)

ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件) 今天借助[小蜜蜂AI][https://zglg.work]网站的ChatGPT编程实现一个功能&#xff1a;批量处理文件及其内容&#xff0c;例如批量替换文本、批量处理图像文件等。 环境&#xff1a;Pycharm 2021 系统&#xff1a…

NVENC 视频编码器 API 编程指南 ( 中文转译 )

基于 NVIDIA Kepler™ 和更高版本 GPU 架构的 NVIDIA GPU 包含基于硬件的 H.264/HEVC/AV1 视频编码器&#xff08;以下简称 NVENC&#xff09;。NVENC 硬件采用 YUV/RGB 作为输入&#xff0c;并生成符合H.264/HEVC/AV1 标准的视频比特流。可以使用 NVIDIA 视频编解码器 SDK 中提…

挑战杯 机器视觉人体跌倒检测系统 - opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…

蓝桥:硬币兑换(python)

问题描述&#xff1a; 小蓝手中有2023种不同面值的硬币,这些硬币全部是新版硬币,其中第i(1≤i≤2023)种硬币的面值为i,数量他为i个。硬币兑换机可以进行硬币兑换&#xff0c;兑换规则为:交给硬币兑换机两个新版硬币coin1和coin2,硬币兑换机会兑换成一个面值为coin1十coin2的旧…

使用C语言计算1/1-1/2+1/3-1/4+...+1/99-1/100

观察算式&#xff0c;发现分子都是1&#xff0c;分母从1~100&#xff0c;所以可以使用for循环产生1~100之间的数。 另一个问题是&#xff0c;如何产生正负交替的符号&#xff1f;很简单&#xff0c;这个符号本质上就是往每一项前面乘一个系数&#xff1a;一或者负一。所以只需…

008:安装Docker

安装Docker 如果不太熟悉Linux命令&#xff0c;不想学习Linux命令&#xff0c;可以直接看文末NAS面板章节&#xff0c;通过面板&#xff0c;像使用Window一样操作NAS。 一、安装 Docker 1.安装 Docker wget -qO- https://get.docker.com/ | sh2.启动 Docker 服务 sudo sys…

算法练习:二分查找

目录 1. 朴素二分查找2. 在排序数组中查找元素的第一个和最后一个位置3. 搜索插入位置4. x的平方根5. 山脉数组的峰值索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 1. 朴素二分查找 题目信息&#xff1a; 题目链接&#xff1a; 二分查找二分查找的使用前提为数据具有&…