Tan Haoqiang C language programming code example Chapter 7 (notes)

Tan Haoqiang C Voice Programming Code Example Chapter 6 (Notes for Beginners)

The first chapter includes reference books, online compilation tools, codes, notes, etc.

Tan Haoqiang C language programming code example (chapters 1-3)

Tan Haoqiang C language programming code example Chapter 4 (notes)

Tan Haoqiang C language programming code example Chapter 5 (notes)

Tan Haoqiang C language programming code example Chapter 6 (notes)

#include <stdio.h>//输入输出头文件
/*------------------------------------(第七章 数组)----------------------------------*/
/****************************************************************************************
一、数组分类:
	1)数值数组:int a[10];float a[10];
	2)字符数组:char a[10];
	3)指针数组:
	4)结构数组:
*****************************************************************************************/
/************************************************************
一维数组格式:
	类型说明符 数组名 [常量表达式];
	eg: int a[10];//定义int型10个元素的一维数组
*************************************************************/
#if 1
/*eg7.1,一维数组的引用,p103*/
int main(void)
{
	int i,a[10];
	for(i=0;i<=9;i++){
		a[i]=i;//正序赋值
	}
	for(i=9;i>=0;i--){
		printf("%d",a[i]);//倒叙打印 9876543210
	}
	printf("\n");//换行
	return 0;
}
#endif

#if 0
/*eg7.2,a[i++]这种写法会有警告,但不报错,p104*/
int main(void)
{
	int i,a[10];
	for(i=0;i<10;){
		a[i++]=i;
	}
	for(i=9;i>=0;i--){
		printf("%d",a[i]);
	}
	printf("\n");
	return 0;
}
#endif

#if 0
/*eg7.3,大同小异(有告警,可编译),p104*/
int main(void)
{
	int i,a[10];
	for(i=0;i<10;){
		a[i++]=2*i+1;
	}
	for(i=0;i<=9;i++){
		printf("%d  ",a[i]);
	}
	printf("\na[5] = %d\n",a[5]);
	return 0;
}
#endif

#if 0
/*eg7.4,利用scanf对数组元素进行赋值,p105*/
int main(void)
{
	int i,max,a[10];
	printf("input 10 numbers:\n");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	max = a[0];
	for(i=1;i<10;i++){
		if(a[i]>max)
			max = a[i];
	}
	printf("maxmum=%d\n",max);
	return 0;
}
#endif

#if 0
/*eg7.5,排序比较,p106*/
int main(void)
{
	int i,j,p,q,s,a[10];
	printf("input 10 numbers:\n");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	for(i=0;i<10;i++){
		p = i;q = a[i];
		for(j=j+1;j<10;j++){
			if(q<a[i]){
				p = j;
				q = a[j];
			}
			if(i != p){
				s=a[i];
				a[i]=a[p];
				a[p]=s;
			}
		}
		printf("%d",a[i]);
	}
	return 0;
}
#endif
/***********************************************************************
二维数组格式:
	类型说明符 数组名[常量表达式1][常量表达式2];
	eg:int a[3][4];//整型3行4列二维数组
************************************************************************/
#if 0
/*eg7.6,求各科平均成绩和总分平均成绩,p107*/
/*分析:
1)先设一个a[5][3]存各科成绩;
2)再设一个v[3]存各科平均成绩;
3)最后设变量average为总分平均成绩;
*/
int main(void)
{
	int i,j,s=0,average,v[3],a[5][3];
	printf("input score:\n");//输入80 61 59 85 76 75 65 63 87 77 92 71 70 90 85
	for(i=0;i<3;i++){
		for(j=0;j<5;j++){
			scanf("%d",&a[i][j]);//按顺序输入成绩
			s=s+a[i][j];
		}
		v[i]=s/5;//求各科平均成绩
		s=0;
	}
	average=(v[0]+v[1]+v[2])/3;
	printf("math:%d\nC language:%d\nFoxpro:%d\n",v[0],v[1],v[2]);
	printf("average:%d\n",average);
	return 0;
}
#endif

#if 0
/*eg7.7,二维数组初始化,p108*/
int main(void)
{
	int i,j,s=0,average,v[3];
	int a[5][3]={
   
   {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};//方法1数组(5行3列)
	//int a[3][5]={
   
   {81,61,59,85,76},{75,65,63,87,77},{92,71,70,90,85}};//方法二数组(3行5列)
	for(i=0;i<3;i++){
		for(j=0;j<5;j++){
			s=s+a[j][i];//标记方法1
			//s=s+a[i][j];//标记方法2
		}
		v[i]=s/5;
		s=0;
	}
	average = (v[0]+v[1]+v[2])/3;/*方法二与方法一结果一致*/
	printf("math:%d\nC language:%d\nFoxpro:%d\n",v[0],v[1],v[2]);//72,73,81
	printf("average:%d\n",average);//75
	return 0;
}
#endif

#if 0
/*eg7.8,字符数组的引用,p110*/
int main(void)
{
	int i,j;
	char a[][5]={
   
   {'B','A','S','I','C',},{'d','B','A','S','E'}};
	for(i=0;i<=1/*或i<2*/;i++){
		for(j=0;j<=4/*或j<5*/;j++){
			printf("%c ",a[i][j]);
		}
		printf("\n");
	}
}
#endif

#if 0
/*eg7.9,p111*/
int main(void)
{
	char c[]="BASIC\ndBASE";
	printf("%s\n",c);
	return 0;
}
#endif

#if 0
/*eg7.10,p111*/
int main(void)
{
	char st[15];
	printf("input string:\n");
	scanf("%s",st);
	printf("%s\n",st);
	return 0;
}
#endif

#if 0
/*eg7.11,p112*/
int main(void)
{
	char st1[6],st2[6],st3[6],st4[6];
	printf("input string:\n");
	scanf("%s%s%s%s",st1,st2,st3,st4);
	printf("%s %s %s %s\n",st1,st2,st3,st4);
	return 0;
}
#endif

#if 0
/*eg7.12,利用string.h调用puts();字符串输出函数,p113*/
#include <string.h>
int main(void)
{
	char c[] = "basic\ndbase";
	puts(c);//字符串输出函数
	return 0;
}
#endif

#if 0
/*eg7.14,gets();已被弃用,代替的是采用fgets();p114*/
/********************************************************
fgets()函数的基本用法为:
fgets(char *s, int size, FILE *stream);
第一个参数是:字符类型的数组,第二个参数是:标明这个数组的大小,
第三个参数是:如果总是通过键盘输入的话,可以固定写为stdin
参考文献:
告警原因:https://stackoverflow.com/questions/37841617/implicit-declaration-of-function-gets-is-invalid-in-c99?noredirect=1
解决办法:https://developer.aliyun.com/article/607824
*********************************************************/
#include <string.h>
int main(void)
{
	char st[15];
	printf("input string:\n");
	//gets(st);
	/*函数gets()已被弃用。不鼓励您使用它,因为它被认为是不安全的。
	什么意思?在你的程序中,你只传递一个接收器数组的名称,并且不可能知道输入会有多长。
	如果您的用户记住他不应该写超过 20 个字符的名称,那没关系。
	但是,如果他超过该限制,gets():它将继续将数组边界写入它不拥有的内存。*/
	fgets(st, sizeof(st), stdin); //stdin 意思是键盘输入
	puts(st);
}
#endif

#if 0
/*eg7.15,strcpy(字符数组名1,字符数组名2);拷贝字符串函数用法,p114*/
#include <string.h>
int main(void)
{
	char str1[15],str2[]="C language";
	strcpy(str1,str2);//将字符数组2中的字符串内容拷贝到字符数组1中
	puts(str1);//输出字符串1中的内容
	return 0;
}
#endif

#if 0
/*eg7.16,strcmp(字符数组名1,字符数组名2);字符串比较函数,p114*/
#include <string.h>
int main(void)
{
	int k;//用于存储strcmp()的返回值
	static char st1[15],st2[]="C language\n";
	printf("input string:\n");
	//gets(st1);//不用此函数输入字符串
	/*注意:在输入字符串时你会 多 输入一个‘\n’回车,因此st2要有一个‘\n’,否则输入与st2一样的字符串还是会出现k>1的现象,不会出现k=0的情况*/
	fgets(st1,sizeof(st1),stdin);//采用fgets();输入字符串
	k = strcmp(st1,st2);//将st2与st1做比较
	if(k==0)
		printf("st1=st2\n");
	else if(k>0)
		printf("st1>st2\n");
	else//当k<0
	 	printf("st1<st2\n");
	return 0;
}
#endif

note taking;

Guess you like

Origin blog.csdn.net/qq_50635297/article/details/130293638