首页 > 软件 > C语言程序问题

C语言程序问题

软件 2024-04-17

C语言编程问题?

思路:

1、利用ftell函数获取文件的长度(字节数)。

2、利用fread函数读取文件所有内容。

3、通过遍历字符串,进行大小写判断及转换。

下面是演示代码:(命令符不想输入,连续两次回车)

#include

#include

#include

#define FPH "C:\\test.txt"

long getFileSize(char path[]);//获取文件长度

char *readFFile(char path[]);//获取文件内容

int printfStrsByCommand(char *strs,char *com);//通过命令符,打印对应格式的字符串内容

//com为命令符,如下:(缺省传NULL,程序取默认值-p)

//-p 按原样打印

//-u 把输入转换成大写

//-l 把输入转换成小写


int main()

{

int i=0;

char *strs=NULL,com[3]={0};

strs=readFFile(FPH);

printf("请输入打印输出样式的命令符(-p\\-u\\-l):");

while(i<2)com[i++]=getchar();

printfStrsByCommand(strs,com);

free(strs);//这个释放对本程序无意义,可删除,因为程序到此就结束了。

strs=NULL;//但是如你后面还添加其它代码,strs不再使用需这样释放。

return 0;

}

int printfStrsByCommand(char *strs,char *com)

{

char c[]="-p",*p=NULL;

if(strs)

{

if(!com) com=c;

if(!strcmp(com,"-u"))

{

p=strs;

while(*p)

{

if(*p>='a' && *p<='z')

*p^=32;

p++;

}

printf("转换成大写打印输出:\n");

}

if(!strcmp(com,"-l"))

{

p=strs;

while(*p)

{

if(*p>='A' && *p<='Z')

*p^=32;

p++;

}

printf("转换成小写打印输出:\n");

}

if(strcmp(com,"-p") && strcmp(com,"-u") && strcmp(com,"-l"))

printf("无效命令符!按-p打印输出:\n");

}

printf("%s\n",strs);

return 1;

}

long getFileSize(char path[])

{

long flen;

FILE *fp=NULL;

fp=fopen(path,"rb");

if(!fp) return -1;

fseek(fp,0L,SEEK_END);

flen=ftell(fp);

fclose(fp);

return flen;

}

char *readFFile(char path[])

{

long size=0;

char *strs=NULL;

FILE *fp=NULL;

fp=fopen(path,"rb");

if(!fp){fclose(fp);return NULL;}

fseek(fp,0L,SEEK_SET);

size=getFileSize(FPH);

strs=(char *)malloc(sizeof(char)*(size+1));

if(!strs){{fclose(fp);return NULL;}}

if(fread(strs,1,size,fp)

{

free(strs);

fclose(fp);

return NULL;

}

strs[size]=0;

fclose(fp);

return strs;

}

C语言基本问题有哪些?

一、C语言规定总是从main()开始执行的(这个函数也叫“主函数”)。因此,你发来的题目中的(1、6、8)叙述都是错误的,都应该选择F。\x0d\x0a二、第2题中,C语言对其数据在内存中所占用的实际字节数,随着程序中声明的数据类型以及数据的多少而变化,C语言本身并没有明确规定。这题应该选F。\x0d\x0a\x0d\x0a三、第3题,C语言中强制类型转换,仅对转换的语句有效,而不会改变所转换变量的原有数据类型,这是正确的,应该选T。\x0d\x0a\x0d\x0a四、第4题,i=8,j=10;printf("%d,%d,%d,%d\n",i,j,++i,j++);实际上是一个程序执行类题目,执行这一句时,先取得ij变量的值,其中有一个++i(先自增),一个j++(后自增),先自增的i先加上1,也就是i=8+1=9,而后自增的j在打印之后再加1,所以打印时仍是j=10。所以打印出来是:9 10 9 10。这是正确的。\x0d\x0a\x0d\x0a五、第5题“C语言中放在“”之间的内容都被视为字符串的一个构成部分,都可以在屏幕上原样显示”的说法是错误的。举一个例子就可以了:print("%d",8);是打印不出来%d的,它只能打印出来8。所以它是错的。\x0d\x0a\x0d\x0a六、第7题,设x、t均为int型变量,则执行语句"x = 10;t = x && x >10;"后,t的值为,这个题目好似没有写完,成了填空题了,现在来看计算过程,t = x && x >10,根据计算的优先级,>号是6级,&&是11级,先计算x >10,因为x=10,故x>10是不成立的,所以它的值是0,第二步再计算x && 0=10 && 0=0。t的值最后应该是0。\x0d\x0a希望对你有所帮助。

c语言程序问题

这个程是用来统计字符串str中子串sub的数量的,但是程序当中有点小问题:

1.main函数最好注明返回值类型和参数类型以及return 0;

2.int n;的定义没有实际意义

【答案】

【1】B)str[i]!='\0'

【2】B) j=i

【3】C)k+1

修改后完整代码(含注释)和运行截图如下:

#include
#include//有的编译器gets()函数包括在
intmain(void)
{
charstr[80],sub[80];
gets(str);
gets(sub);
printf("%d\n",count(str,sub));
}
intcount(char*str,char*sub)
{
inti,j,k,num=0;
for(i=0;str[i]!='\0';i++)//如果str字符串没有结尾就继续查找子串
/*如果当前字符仍然和子串sub中字符对应一致,则继续循环*/
for(j=i,k=0;sub[k]==str[j];k++,j++)
if(sub[k+1]=='\0')//判断是否到子串sub结尾
{
num++;//遇到子串sub结尾说明str已经有一个子串,则num+1
break;
}
returnnum;
}

纯手打,望采纳!

C语言编程问题

#include //缺少重要 头文件 #include #include int SIZE;struct student{ char name[20]; int xh; int yw; //语文 int sx; //数学 int yy; //英语}*stud; void save();int srsj();int cxsj();int main();int gzcx();int gzcx(){ int i,a,b; char name[10]={0}; FILE *fp; if((fp=fopen("stu.dat","rb"))=

c语言程序问题

构成无限循环的原因是while(n);最后的分号表明{n--;}并不是while循环的循环体,因此对于while(n);来说n不等于0时是死循环,因为循环体(这里是空语句)并不对n进行计算处理。 程序写成下面就不是死循环了: n=10;while(n) {n--;}

标签:编程 CC++ C(编程语言) 信息技术 编程语言

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18