计算机二级C语言程序设计题

114 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

计算机二级C语言程序设计题

题目:

假定输入的字符串中只包含字母和号。请编写函数fun(),它的功能是:除了字符串前导的号之外,将串中其他号全部删除。在编写函数时,不得使用C语言提供的字符串函数。例如字符串中的内容为:*****ABCDEFG********,删除后,字符串中的内容应当是:ABCDEFG***。

#include <stdio.h>
#include <stdlib.h>
void fun(char *a, char *h,char *p)
{
?
}
main()
{
	char s[81],*t, *f;
	void NONO ();
	printf("Enter a string:\n");
	gets(s);
	t=f=s;
	while(*t)
	{
		t++;
	}
	t--;
	while(*t=='*')
	{
		t--;
	}
	while(*f=='*')
	{
		f++;
	}
	fun(s, f, t);
	printf("The string after deleted:\n");
	puts(s);
	NONO();
	system("pause");
}
void NONO()
{/* 本函数用于打开文件,输入数据,
 调用函数,输出数据,关闭文件。 */
	FILE *rf, *wf;
	int i; 
	char s[81], *t, *f;
	rf=fopen("in.dat","r");
	wf=fopen("out.dat","w");
	for(i=0; i<8; i++) 
	{
		fscanf(rf, "%s", s);
		t=f=s;
		while(*t)
		{
			t++;
		}
		t--;
		while(*t=='*')
		{
			t--;
		}
		while(*f=='*')
		{
			f++;
		}
		fun(s, f, t);
		fprintf(wf, "%s\n", s);
	}
	fclose(rf);
	fclose(wf);
}

题目分析:

将字符串进行定位,字符串前后的不变,字符串中间的号进行删减。

解题思路:

h和p分别指向第一个和最后一个字母,先将前面的号进行保存,再保存中间的不是号字符,然后保存末尾的*号,最后加上结束标识符。

参考答案:

void fun(char *a, char *h,char *p)
{
	int i=0;
	char *k=a;
	/*将前导*号保存到a中*/
	while(k<h)
	{
		a[i]=*k;
		k++;
		i++;
	}
	/*遍历中间的非*号字符*/
	while(k<p)
	{
		/*如果不是*号则保存到a中*/
		if(*k!='*')
		{
			a[i]=*k;
			i++;
		}
		k++;
	}
	/*将末尾*号继续保存到a中*/
	while(*k)
	{
		a[i]=*k;
		i++;
		k++;
	}
	a[i]='\0';
}

结果如下:

111.png

补充:

  1. 使用printf和scanf函数时,要在最前面加上#include“stdio.h”
  2. printf可以只有一个参数,也可以有两个参数。
  3. printf(“ 第一部分 ”,第二部分 );把第二部分的变量、表达式、常量以第一部分的形式展现出来!