【C】【吐血整理】你们要的C语言实例大全-深入提高篇一

【C】【吐血整理】你们要的C语言实例大全-深入提高篇一

目录

实例45 结构体变量 《计算天数》

实例46 结构体数组  《输入学生成绩并显示》

实例47 结构体指针变量 

实例48 结构体指针数组

实例49 共用体变量

实例50 枚举类型

实例51 读写字符

实例52 读写字符串

实例53 格式化输出函数

实例54 格式化输入函数

实例55 打开和关闭文件


实例45 结构体变量 《计算天数》

varstruct.c

/* 计算天数 */
# include <stdio.h>

struct 
{
	int year;
	int month;
	int day;
} data;    /* 定义一个结构并声明对象为data */

void main()
{
	int days;
	printf("请输入日期(年、月、日):");
	scanf("%d, %d, %d", &data.year, &data.month, &data.day);
	switch(data.month)
	{
	case 1:  days = data.day;    
		     break;
	case 2:  days = data.day+31;
		     break;
	case 3:  days = data.day+59;
		     break;
	case 4:  days = data.day+90;
		     break;
	case 5:  days = data.day+120;
		     break;
	case 6:  days = data.day+151;
		     break;
	case 7:  days = data.day+181;
		     break;
	case 8:  days = data.day+212;
		     break;
	case 9:  days = data.day+243;
		     break;
	case 10: days = data.day+273;
		     break;
	case 11: days = data.day+304;
		     break;
	case 12: days = data.day+334;
		     break;
	}
	if(data.year%4==0&&data.year%100!=0 || data.year%400==0)
		if(data.month>=3)
			days = days + 1;
	printf("%d月%d日是%d年的第%d天.\n", data.month, data.day, data.year, days);
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam045$ ./a.out 
请输入日期(年、月、日):2020,2,26 
2月26日是2020年的第57天.


实例46 结构体数组  《输入学生成绩并显示》

arrstruct.c

/* 输入学生成绩并显示 */
# include <stdio.h>

struct student
{
	char number[6];
	char name[6];
	int  score[3];
} stu[2];

void output(struct student stu[2]);

void main()
{
	int i, j;
	for(i=0; i<2; i++)
	{
		printf("请输入学生%d的成绩:\n", i+1);
		printf("学号:");
		scanf("%s", stu[i].number);
		printf("姓名:");
		scanf("%s", stu[i].name);
		for(j=0; j<3; j++)
		{
			printf("成绩 %d.  ", j+1);
			scanf("%d", &stu[i].score[j]);
		}
		printf("\n");
	}
	output(stu);
}

void output(struct student stu[2])
{
	int i, j;
	printf("学号  姓名  成绩1  成绩2  成绩3\n");
    for(i=0; i<2; i++)
	{
		printf("%-6s%-6s", stu[i].number, stu[i].name);
		for(j=0; j<3; j++)
			printf("%-8d", stu[i].score[j]);
		printf("\n");
	}
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam046$ ./a.out 
请输入学生1的成绩:
学号:77
姓名:zhangsan
成绩 1.  88
成绩 2.  99
成绩 3.  100

请输入学生2的成绩:
学号:78
姓名:lisi
成绩 1.  67
成绩 2.  89
成绩 3.  99

学号  姓名  成绩1  成绩2  成绩3
77    zhangsX88      99      100     
78    lisi  67      89      99   


实例47 结构体指针变量 

strpoint.c

# include <stdio.h>
# include <string.h>

void main()
{
	struct student
	{
		long num;
		char name[30];
		char sex[10];
		float score;
	};
	struct student stu;
	struct student *p;
	p = &stu;
	stu.num = 97032;
	strcpy(stu.name, "小明");
	strcpy(stu.sex, "男");
	stu.score = 98.5;

	printf("学号: %ld\n姓名: %s\n性别: %s\n分数: %4.2f\n",
		    stu.num, stu.name, stu.sex, stu.score);
	printf("\n");
	printf("学号: %ld\n姓名: %s\n性别: %s\n分数: %4.2f\n",
		    (*p).num, (*p).name, (*p).sex, (*p).score);
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam047$ ./a.out 
学号: 97032
姓名: 小明
性别: 男
分数: 98.50

学号: 97032
姓名: 小明
性别: 男
分数: 98.50


实例48 结构体指针数组

strparray.c

# include <stdio.h>

/* 定义一个全局的结构体 */
struct student
{
	long num;
	char name[20];
	char sex;
	int age;
};

/* 声明结构体数组并赋初值 */
struct student stu[4] = {{97032, "xiao ming", 'M', 20},
                         {97033, "xiao wang", 'M', 20},
						 {97034, "xiao tong", 'M', 21},
                         {97035, "xiao shui", 'F', 18}};

void main()
{
	/* 定义一个结构体指针变量 */
	struct student *p;

	printf(" 学号     姓名     性别     年龄\n");
	for(p=stu; p<stu+4; p++)
		printf("%-8ld%-12s%-10c%-3d\n", p->num, p->name, 
		                               p->sex, p->age);
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam048$ ./a.out 
 学号     姓名     性别     年龄
97032   xiao ming   M         20 
97033   xiao wang   M         20 
97034   xiao tong   M         21 
97035   xiao shui   F         18 


实例49 共用体变量

union.c

# include <stdio.h>

union data
	{
		int a;
		float b;
		double c;
		char d;
	} exa;

void main()
{
	exa.a = 6;
	printf("%d\n", exa.a);
	exa.c = 67.2;
	printf("%5.1f\n", exa.c);
	exa.d = 'W';
	exa.b = 34.2;
	printf("%5.1f, %c\n", exa.b, exa.d);
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam049$ ./a.out 
6
 67.2
 34.2, �


实例50 枚举类型

enum.c

# include <stdio.h>

void main()
{
	/* 经过下面的定义后,默认有:blue=0 red=1 ... black=4 */
	enum color {blue, red, yellow, purple, black};
	enum color i, j, k, pri;
	int n, loop;
	n = 0;

	for(i=blue; i<=black; i++)  /* i代表第一次所取铅笔的颜色 */
		for(j=blue; j<=black; j++)  /* j代表第二次所取铅笔的颜色 */  
			if(i!=j)  /* 第一次和第二次所取铅笔颜色不同 */
			{
				for(k=blue; k<=black; k++)  /* k代表第三次所取铅笔的颜色 */
					if((k!=i)&&(k!=j))  /* 三次所取铅笔颜色各不相同 */
					{
						n++;  /* 能得到三种不同颜色铅笔的可能取法加1 */
						printf("%-6d", n);
						/* 将当前i、j、k所对应的颜色依次输出 */
						for(loop=1; loop<=3; loop++)
						{
							switch(loop)
							{
							case 1: pri = i;
							        break;
							case 2: pri = j;
							        break;
							case 3: pri = k;
							        break;
							default:
								    break;
							}
							switch(pri)
							{
							case blue:   printf("%-10s", "blue");
									     break;
							case red:    printf("%-10s", "red");
									     break;
							case yellow: printf("%-10s", "yellow");
								         break;
							case purple: printf("%-10s", "purple");
								         break;
							case black:  printf("%-10s", "black");
									     break;
							default:
									     break;
							}
						}
						printf("\n");
					}
			}
			printf("total: %5d\n", n);
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam050$ ./a.out 
1     blue      red       yellow    
2     blue      red       purple    
3     blue      red       black     
4     blue      yellow    red       
5     blue      yellow    purple    
6     blue      yellow    black     
7     blue      purple    red       
8     blue      purple    yellow    
9     blue      purple    black     
10    blue      black     red       
11    blue      black     yellow    
12    blue      black     purple    
13    red       blue      yellow    
14    red       blue      purple    
15    red       blue      black     
16    red       yellow    blue      
17    red       yellow    purple    
18    red       yellow    black     
19    red       purple    blue      
20    red       purple    yellow    
21    red       purple    black     
22    red       black     blue      
23    red       black     yellow    
24    red       black     purple    
25    yellow    blue      red       
26    yellow    blue      purple    
27    yellow    blue      black     
28    yellow    red       blue      
29    yellow    red       purple    
30    yellow    red       black     
31    yellow    purple    blue      
32    yellow    purple    red       
33    yellow    purple    black     
34    yellow    black     blue      
35    yellow    black     red       
36    yellow    black     purple    
37    purple    blue      red       
38    purple    blue      yellow    
39    purple    blue      black     
40    purple    red       blue      
41    purple    red       yellow    
42    purple    red       black     
43    purple    yellow    blue      
44    purple    yellow    red       
45    purple    yellow    black     
46    purple    black     blue      
47    purple    black     red       
48    purple    black     yellow    
49    black     blue      red       
50    black     blue      yellow    
51    black     blue      purple    
52    black     red       blue      
53    black     red       yellow    
54    black     red       purple    
55    black     yellow    blue      
56    black     yellow    red       
57    black     yellow    purple    
58    black     purple    blue      
59    black     purple    red       
60    black     purple    yellow    
total:    60


实例51 读写字符

chario.c

# include <stdio.h>
# include <ctype.h>

void main()
{
	char ch;

	printf("Please enter some text(input a point to quit).\n");
	do{
		ch = getchar();

		if(islower(ch))
			ch = toupper(ch);
		else
			ch = tolower(ch);
		putchar(ch);
	} while(ch != '.');
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam051$ ./a.out 
Please enter some text(input a point to quit).
dgdsij
DGDSIJ
a
A
u
U
q
Q
. 


实例52 读写字符串

stringio.c

/* A simple dictionary */
# include <stdio.h>
# include <string.h>
# include <ctype.h>

char *dic[][40] = {
	"luster", "A bright shine on the surface.",
	"disgrase", "Loss of honor and respect.",
	"glamour", "Strong attraction.",
	"tomb", "The place where a dead person is buried.",
	"garbage", "Unwanted or spoiled food.",
	"bliss", "Great happiness or joy.",
	"commend", "Speak favorably of.",
	" ", " "    /* null end the list */
};

void main()
{
	char word[80], ch;
	char **point;    /* 定义一个二维指针 */

	do{
		puts("Please enter a word: ");
		scanf("%s", word);

		/* 将二维数组首地址赋给二维指针p */
		point = (char **)dic;    

		/* 察看字典中是否存在输入的单词 */
		do{
			if(!strcmp(*point, word))
			{
				puts("The meaning of the word is: ");
				puts(*(point+1));
				break;
			}
			if(!strcmp(*point, word))
				break;
			point = point + 2;
		} while(*point);

		if(!*point)
			puts("The word is not in dictionary.");

		printf("Another? (y/n):");
		scanf("%c%*c", &ch);  /* %*c表示scanf()读入该区域,但不向任何变量赋值 */
	} while(toupper(ch)!='N');
}

运行

Please enter a word: 
hello
The word is not in dictionary.
Another? (y/n):y
Please enter a word: 
luster
The meaning of the word is: 
A bright shine on the surface.
Another? (y/n):n
Please enter a word: 
commend
The meaning of the word is: 
Speak favorably of.
Another? (y/n):


实例53 格式化输出函数

formato.c

# include <stdio.h>

void main()
{
	unsigned number;
	double item = 1.23456;

	for(number=8; number<16; number++)
	{
		printf("%o   ", number);  /* 以八进制格式输出number */
		printf("%x   ", number);  /* 以十进制格式(小写)输出number */
		printf("%X\n", number);   /* 以十进制格式(大写)输出number */
	}
	printf("\n");
	
	printf("%p\n\n", &item);  /* 显示变量item的地址 */

	printf("%f\n", item);
	printf("%8.2f\n", item);  /* 总域宽为8,小数部分占2 */
	printf("%-8.2f\n", item);  /* 域中左对齐输出(默认右对齐) */
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam053$ ./a.out 
10   8   8
11   9   9
12   a   A
13   b   B
14   c   C
15   d   D
16   e   E
17   f   F

0x7ffdb1185dc0

1.234560
    1.23
1.23  


实例54 格式化输入函数

formati.c

# include <stdio.h>

void main()
{
	int i, j, k;
	char str[80];
	char *p;
	
	/* 输入的数将分别以十进制、八进制和十六进制读入程序 */
	scanf("%d %o %x", &i, &j, &k);  
	printf("%d %d %d\n", i, j, k);  /* 察看我们实际输入的数据 */
	
	printf("Enter a string: ");
	scanf("%s", str);
	printf("Here is your string: %s\n", str);

	printf("Enter an address: ");
	scanf("%p", &p);
	printf("Value at location %p is %c.\n", p, *p);
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam054$ ./a.out 
this
0 0 0
Enter a string: Here is your string: this
Enter an address: 0xfd100001
Segmentation fault (core dumped)


实例55 打开和关闭文件

fileio.c

# include <stdio.h>
# include <stdlib.h>

void main()
{
	/* 定义一个文件指针fp */
	FILE *fp;
	char ch, filename[10];

	printf("Please input the name of file: ");
	scanf("%s", filename);  /* 输入字符串并赋给变量filename */

	/* 以读的使用方式打开文件filename */
	if((fp=fopen(filename, "r")) == NULL)
	{
		printf("Cannot open the file.\n");
		exit(0);  /* 正常跳出程序 */
	}

	/* 关闭文件 */
	fclose(fp);
}

运行

guo@ubuntu:~/test/Clanguage/2/Exam055$ ls
2.c  a.out  fileio.c
guo@ubuntu:~/test/Clanguage/2/Exam055$ ./a.out 
Please input the name of file: fileio.c
guo@ubuntu:~/test/Clanguage/2/Exam055$ ./a.out 
Please input the name of file: 1.c
Cannot open the file.
发布了201 篇原创文章 · 获赞 46 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/rong11417/article/details/104531741