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;