二级C语言部分验证性代码
一个工程包含多个源文件,最多只能有一个main()函数,其他的文件中如果存在main()函数需要注释掉。同时同一个项目的不同文件中,不可包含同名函数。
1 检测字符串celebration meeting中ti的个数
- 代码:
#include<stdio.h>
#include<string.h>
int fun(char *s,char *t)
{
int c=0;
char *p,*q;
while(*s)
{
p=s; q=t;
while(*p && *q && *p++ == *q++);
if(!*q) c++;
s++;
}
return c;
}
void main()
{
char *str1 = "celebration meeting", *str0 ="ti";
printf("%d\n",fun(str1,str0));
}
- 结果
2 验证
1)fgets(str,n,fp)一次只能获取n-1个字符,最后自动加零;\\在该函数中表示两个字符,而非转义字符;
2)feof(fp)在文件结尾是为非零值;
3)rewind(fp)文件位置回到开头;
- 代码
#include<stdio.h>
#include<stdlib.h> //文件读写需要
void main()
{
FILE *fp;
char ch,str[9];
if((fp=fopen("file.txt","wb+"))==NULL)
{printf("error!\n"); exit(0);}
ch=getchar();
while(ch!='!')
{
fputc(ch,fp);
ch = getchar();
}
rewind(fp);
do{
fgets(str,4,fp); // "\\"算两个字符长度
puts(str);
}while(!feof(fp));
rewind(fp);
fgets(str,9,fp);
puts(str);
fclose(fp);
}
- 结果
4)所有不同类型的指针变量大小为4字节,无论是char、int类型,无论指向字符串还是数组;
5)转义字符长度为1;int长度为1;char长度为1;数组长度看[]中的值;
6)strlen()测试的长度不包含最终的‘\0’,而sizeof()包含;
- 代码
#include<stdio.h>
#include<string.h> //strlen()
void p()
{
char *s="c:\\test!";
int a ,d[10],*s2=d;
char b,c[6],*s1=c;
printf("%d,%d,%d\n",sizeof(a),sizeof(b),sizeof(c));
printf("%d, %d, %d, %s\n",strlen(s),sizeof(s),sizeof(s2), s); // "\\"算一个字符长度 指针变量所占内存空间都为4字节
puts(s);
}
void main()
{
p();
}
- 结果
3 迭代
1)每一次迭代都会保留相应级别的值;
2)在逗号表达式中,逗号左边的表达式执行完之后才会执行逗号右边的表达式;
- 代码
#include <stdio.h>
void fun(int n)
{
if(n/2) fun(n/2);
printf("%d\n",n);
printf("%d\n",n%2);
}
void main()
{
int x=2;
printf("%d\n",(x++,2*x));//6
//printf("%d\n",(++x,2*x));//8,与上一行效果一样
fun(10); printf("\n\n\n");
}
/*
ps:每一级迭代保留相应级别的值
1
1
2
0
5
1
10
0
*/
- 结果
4 switch()括号里的一定要整型表达式
- 代码
#include<stdio.h>
int p_1()
{
int a=1, b=2, c=3;
if(a<b) c=a, a=b, b=c;
printf("%d %d %d\n",a,b,c);
return 0;
}
int p_2()
{
int a=0,b=3;
switch(a)
{
//case 0: a++;
case 1: a=b; break;
case 0: a++;
}
printf("%d %d\n",a,b);
return 0;
}
int main()
{
int a=0, b=0, c=0, d=0;
if(a=1) { b=1;c=2;}
else d=3;
printf("%d %d %d %d\n",a,b,c,d); //1 1 2 0
p_1();
p_2();
return 0;
}
- 结果