在猫猫看来,学语言很重要的一个点就是应该知道怎么用。这是猫猫上班后,学习到的一些C语言的的练习题,从简单的输入输出,到后面UDP,TCP的网络通信。如果有写的不对或者需要补充的知识,欢迎指正。
这里一共包含9个基本应用,剩余在其他的文章里。
大家可以通过下面的链接跳到相应文章。
C语言实践第一篇基本的输入输出,基本类型,加减乘除,函数的调用
C语言实践第二篇主要是结构体,指针,内存的释放,文件的读取
C语言实践第三篇我们开始内存共享的客户端和服务端,socket通讯的服务端客户端吗,以及自定义通讯协议的客户端和服务端。
1.基本类型的打印输出
C语言基本类型:整型,字符型,浮点型,布尔,枚举,空类型。
#include <stdio.h>
#include <conio.h>
int main()
{
int a = 123;
printf("%d\n", a); // 输出:123
char ch = 'A';
printf("%c\n", ch); // 输出:A
float f = 123.456;
printf("%f\n", f); // 输出:123.456000
bool b = 1; // 真
printf("%d\n", b); // 输出:1
enum Color { RED, GREEN, BLUE };
printf("%d\n", RED); // 输出:0,因为枚举值通常从0开始
printf("请点击任意键继续....\n");
_getch();
return 0;
}
2.基本类型的输入
#include <stdio.h>
#include <conio.h>
int main()
{
int iNum1 = 3;
char acStr[10];
double dNum2 = 3.14;
printf( "请依次输入整数 字符串 浮点数:\n" );
scanf( "%d %s %f", &iNum1, &acStr, &dNum2 );
printf( "%d\n", iNum1 );
printf( "%s\n", acStr );
printf( "%.2lf\n", dNum2 );
printf( "请点击任意键继续...." );
_getch();
return 0;
}
3.基本运算
加减乘除
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
int main()
{
int iNum1 = 8;
int iNum2 = 7;
double dNum1 = 6.67;
double dNum2 = 2.12;
printf( "%d + %d = %d \n", iNum1, iNum2, iNum1 + iNum2 );
printf( "%d - %d = %d \n", iNum1, iNum2, iNum1 - iNum2 );
printf( "%d * %d = %d \n", iNum1, iNum2, iNum1 * iNum2 );
printf( "%d / %d = %d \n", iNum1, iNum2, iNum1 / iNum2 );
printf("%.2f + %.2f = %.2f \n", dNum1, dNum2, dNum1 + dNum2);
printf("%.2f - %.2f = %.2f \n", dNum1, dNum2, dNum1 - dNum2);
printf("%.2f * %.2f = %.2f \n", dNum1, dNum2, dNum1 * dNum2);
printf("%.2f / %.2f = %.2f \n", dNum1, dNum2, dNum1 / dNum2);
printf( "请点击任意键继续...." );
_getch();
return 0;
}
4. if判断
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
int iGrade = 0;
while (true) {
scanf("%d", &iGrade);
if (90 <= iGrade && 100 > iGrade)
{
printf("%d分,优秀\n", iGrade);
}
else if (80 <= iGrade && 90 > iGrade)
{
printf("%d分,良好\n", iGrade);
}
else if (70 <= iGrade && 80 > iGrade)
{
printf("%d分,一般\n", iGrade);
}
else if (60 <= iGrade && 70 > iGrade)
{
printf("%d分,及格\n", iGrade);
}
else if (0 <= iGrade && 60 > iGrade)
{
printf("%d分,不及格\n", iGrade);
}
else
{
printf("分数不在范围内\n");
}
}
printf( "请点击任意键继续...." );
_getch();
return 0;
}
5.for循环
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
int iSum = 0;
for ( int i = 1; 100 >= i; i++ )
{
iSum += i;
}
printf( "1加到100 = %d\n", iSum );
printf( "请点击任意键继续...." );
_getch();
return 0;
}
6.while do AND do while
两个i的初始量,不同。while do是先做判断,在做,而do while是先做在判断,这是要注意的一点。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
int i = 1;
int iSum = 0;
while (100 >= i)
{
iSum += i;
i++;//这里应该注意i++的位置
}
printf("1加到100 = %d\n", iSum);
printf("请点击任意键继续....");
_getch();
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
int i = 0;
int iSum = 0;
do {
iSum += i;
i++;
} while( 100>=i );
printf( " 1加到100结果为%d \n", iSum );
_getch();
return 0;
}
7.swich case语句
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
char cLetter;
scanf( "%c", &cLetter );
switch ( cLetter )
{
case 'a':
printf( "%c\n", cLetter - 32 );
break;
case 'b':
printf( "%c\n", cLetter - 32 );
break;
case 'c':
printf( "%c\n", cLetter - 32 );
break;
default:
printf( "default\n" );
}
printf("请点击任意键继续....");
_getch();
return 0;
}
8.字符串的操作
C语言中对字符串的操作主要依赖于标准库中的字符串处理函数,这些函数定义在<string.h>头文件中。以下是一些常用的字符串操作及其简要说明:
(温馨提醒:这些都不用记忆,使用的时候查一下就好,这里只是为了展示,但里面有些,猫自己都没怎么用。大家看看就好。)
-
strcpy(s1, s2):复制字符串。将s2所指向的字符串复制到s1所指向的内存空间,包括\0结束符。
-
strncpy(s1, s2,
n):复制字符串的前n个字符。将s2所指向的字符串的前n个字符复制到s1所指向的内存空间,包括\0结束符,如果s2不足n个字符,则s1以\0填充。 -
strcat(s1, s2):连接字符串。将s2所指向的字符串连接到s1所指向的字符串的末尾。
-
strncat(s1, s2, n):连接字符串的前n个字符。将s2所指向的字符串的前n个字符连接到s1所指向的字符串的末尾。
-
strcmp(s1, s2):比较字符串。比较s1和s2所指向的字符串,返回值根据比较结果不同而不同。
-
strncmp(s1, s2, n):比较字符串的前n个字符。比较s1和s2所指向的字符串的前n个字符。
-
strlen(s):计算字符串长度。返回s所指向的字符串的长度,不包括\0结束符。
-
strchr(s, c):查找字符。在s所指向的字符串中查找字符c第一次出现的指针。
-
strrchr(s, c):查找字符的最后一次出现。在s所指向的字符串中查找字符c最后一次出现的指针。
-
strstr(s1, s2):查找子字符串。在s1所指向的字符串中查找子字符串s2第一次出现的指针。
-
strtok(s1, s2):分割字符串。使用s2中的分隔符分割s1所指向的字符串,并返回第一次分割后子串的指针。
-
strdup(s):复制字符串。动态分配内存并复制s所指向的字符串到新分配的内存中。
-
memset(s, c, n):设置内存。将s所指向的内存的前n个字节设置为字符c。
-
memcpy(s1, s2, n):复制内存。从s2所指向的内存复制n个字节到s1所指向的内存。
-
memmove(s1, s2, n):复制内存,允许重叠。从s2所指向的内存复制n个字节到s1所指向的内存,即使它们重叠。
-
memcmp(s1, s2, n):比较内存。比较s1和s2所指向的内存的前n个字节。
下面是实例代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
char acStr1[] = "Hello";//初始字符串
char acStr2[] = {'W','o','r','l','d','\0'};
char acStr3[10];
int iLen = 0;
iLen = strlen( acStr1 );//获取字符串acStr1长度
printf( "acsStr:Hello的长度为:%d\n", iLen );
strcpy( acStr3, acStr2 );//将字符串acStr2拷贝到acStr3
printf( "拷贝world:%s\n", acStr3 );
if (0 != strcmp(acStr1, acStr2))//比较字符串
{
printf( "比较Hello和Wworld: 不相等\n" );
}
if (0 == strcmp(acStr2, acStr3))
{
printf( "比较world和World: 相等\n" );
}
strcat(acStr1, acStr2);//将字符串acStr1和acStr2拼接
printf( "拼接Hello和World: %s\n", acStr1 );
char* pcPointer = strstr(acStr1, acStr3);//查找字符串
printf( "在Helloworld查找world字串: %s\n", pcPointer);
printf( "请点击任意键继续...." );
_getch();
return 0;
}
9.有参和无参函数的调用
无参函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
void Prantf()
{
printf( "Hello World!\n" );
}
int main()
{
Prantf();
printf( "请点击任意键继续...." );
_getch();
return 0;
}
有参函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <conio.h>
void Toggle_Case( char cLetter )
{
if ( 'A' <= cLetter && cLetter <= 'Z' )
{
cLetter += 32;
}
else if ( 'a' <= cLetter && cLetter <= 'z' )
{
cLetter -= 32;
}
else
{
printf( "输入的不是字母...." );
return;
}
printf( "%c\n", cLetter );
}
int main()
{
char cLetter;
scanf( "%c", &cLetter );
Toggle_Case( cLetter );
_getch();
return 0;
}
有返回值函数的调用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <conio.h>
int Sum(int iNum1, int iNum2);
int main()
{
int iSum=0;
int iNum1;
int iNum2;
scanf( "%d %d",&iNum1, &iNum2 );
iSum = Sum( iNum1, iNum2 );
printf( "iSum=%d", iSum );
printf( "请点击任意键继续...." );
_getch();
return 0;
}
int Sum(int iNum1, int iNum2)
{
int iSum = 0;
iSum = iNum1 + iNum2;
return iSum;
}