C语言的两个题
发布网友
发布时间:2023-07-12 15:36
我来回答
共3个回答
热心网友
时间:2024-10-20 09:09
第一题答案:
#include<stdio.h>
#include<string.h>
void main()
{
char s[100];
int i,num=0,word=0;
char c;
gets(s);
for(i=0;(c=s[i])!='\0';i++)
{ if(c==' ') word=0;
else if(word==0)
{
word=1;
num++;
}
}
printf("There are %d word in the line.\n",num);
puts(s);
}
第二题的答案如下:
#include <stdio.h>
#include <math.h>
void main()
{
int n,i,j,f,k,x,m=0;
for(x=6;x<=100;x++)
{
if(x%2==0)
{
n=x;
for(i=3;i<=n;i+=2)
{
for(k=2;k<=sqrt(i);k++)
{
f=1;
if(i%k==0)
{
f=0;
break;
}
}
if(f==1)
j=n-i;
for(k=2;k<=sqrt(j);k++)
{
f=1;
if(j%k==0)
{
f=0;
break;
}
}
if(f==1)
{
printf("%d=%d+%d\t\t",n,i,j);
break;
}
}
m++;
if(m%5==0)
printf("\n");
}
}
}
热心网友
时间:2024-10-20 09:10
1.#include<stdio.h>
void GetStr(char *str){/*自定义一个可以接受输入空格生成字符串的函数*/
int i=0;
while((str[i++]=getchar())!='\n');
str[i]=0;
}
int main(){
int ri, repeat;
int count[10], word, i;
char str[100];
scanf("%d", &repeat);
for(ri=0; ri<repeat; ri++){
count[ri]=word=0;
/*scanf("%s",str);
不能用此函数读取一句话,字符串会在遇到空格时结束
*/
getchar();/*此处用此函数用于去除前面输入的回车换行*/
GetStr(str);
i=0;
while(str[i]!='\0'){
/*putchar(str[i]);*/
if(str[i]!=' ' && str[i]!='\t')word++;/*累计字母数*/
else{
if(word){/*字母数>0,存在单词*/
word=0;
++count[ri];
}
}
i++;
}
if(word)++count[ri];
}
for(ri=0;ri<repeat;ri++)
printf("%d\n", count[ri]);
getch();
}
2. 后面这个我不会··哥德*猜想现在还是国际难题,拿来这里问肯定不会有结果啊……
热心网友
时间:2024-10-20 09:10
第一题:
#include <stdio.h>
void main()
{
int i,count=0;
char a[100];
gets(a);
for(i=0;a[i]!='\0';i++)
if(a[i]==' '&&a[i+1]!=' '&&a[i+1]!='\0')
count++;
if(a[0]==' ')
printf("%d\n",count);
else
printf("%d\n",count+1);
这道题可以把字符数组取得大点防止溢出,还可以防止一上来就输入空格的情况~
汗,第三次修改,修正了单词末尾输入空格的漏洞
-------------------------------
第二题:
#include <stdio.h>
#include <math.h>
int Sus(int,int);
void main()
{
int i,j,count;
for(i=6;i<=100;i+=2)
{
for(j=i/2-1;j>=3;j--) //对每一个偶数去一半
{
if(Sus(i,j))
{
printf("%3d=%d+%d ",i,j,i-j);
count++;
if(count%5==0)
puts("");
}
}
}
}
int Sus(int i,int j) //判断每个偶数中值两边的数是否符合素数
{
int k=(int)sqrt(j);
int l=(int)sqrt(i-j);
int m,n;
for(m=2;m<=k;m++)
if(j%m==0) break;
if(m>k)
{
for(n=2;n<=l;n++)
if((i-j)%n==0) break;
if(n>l)
return 1; //符合返回1
else
return 0;
}
else
return 0;
}
这道题构造了一个函数,通过取中值判断的
希望能对楼主有帮助
祝楼主更上一层楼!