1
0
Эх сурвалжийг харах

NCRE二级C语言软件资料

蘭雅sRGB 6 цаг өмнө
parent
commit
0c1192ff30

+ 42 - 0
.gitignore

@@ -0,0 +1,42 @@
+# 编译输出文件
+*.exe
+*.out
+*.app
+
+# 目标文件/中间文件
+*.o
+*.obj
+*.a
+*.lib
+*.dll
+*.so
+*.dylib
+
+# 可执行文件(针对特定名称)
+main.exe
+test.exe
+a.out
+
+# 编译生成的依赖文件
+*.d
+*.P
+
+# 编译缓存目录
+build/
+bin/
+Debug/
+Release/
+x64/
+x86/
+
+# 编辑器/IDE生成的文件
+.vscode/
+.idea/
+*.swp
+*.swo
+*~
+.DS_Store
+
+# 项目特定文件(根据实际情况调整)
+# 如果想保留项目根目录下的exe,可以指定例外
+!example.exe

+ 48 - 0
C2/C2_01.c

@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <stdio.h>
+#include <string.h>
+/*
+ * 函数功能:统计字符串中出现次数最多的字母,并输出该字母。
+ * 参数说明:
+ *   a[] - 输入的字符串,用于统计其中字母的出现次数。
+ * 返回值:无返回值。
+ */
+void fun(char a[]) {
+  int b[26], i, n, max;
+
+  // 初始化数组b,用于记录每个字母的出现次数(a-z对应索引0-25)
+  for (i = 0; i < 26; i++)
+  /**********found**********/
+    b[i] = 0;    //  a[i] = 0; 改正
+
+  // 获取字符串长度
+  n = strlen(a);
+
+  // 遍历字符串,统计每个字母的出现次数
+  for (i = 0; i < n; i++)
+    if (a[i] >= 'a' && a[i] <= 'z')
+      // 将小写字母转换为对应的索引并增加计数
+
+      /**********found**********/
+      b[a[i] - 'a']++;   //  b[a[i] - 'A']++; 改正
+
+    else if (a[i] >= 'A' && a[i] <= 'Z')
+      // 将大写字母转换为对应的索引并增加计数
+      b[a[i] - 'A']++;
+
+  // 查找出现次数最多的字母对应的索引
+  max = 0;
+  for (i = 1; i < 26; i++)
+      /**********found**********/
+     if (b[max] > b[i])    // if (b[max] < b[i])  改正
+      max = i;
+
+  // 输出出现次数最多的字母
+  printf("出现次数最多的字符是 :  %c\n", max + 'a');
+}
+int main() {
+  char a[200];
+  printf("请输入一个待统计的字符串 :   ");
+  scanf("%s", a);
+  fun(a);
+}

+ 32 - 0
C2/C2_02.c

@@ -0,0 +1,32 @@
+#include <stdio.h>
+double fun ( int x[])
+{
+/************found************/
+  double sum = 0.0;          /* 将 sum 改为 double 类型,以便保存小数 */
+  int c=0, i=0;
+
+  /* 遍历数组直到遇到0为止,累加所有正整数并统计其个数 */
+  while (x[i] != 0)
+  { if (x[i] > 0) {
+       sum += x[i]; c++; }
+    i++;
+  }
+/************found************/
+  sum /= c;                  /* 将反斜杠改为除号 / */
+
+  /* 计算平均值:将总和除以正整数的个数 */
+
+  return sum;
+}
+int main( )
+{  int x[1000];  int i=0;
+   printf( "\nPlease enter some data (end with 0): " );
+   do
+     {  scanf("%d", &x[i]);  }
+   while (x[i++] != 0);
+   printf("%f\n", fun ( x ));
+}
+
+// 程序修改题(二)
+//     在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。下列给定程序中函数fun的功能是:计算数组元素中所有值为正数的平均值(不包括0)。
+//     例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为19.250000。

+ 27 - 0
C2/C2_03.c

@@ -0,0 +1,27 @@
+#include  <stdlib.h>
+#include  <conio.h>
+#include  <stdio.h>
+int fun( int m)
+{ int i,k;
+  for (i=m+1; ;i++)
+     { for (k=2;k<i;k++)
+/*************found**************/
+          if (i%k==0)   // if (i%k!=0) 修改:如果能整除,则不是素数,跳出循环
+           break;
+/*************found**************/
+        if (k==i)        // if (k<i)  修改:如果k等于i,说明循环正常结束,i是素数
+         return(i);
+     }
+}
+int main()
+{  int n;
+   system("CLS");
+   printf("\nPlease enter n: ");
+   scanf("%d",&n);
+   printf ("%d\n",fun(n));
+}
+
+// 程序修改题(三)
+// 下列给定程序中,函数fun的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。
+// 请改正程序中的错误,使它能得出正确的结果。
+// 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

+ 17 - 0
C2/README.md

@@ -0,0 +1,17 @@
+## 计算机等级考试(NCRE)软件中心  http://www.mtiku.net/ncre/
+### 天明计算机题库操作软件常见问题
+- 1.题库软件包含哪些科目?
+一级MS office、二级MSoffice、二级C语言、二级Access、二级Python、二级WPS office、三级网络技术、四级网络技术
+- 2.激活码失效、激活码无法使用?
+不用使用激活码,选择好科目之后直接点击试用即可正常使用。
+- 3.没有试题?
+题目都在右侧精选真题模块里,进入模块点击下载题库按钮即可。
+
+## 计算机操作题软件下载
+[点击下载](https://file.tianmingjy.cn/pub/tm-setup.exe)
+
+### 计算机题库软件下载及二级视频
+链接: https://pan.baidu.com/s/1FI1ajlUOObdjKgUtOObpJw?pwd=hvzi 提取码: hvzi
+
+### 计算机等级考试随书附件
+链接: https://pan.baidu.com/s/14dsQtWHLu6sHnqbLtNattw 提取码: caho

+ 630 - 0
C2/程序修改题1-20.txt

@@ -0,0 +1,630 @@
+程序修改题(一)
+给定程序MODI1.C中规定输入的字符串全部为字母,fun函数的功能是:统计a所指字符串中每个字母在字符串中出现的次数(统计时不区分大小写),并将出现次数最高的字母输出(如果有多个相同,输出一个即可)。
+例如对于字符串:dadbcdbabdb,对应的输出应为:b或d。
+请改正函数fun中指定部位的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
+#include<stdio.h>
+#include  <stdio.h>
+#include  <string.h>
+void fun(char  a[])
+{  int  b[26], i, n,max;
+   for (i=0; i<26; i++)
+/**********found**********/
+      a[i] = 0;
+   n= strlen(a);
+   for (i=0; i<n; i++)
+      if (a[i] >='a' && a[i]<='z')
+/**********found**********/
+         b[a[i] - 'A']++;
+      else  if (a[i] >='A' && a[i]<='Z')
+         b[a[i] -'A']++;
+   max = 0;
+   for (i=1; i<26; i++)
+/**********found**********/
+     if (b[max] > b[i])
+       max=i;
+   printf("出现次数最多的字符是 :  %c\n", max + 'a');
+}
+main( )
+{  char  a[200];
+   printf("请输入一个待统计的字符串 :   ");   scanf("%s", a);
+   fun(a);
+}
+
+程序修改题(二)
+    在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。下列给定程序中函数fun的功能是:计算数组元素中所有值为正数的平均值(不包括0)。
+    例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为19.250000。
+    请改正程序中的错误,使它能得出正确的结果。
+    注意:不得增行或删行,也不得更改程序的结构!
+#include <stdio.h>
+double fun ( int x[])
+{
+/************found************/
+  int sum = 0.0;
+  int c=0, i=0;
+  while (x[i] != 0)
+  { if (x[i] > 0) {
+       sum += x[i]; c++; }
+    i++;
+  }
+/************found************/
+  sum \= c;
+  return sum;
+}
+main( )
+{  int x[1000];  int i=0;
+   printf( "\nPlease enter some data (end with 0): " );
+   do
+     {  scanf("%d", &x[i]);  }
+   while (x[i++] != 0);
+   printf("%f\n", fun ( x ));
+}
+
+程序修改题(三)
+下列给定程序中,函数fun的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
+#include  <stdlib.h>
+#include  <conio.h>
+#include  <stdio.h>
+int fun( int m)
+{ int i,k;
+  for (i=m+1; ;i++)
+     { for (k=2;k<i;k++)
+/*************found**************/
+          if (i%k!=0)
+           break;
+/*************found**************/
+        if (k<i)
+         return(i);
+     }
+}
+void main()
+{  int n;
+   system("CLS");
+   printf("\nPlease enter n: ");
+   scanf("%d",&n);
+   printf ("%d\n",fun(n));
+}
+
+程序修改题(四)
+下列给定程序中函数fun的功能是:将长整型数中各位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
+例如,当s中的数为87653142时,t中的数:8642。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include <stdio.h>
+void fun (long  s, long *t)
+{ int   d;
+  long  sl=1;
+    *t = 0;
+    while ( s > 0)
+    {  d = s%10;
+/************found************/
+       if (d%2=0)
+       {  *t=d* sl+ *t;
+          sl *= 10;
+       }
+/************found************/
+       s \= 10;
+    }
+}
+main()
+{  long s,t;
+   printf("\nPlease enter s:"); scanf("%ld", &s);
+   fun(s, &t);
+   printf("The result is: %ld\n", t);
+}
+
+程序修改题(五)
+下列给定程序的功能是:读入一个整数k(2≤k≤10000),输出它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出:2,3,5,7,11。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
+#include  <conio.h>
+#include  <stdio.h>
+/*************found**************/
+IsPrime(int n);
+{ 
+  int i,m;
+  m=1;
+  for(i=2;i<n;i++)
+ /*************found**************/
+     	if!(n%i)
+	{
+		m=0;
+		break;
+	}
+
+  return(m);
+}
+main()
+{ 
+  int j,k;
+  printf("\nPlease enter an interger number between 2 and 10000: ");
+  scanf("%d",&k);
+  printf("\nThe prime factor(s) of %d is(are): ",k);
+  for(j=2;j<k;j++)
+ 	if((!(k%j)) && (IsPrime(j)))
+		printf("%4d,",j);
+  printf("\n");
+}
+
+程序修改题(六)
+下列给定程序中,函数fun的功能是:从s所指字符串中,找出t所指字符串的个数作为函数值返回。例如,当s所指字符串中的内容为“abcdabfab”,t所指字符串的内容为“ab”,则函数返回整数3。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构。
+#include  <stdlib.h>
+#include  <conio.h>
+#include  <stdio.h>
+#include  <string.h>
+int fun (char  *s,  char  *t)
+{int  n;  char *p, *r;
+ n=0;
+ while(*s)
+   {p=s;
+    r=t;
+    while (*r)
+/*************found**************/
+      if(*r==*p)  {r++; p++}
+       else  break;
+/*************found**************/
+       if(r=='\0')
+         n++;
+       s++;
+   }
+ return n;
+}
+void main( )
+{char  s[100],  t[100];  int  m;
+ system("CLS");
+ printf("\nPlease enter string s: ");
+ scanf("%s",s);
+ printf("\nPlease enter substring t: ");
+ scanf ("%s",t);
+ m=fun(s,t);
+ printf("\nThe result is: m=%d\n", m);
+}
+
+程序修改题(七)
+下列给定程序中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不相等,z和y的值不相等。
+例如,当x的值为9,y的值为11,z的值为15时,函数值为-3.50。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构。
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+/************found************/
+#define FU(m,n) ((m/n))
+float fun(float a,float b,float c)
+{  float  value;
+   value=FU(a+b,a-b)+FU(c+b,c-b);
+/************found************/
+   Return(Value);
+}
+main()
+{  float  x,y,z,sum;
+   printf("Input  x  y  z:  ");
+   scanf("%f%f%f",&x,&y,&z);
+   printf("x=%f,y=%f,z=%f\n",x,y,z);
+   if (x==y||y==z){printf("Data error!\n");exit(0);}
+   sum=fun(x,y,z);
+   printf("The result is : %5.2f\n",sum);
+}
+
+程序修改题(八)
+下列给定程序中函数fun的功能是:从整数10到55之间,查找能被3整除且有一位上的数值是5的数,把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定函数中al放个位数,a2放十位数。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不得增行或删行,也不得更改的程序的结构!
+#include <stdio.h>
+int fun( int  *b )
+{  int   k,a1,a2,i=0;
+   for(k=10; k<=55; k++) {
+/************found************/
+      a2=k/1O;
+      a1=k-a2*10;
+      if((k%3==0 && a2==5)||(k%3==0 && a1==5))
+      {  b[i]=k; i++; }
+   }
+/************found************/
+   return  k;
+ }
+main( )
+{  int  a[100],k,m;
+   m=fun( a );
+   printf("The result is :\n");
+   for(k=0; k<m; k++) printf("%4d",a[k]);  printf("\n");
+}
+
+程序修改题(九)
+下列给定程序中,函数fun的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码值升序排序后输出。例如,若输入"edcba",则应输出"abcde"。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
+#include  <string.h>
+#include  <stdio.h>
+void fun(char  t[])
+{
+ char c;
+ int i,j;
+ /*************found**************/
+ for(i=strlen(t);i;i--)
+     for(j=0;j<i;j++)
+        /*************found**************/
+	  if(t[j]<t[j+1])
+          {
+           c= t[j];
+           t[j]=t[j+1];
+           t[j+1]=c;
+          }
+}
+main()
+{
+ char  s[81];
+ printf("\nPlease  enter a character string :");
+ gets(s);
+ printf("\nBefore sorting : %s\n",s);
+ fun(s);
+ printf("\nAfter sorting decendingly: %s\n",s);
+}
+
+程序修改题(十)
+下列给定程序中函数fun的功能是:删除指针p所指字符串中的所有空白字符(包括制表符、回车符及换行符)。
+输入字符串时用'#'结束输入。
+请改正程序中的错误,使它能输出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+fun ( char *p)
+{  int i,t;  char c[80];
+/************found************/
+   For (i = 0,t = 0; p[i] ; i++)
+      if(!isspace(*(p+i))) c[t++]=p[i];
+/************found************/
+   c[t]="\0";
+   strcpy(p,c);
+}
+
+main( )
+{  char c,s[80];
+   int i=0;
+   printf("Input a string:");
+   c=getchar();
+   while(c!='#')
+   {  s[i]=c;i++;c=getchar(); }
+   s[i]='\0';
+   fun(s);
+   puts(s);
+}
+
+程序修改题(十一)
+下列给定程序中函数fun的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指存储区中。例如:把三个串"abc"、"CD"、"EF"连接起来,结果是"abcCDEF"。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
+#include <stdio.h>
+#include <string.h>
+void  fun ( char  str[][10], int  m, char  *pt )
+{
+/************found************/
+    Int  k, q, i ;
+    for ( k = 0; k < m; k++ )
+    {  q = strlen ( str [k] );
+       for (i=0; i<q; i++)
+/************found************/
+       pt[i] = str[k,i] ;
+       pt += q ;
+       pt[0] = 0 ;
+    }
+}
+
+main( )
+{    int  m, h ;
+     char s[10][10], p[120] ;
+     printf( "\nPlease enter  m:" ) ;
+     scanf("%d", &m) ;  gets(s[0]) ;
+     printf( "\nPlease enter  %d string:\n", m ) ;
+     for ( h = 0; h < m; h++ ) gets( s[h]) ;
+     fun(s, m, p) ;
+     printf( "\nThe result  is :  %s\n", p) ;
+}
+
+程序修改题(十二)
+下列给定程序中,函数fun的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。
+请改正函数fun中的错误,使它能得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构。
+#include <stdlib.h>
+#include <stdio.h>
+#include <conio.h>
+void fun(char *s)
+{int i,j;
+ for(i=0,j=0; s[i]!= '\0'; i++)
+     if(s[i]>= '0'&&s[i]<= '9')
+/*************found**************/
+        s[j]=s[i];
+/*************found**************/
+     s[j]=”\0”;
+}
+void main()
+{char item[80];
+ system("CLS");
+ printf("\nEnter a string: ");gets(item);
+ printf("\nThe string is:%s\n",item);
+ fun(item);
+ printf("\nThe string of changing is :%s\n",item);
+}
+
+程序修改题(十三)
+由N个有序整数组成的数列已放在一维数组中,下列给定程序中函数fun的功能是:利用折半查找法查找整数m在数组中的位置。若找到,返回其下标值;否则,返回-1。
+折半查找的基本算法是:每次查找前先确定数组中待查的范围low和high(low<high),然后用m与中间位置(mid)上元素的值进行比较。如果m的值大于中间位置元素的值,则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构。
+#include <stdio.h>
+#define  N  10
+/************found************/
+void fun(int  a[], int  m )
+{  int  low=0,high=N-1,mid;
+   while(low<=high)
+   {  mid=(low+high)/2;
+      if(m<a[mid])
+        high=mid-1;
+/************found************/
+      else If(m > a[mid])
+        low=mid+1;
+      else  return(mid);
+   }
+   return(-1);
+}
+main()
+{  int  i,a[N]={-3,4,7,9,13,45,67,89,100,180 },k,m;
+   
+   printf("a数组中的数据如下:");
+   for(i=0;i<N;i++) printf("%d ", a[i]);
+   printf("Enter m: ");  scanf("%d",&m);
+   k=fun(a,m);
+   if(k>=0) printf("m=%d,index=%d\n",m,k);
+   else  printf("Not be found!\n");
+}
+
+程序修改题(十四)
+下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构。
+#include  <stdlib.h>
+#include  <conio.h>
+#include  <string.h>
+#include  <stdio.h>
+#include  <malloc.h>
+#define N 10
+typedef struct ss
+   { char num[10];
+     int s;
+   } STU;
+STU *fun(STU a[], int m)
+{ STU b[N],*t;
+  int i, j,k;
+/*************found**************/
+  *t=calloc(m,sizeof(STU));
+  for(i=0;i<N;i++) b[i]=a[i];
+  for(k=0;k<m;k++)
+     { for (i=j=0;i<N;i++)
+          if(b[i].s>b[j].s) j=i;
+/*************found**************/
+      t[k].num=b[j].num;
+      t[k].s=b[j].s;
+      b[j].s=0;
+     }
+return t;
+}
+outresult(STU a[],FILE *pf)
+{ int i;
+  for(i=0;i<N;i++)
+     fprintf(pf, "No=%s Mark=%d\n ",a[i].num, a[i].s);
+  fprintf(pf, "\n\n ");
+}
+void main()
+{ STU a[N]={{ "A01 ",81},{ "A02 ",89},{ "A03 ",66},{ "A04 ",87},{ "A05 ",77},
+			{ "A06 ",90},{ "A07 ",79},{ "A08 ",61},{ "A09 ",80},{ "A10 ",71}};
+  STU *pOrder;
+  int i, m;
+  system("CLS");
+  printf("*****THE RESULT*****\n");
+  outresult(a,stdout);
+  printf("\nGive the number of the students who have better score: ");
+  scanf("%d",&m);
+  while(m>10)
+      { printf("\nGive the number of the students who have better score: ");
+  scanf("%d",&m);
+}
+  pOrder=fun(a,m);
+  printf("***** THE RESULT*****\n");
+  printf("The top :\n");
+  for(i=0;i<m;i++)
+     printf("%s  %d\n",pOrder[i].num, pOrder[i].s);
+  free(pOrder);
+}
+
+程序修改题(十五)
+给定程序MODI1.C中,函数fun的功能是:在有n名学生,2门课成绩的结构体数组std中,计算出第1门课程的平均分,作为函数值返回。例如,主函数中给出了4名学生的数据,则程序运行的结果为:第1门课程的平均分是:76.125000
+请改正函数fun中指定部位的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
+#include  <stdio.h>
+typedef  struct
+{  char  num[8];
+  double  score[2];
+}STU ;
+double fun(STU  std[], int  n)
+{  int   i;
+/**********found**********/
+   double  sum ;
+/**********found**********/
+   for(i=0; i<2 ; i++)
+/**********found**********/
+      sum += std[i].score[1]; 
+   return  sum/n;
+}
+main()
+{  STU  std[ ]={ "N1001", 76.5,82.0 ,"N1002", 66.5,73.0, 
+              "N1005", 80.5,66.0,"N1006", 81.0,56.0 };
+   printf("第1门课程的平均分是:%lf\n", fun(std,4) );
+}
+
+程序修改题(十六)
+下列给定程序中函数fun的功能是:输出M×M整数方阵,然后求两条对角线上元素之和,并作为函数值返回。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdio.h>
+#define M 5
+/************found************/
+int fun(int n, int xx[][])
+{  int  i, j, sum=0;
+  printf( "\nThe %d x %d matrix:\n", M, M );
+  for(i = 0; i < M; i++)
+  {  for(j = 0; j < M; j++)
+/************found************/
+      printf("%f ", xx[i][j]);
+    printf("\n");
+  }
+  for(i = 0 ; i < n ; i++)
+    sum += xx[i][i]+xx[i][ n-i-1 ];
+  return( sum );
+}
+main( )
+{  int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
+   {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
+   printf("\nThe sum of all elements on 2 diagnals is %d.",fun(M, aa));
+}
+
+程序修改题(十七)
+下列给定程序中,函数fun的功能是:计算整数n的阶乘。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
+试题程序:
+#include <stdlib.h>
+#include <stdio.h>
+double fun(int n)
+{
+	double result=1.0;
+	while(n>1 && n<170) 
+/*************found**************/
+      Result *=--n;
+/*************found**************/
+	return;
+}
+void main()
+{
+	int n;
+	printf("Enter an integer: ");
+	scanf("%d",&n);
+	printf("\n%d!=%1g\n ",n,fun(n));
+}
+
+程序修改题(十八)
+下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形。若能构成等边三角形,则返回3;若是等腰三角形,则返回2;若能构成三角形则返回1;若不能,则返回0。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdio.h>
+#include <math.h>
+int fun(int a,int b,int c)
+{ if(a+b>c&&b+c>a&&a+c>b)
+     {if(a==b && b==c) 
+/*************found**************/
+       return 1;
+      else if(a==b||b==c||a==c)
+       return 2;
+/*************found**************/
+      else return 3;
+     }
+  else return 0;
+}
+void main()
+{ 
+	int a,b,c,shape;
+    printf("\nInput a,b,c: "); 
+    scanf("%d%d%d",&a,&b,&c);
+    printf("\na=%d, b=%d, c=%d\n",a,b,c);
+    shape=fun(a,b,c);
+    printf("\nThe shape :%d\n",shape);
+}
+
+程序修改题(十九)
+下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdio.h>
+#include <conio.h>
+#include <stdlib.h>
+int fun(int k)
+{ int m=0,mc=0, j;
+  while((k>=2) && (mc<10))
+  {
+/*************found**************/
+	  if((k%13=0)||(k%17=0))
+	  { m=m+k;mc++; }
+      k--;
+/*************found**************/
+	  return m;
+}
+void main()
+{
+	printf("%d\n ",fun(500));
+}
+
+程序修改题(二十)
+给定程序中函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指的数组的尾部。
+例如,当a所指字符串中的内容为"abcdefg",b所指字符串中的内容为"1234"时,c所指数组中的内容应为"a4b3c2d1efg";而当a所指字符串中的内容为"1234",b所指字符串的内容为"abcdefg"时,c所指数组中的内容应该为"1g2f3e4dcba"。
+请改正程序中的错误,使它能得出正确的结果。
+注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdio.h>
+#include <string.h>
+void fun(char *a,char *b,char *c)
+{
+	int i,j;char ch;
+	i=0; j=strlen(b)-1;
+/************found************/
+	while(i > j)
+	{
+		ch=b[i]; b[i]=b[j]; b[j]=ch;
+		i++; j--;
+	}
+	while ( *a || *b ) 
+	{
+/************found************/
+	 If ( *a )
+	 { *c = *a;  c++; a++; }
+	 if ( *b )
+	 { *c = *b;  c++; b++; }
+	}
+	*c = 0;
+}
+main()
+{
+   char s1[100],s2[100],t[200];
+   printf("\nEnter s1 string : ");
+   scanf("%s",s1);
+   printf("\nEnter s2 string : ");
+   scanf("%s",s2);
+   fun( s1, s2, t );
+   printf("\nThe result is : %s\n",t);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 720 - 0
C2/程序填空题1-20.txt

@@ -0,0 +1,720 @@
+程序填空题(一)
+下列给定程序中,函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]…中,把奇数从数组中删除,偶数的个数通过函数值返回。
+例如,若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7,删除奇数后a所指数组中的数据为:4,2,6,8,返回值为4。
+请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+#define  N  9
+int fun(int  a[], int  n)
+{  int  i,j;
+   j = 0;
+   for (i=0; i<n; i++)
+/**********found**********/
+      if (___1___== 0) {
+/**********found**********/
+        ___2___ = a[i]; j++;
+      }
+/**********found**********/
+   return ___3___;
+}
+main()
+{  int  b[N]={9,1,4,2,3,6,5,8,7}, i, n;
+   printf("\nThe original data  :\n");
+   for (i=0; i<N; i++)  printf("%4d ", b[i]);
+   printf("\n");
+   n = fun(b, N);
+   printf("\nThe number of even  :%d\n", n);
+   printf("\nThe even  :\n");
+   for (i=0; i<n; i++)  printf("%4d ", b[i]);
+   printf("\n");
+}
+
+程序填空题(二)
+下列给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。
+例如,若s所指字符串为"baacda",c中的字符为a,执行后s所指字符串为"baaaacdaa"。
+请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
+不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+void fun(char  *s, char  c)
+{  int  i, j, n;
+/**********found**********/
+  for(i=0; s[i]!=___1___ ; i++)
+     if(s[i]==c)
+     {
+/**********found**********/
+        n=___2___ ;
+        while(s[i+1+n]!='\0')  n++;
+        for(j=i+n+1; j>i; j--)  s[j+1]=s[j];
+/**********found**********/
+        s[j+1]=___3___ ;
+        i=i+1;
+     }
+}
+main()
+{  char  s[80]="baacda", c;
+   printf("\nThe string:  %s\n",s);
+   printf("\nInput a character:  ");  scanf("%c",&c);
+   fun(s,c);
+   printf("\nThe result is:  %s\n",s);
+}
+
+程序填空题(三)
+下列给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
+例如,若N=3,有下列矩阵:
+1  2  3
+4  5  6
+7  8  9
+计算后结果为
+1  0  0
+6  5  0
+10  14  9
+请在程序的下划线处填入正确的内容并把下划线删除。使程序得出正确的结果。
+注意:不得增行或删行,也不得改程序的结构!
+#include  <stdio.h>
+#define  N  4
+/**********found**********/
+void fun(int  (*t)___1___ )
+{  int  i, j;
+   for(i=1; i<N; i++)
+   {  for(j=0; j<i; j++)
+      {
+/**********found**********/
+         ___2___ =t[i][j]+t[j][i];
+/**********found**********/
+         ___3___ =0;
+      }
+   }
+}
+main()
+{  int  t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
+   printf("\nThe original array:\n");
+   for(i=0; i<N; i++)
+   {  for(j=0; j<N; j++)  printf("%2d  ",t[i][j]);
+      printf("\n");
+   }
+   fun(t);
+   printf("\nThe result is:\n");
+   for(i=0; i<N; i++)
+   {  for(j=0; j<N; j++)  printf("%2d  ",t[i][j]);
+      printf("\n");
+   }
+}
+
+程序填空题(四)
+下列给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。
+例如,形参s所指字符串为"abcdefgh",执行结果为"ahcbedgf"。
+请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+void fun(char  *s)
+{  int  i, n, k;    char c;
+   n=0;
+   for(i=0; s[i]!='\0'; i++)  n++;
+/**********found**********/
+   if(n%2==0) k=n-___1___ ;
+   else       k=n-2;
+/**********found**********/
+   c=___2___ ;
+   for(i=k-2; i>=1; i=i-2)  s[i+2]=s[i];
+/**********found**********/
+   s[1]=___3___ ;
+}
+main()
+{  char  s[80]="abcdefgh";
+   printf("\nThe original string is :  %s\n",s);
+   fun(s);
+   printf("\nThe result is :  %s\n",s);
+}
+
+程序填空题(五)
+给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。
+例如,形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgh。
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+#include  <string.h>
+#define  N  80
+void fun(char  *s, int  n, char  *t)
+{ int len,i,j=0;
+  len=strlen(s);
+/**********found**********/
+  if(n>=len) strcpy(__1__);
+  else {
+/**********found**********/
+     for(i=len-n; i<=len-1; i++)  t[j++]= __2__ ;
+/**********found**********/
+     t[j]= __3__ ;
+  }
+}
+main()
+{ char  s[N],t[N]; int  n;
+  printf("Enter a string:  ");gets(s);
+  printf( "Enter n:");  scanf("%d",&n);
+  fun(s,n,t);
+  printf("The string t :  ");  puts(t);
+}
+
+程序填空题(六)
+给定程序中,函数fun的功能是:统计形参s所指的字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,若形参s所指的字符串为"abcdef35adgh3kjsdf7",则输出结果为4。
+请在下划线处填入正确内容并将下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+void fun(char  *s, int  *t)
+{  int i, n;
+   n=0;
+/**********found**********/
+   for(i=0; ___1___ !=0; i++)
+/**********found**********/
+      if(s[i]>='0'&&s[i]<= ___2___ ) n++;
+/**********found**********/
+    ___3___ ;
+}
+main()
+{  char  s[80]="abcdef35adgh3kjsdf7";
+   int t;
+   printf("\nThe original string is :  %s\n",s);
+   fun(s,&t);
+   printf("\nThe result is :  %d\n",t);
+}
+
+程序填空题(七)
+函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数 isleap用来判别某一年是否为闰年。
+例如,若输入:2008  5  1,则程序输出:2008年5月1日是该年的第122天。
+请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的
+结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+int  isleap(int  year)
+{ int  leap;
+  leap= (year%4==0 && year%100!=0 || year%400==0);
+/**********found**********/
+  return  __1__;
+}
+int fun(int  year, int  month, int  day)
+{  int  table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
+   int  days=0 , i;
+   for(i=1; i<month; i++)
+      days=days + table[i];
+/**********found**********/
+   days=days+__2__ ;
+   if( isleap(year) && month>2 )
+ /**********found**********/
+     days=days+__3__;
+   return  days;
+}
+main()
+{  int  year, month, day, days ;
+   printf("请输入年、月、日:");
+   scanf("%d%d%d",&year, &month, &day);
+   days = fun(year, month, day); 
+   printf("%d年%d月%d日是该年的第%d天\n",year, month, day, days);
+}
+
+程序填空题(八)
+给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+#include  <string.h>
+#define  N  5
+#define  M  8
+void fun(char  (*ss)[M])
+{ char  *ps[N],*tp;    int  i,j,k;
+  for(i=0; i<N; i++) ps[i]=ss[i];
+  for(i=0; i<N-1; i++) {
+/**********found**********/
+    k=  __1__ ;
+    for(j=i+1; j<N; j++)
+/**********found**********/
+       if(strlen(ps[k]) < strlen(__2__) ) k=j;
+/**********found**********/
+    tp=ps[i];  ps[i]=ps[k]; ps[k]= __3__ ;
+  }
+  printf("\nThe string after sorting by length:\n\n");
+  for(i=0; i<N; i++)  puts(ps[i]);
+}
+main()
+{ char  ch[N][M]={"red","green","blue","yellow","black"};
+  int  i;
+  printf("\nThe original string\n\n");
+  for(i=0;i<N;i++)puts(ch[i]);  printf("\n");
+  fun(ch);
+}
+
+程序填空题(九)
+下列给定程序中,函数fun的功能是:将N×N矩阵主对角线元素的值与反向对角线对应位置上元素的值进行交换。
+例如,若N=3,有下列矩阵:
+1  2  3
+4  5  6
+7  8  9
+交换后为:
+3  2  1
+4  5  6
+9  8  7
+请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+#define  N  4
+/**********found**********/
+void fun(int  ___1___ , int  n)
+{  int  i,s;
+/**********found**********/
+   for(___2___; i++)
+   {  s=t[i][i];
+      t[i][i]=t[i][n-i-1];
+/**********found**********/
+      t[i][n-1-i]=___3___;
+   }
+}
+main()
+{  int  t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
+   printf("\nThe original array:\n");
+   for(i=0; i<N; i++)
+   {  for(j=0; j<N; j++)  printf("%d  ",t[i][j]);
+      printf("\n");
+   }
+   fun(t,N);
+   printf("\nThe result is:\n");
+   for(i=0; i<N; i++)
+   {  for(j=0; j<N; j++)  printf("%d  ",t[i][j]);
+      printf("\n");
+   }
+}
+
+程序填空题(十)
+下列给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后返回该串在字符串数组中的位置(即下标值),若未找到则返回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。
+请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include  <stdio.h>
+#include  <string.h>
+#define  N  5
+#define  M  8
+int fun(char  (*ss)[M],char  *t)
+{  int  i;
+/**********found**********/
+   for(i=0; i< __1__ ; i++)
+/**********found**********/
+     if(strcmp(ss[i],t)==0 ) return  __2__ ;
+   return -1;
+}
+main()
+{ char  ch[N][M]={"if","while","switch","int","for"},t[M];
+  int  n,i;
+  printf("\nThe original string\n");
+  for(i=0;i<N;i++)puts(ch[i]);  printf("\n");
+  printf("\nEnter a string for search:  ");  gets(t);
+  n=fun(ch,t);
+/**********found**********/
+  if(n==  __3__)  printf("\nDon't found!\n");
+  else  printf("\nThe position is  %d .\n",n);
+}
+
+程序填空题(十一)
+人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include <stdio.h>
+#define N 8
+typedef  struct
+{  int  num;
+   int  year,month,day ;
+}STU;
+int fun(STU  *std, STU  *k, int  year)
+{  int  i,n=0;
+   for (i=0; i<N; i++)
+/**********found**********/
+      if(  ___1___==year)
+/**********found**********/
+         k[n++]= ___2___;
+/**********found**********/
+   return (___3___);
+}
+main()
+{  STU  std[N]={ {1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},
+                 {5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};
+   STU  k[N];         
+   int  i,n,year;
+   printf("Enter a year :  ");  scanf("%d",&year);
+   n=fun(std,k,year);
+   if(n==0)
+      printf("\nNo person was born in %d \n",year);
+   else
+   {   printf("\nThese persons were born in %d \n",year);
+       for(i=0; i<n; i++)
+         printf("%d  %d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);
+   }
+}
+
+程序填空题(十二)
+给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include <stdio.h>
+typedef struct
+{  int  num;
+   char  name[10];
+}PERSON;
+/**********found**********/
+void fun(PERSON  ___1___)
+{
+/**********found**********/
+   ___2___  temp;
+   if(std[0].num>std[1].num)
+  {  temp=std[0];  std[0]=std[1];  std[1]=temp;  }
+   if(std[0].num>std[2].num)
+  {  temp=std[0];  std[0]=std[2];  std[2]=temp; }
+   if(std[1].num>std[2].num)
+  {  temp=std[1];  std[1]=std[2];  std[2]=temp;  }
+}
+main()
+{  PERSON  std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" };
+   int  i;
+/**********found**********/
+   fun(___3___);
+   printf("\nThe result is :\n");
+   for(i=0; i<3; i++)
+      printf("%d,%s\n",std[i].num,std[i].name);
+}
+
+程序填空题(十三)
+下列给定程序中,函数fun的功能是:在带头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。
+请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include <stdio.h>
+#include <stdlib.h>
+#define N 8
+typedef  struct list
+{  int  data;
+   struct list  *next;
+} SLIST;
+SLIST *creatlist(char  *);
+void outlist(SLIST  *);
+int fun( SLIST  *h, char  ch)
+{  SLIST  *p;        int  n=0;
+   p=h->next;
+/**********found**********/
+   while(p!=___1___)
+   {   n++;
+/**********found**********/
+       if (p->data==ch)  return ___2___;
+       else  p=p->next;
+   }
+   return 0;
+}
+main()
+{  SLIST  *head;       int  k;      char  ch;
+   char  a[N]={'m','p','g','a','w','x','r','d'};
+   head=creatlist(a);
+   outlist(head);
+   printf("Enter a letter:");
+   scanf("%c",&ch);
+/**********found**********/
+   k=fun(___3___);
+   if (k==0)   printf("\nNot found!\n");
+   else       printf("The sequence number is :  %d\n",k);
+}
+SLIST *creatlist(char  *a)
+{  SLIST  *h,*p,*q;      int  i;
+   h=p=(SLIST *)malloc(sizeof(SLIST));
+   for(i=0; i<N; i++)
+   {  q=(SLIST *)malloc(sizeof(SLIST));
+      q->data=a[i];  p->next=q;  p=q;
+   }
+   p->next=0;
+   return  h;
+}
+void outlist(SLIST  *h)
+{  SLIST  *p;
+   p=h->next;
+   if (p==NULL)  printf("\nThe list is NULL!\n");
+  else
+  {  printf("\nHead");
+     do
+     { printf("->%c",p->data);  p=p->next;  }
+     while(p!=NULL);
+     printf("->End\n");
+  }
+}
+
+程序填空题(十四)
+给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
+#include  <stdio.h>
+void fun(char  *s, int  a, double  f)
+{
+/**********found**********/
+  __1__ fp;
+  char  ch;
+  fp = fopen("file1.txt", "w");
+  fprintf(fp, "%s %d %f\n", s, a, f);
+  fclose(fp);
+  fp = fopen("file1.txt", "r");
+  printf("\nThe result :\n");
+  ch = fgetc(fp);
+/**********found**********/
+  while (!feof(__2__)) 
+{
+/**********found**********/
+    putchar(__3__); 
+	ch = fgetc(fp);  
+}
+    putchar('\n');
+    fclose(fp);
+}
+main()
+{ char  a[10]="Hello!";  int  b=12345;
+  double  c= 98.76;
+  fun(a,b,c);
+}
+
+程序填空题(十五)
+下列给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回1,失败时返回0。在复制的过程中,把复制的内容输出到屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。
+请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+#include <stdio.h>
+#include <stdlib.h>
+int fun(char  *source, char  *target)
+{  FILE  *fs,*ft;      char  ch;
+/**********found**********/
+   if((fs=fopen(source, ___1___))==NULL)
+      return 0;
+   if((ft=fopen(target, "w"))==NULL)
+      return 0;
+   printf("\nThe data in file :\n");
+   ch=fgetc(fs);
+/**********found**********/
+   while(!feof(___2___))
+   {  putchar( ch );
+/**********found**********/
+      fputc(ch,___3___);
+      ch=fgetc(fs);
+   }
+   fclose(fs);  fclose(ft);
+   printf("\n");
+   return  1;
+}
+main()
+{  char  sfname[20] ="myfile1",tfname[20]="myfile2";
+   FILE  *myf; int  i; char  c;
+   myf=fopen(sfname,"w");
+   printf("\nThe original data :\n");
+   for(i=1; i<30; i++){ c='A'+rand()%25;fprintf(myf,"%c",c); printf("%c",c); }
+   fclose(myf);printf("\n");
+   if (fun(sfname, tfname))  printf("Succeed!");
+   else  printf("Fail!");
+}
+
+程序填空题(十六)
+给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdlib.h>
+#include <stdio.h>
+#define N 20
+void fun(int *a)
+{
+	int i, x, n=0;
+	x=rand()%20;
+/**********found**********/
+	while (n<__1__)
+	{  for(i=0; i<n; i++ )
+/**********found**********/
+         if( x==a[i] ) 
+		    __2__;
+/**********found**********/
+     if( i==__3__)
+	 {a[n]=x; n++; }
+	 x=rand()%20;
+	}
+}
+main()
+{
+	int  x[N]={0} ,i;
+	fun( x );
+	printf("The result :  \n");
+	for( i=0; i<N; i++ )
+	{
+		printf("%4d",x[i]);
+		if((i+1)%5==0)printf("\n");
+	}
+  printf("\n");
+}
+
+程序填空题(十七)
+给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun()的作用是:将a、b、c三个结点链接成一个单向链表,并输出链表结点中的数据。
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdio.h>
+typedef struct list
+{  char data;
+   struct list *next;
+} Q;
+void fun( Q *pa, Q *pb, Q *pc)
+{  Q  *p;
+/**********found**********/
+   pa->next=___1___;
+   pb->next=pc;
+   p=pa;
+   while( p )
+   {
+/**********found**********/
+      printf("  %c",____2_____);
+/**********found**********/
+      p=____3____;
+   }
+   printf("\n");
+}
+main()
+{  Q  a, b, c;
+   a.data='E';  b.data='F';  c.data='G';  c.next=NULL;
+   fun( &a, &b, &c );
+}
+
+程序填空题(十八)
+程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdio.h>
+#define N 5
+typedef struct student {
+  long  sno;
+  char  name[10];
+  float  score[3];} STU;
+void fun(char *filename)
+{ 
+	FILE *fp; int i, j;
+	STU  s[N], t;
+/**********found**********/
+	fp=fopen(filename, __1__);
+	fread(s,sizeof(STU),N,fp);
+	fclose(fp);
+	for (i=0; i<N-1; i++)
+	  for (j=i+1; j<N; j++)
+		if (s[i].sno __2__ s[j].sno)
+		{
+			t = s[i];  s[i] = s[j];  s[j] = t;  
+		}
+			fp=fopen(filename,"wb");
+/**********found**********/
+	  __3__(s, sizeof(STU), N, fp);
+	  fclose(fp);
+}
+main()
+{ STU t[N]={ {10005,"ZhangSan", 95, 80, 88}, {10003,"LiSi", 85, 70, 78},{10002,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87},{10001,"MaChao", 91, 92, 77}}, ss[N];
+  int  i,j;  FILE  *fp;
+  fp = fopen("student.dat", "wb");
+  fwrite(t, sizeof(STU), 5, fp);
+  fclose(fp);
+  printf("\nThe original data :\n");
+  for (j=0; j<N; j++)
+  {  printf("\nNo: %ld  Name: %-8s      Scores:  ",t[j].sno, t[j].name);
+     for (i=0; i<3; i++)  printf("%6.2f ", t[j].score[i]);
+     printf("\n");
+  }
+  fun("student.dat");
+  printf("\nThe data after sorting :\n");
+  fp = fopen("student.dat", "rb");
+  fread(ss, sizeof(STU), 5, fp);
+  fclose(fp);
+  for (j=0; j<N; j++)
+  {  printf("\nNo: %ld  Name: %-8s      Scores:  ",ss[j].sno, ss[j].name);
+    for (i=0; i<3; i++)  printf("%6.2f ", ss[j].score[i]);
+    printf("\n");
+  }
+}
+
+程序填空题(十九)
+函数fun的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。
+例如,主函数中给出了4名学生的数据,则程序运行的结果为:
+学号:N1002  学号:N1006
+共有2位学生有不及格科目
+请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdio.h>
+typedef struct
+{ char num[8];  
+  double score[2];
+/**********found**********/
+} __(1)__ ;
+int fun(STU std[ ], int n)
+{  int i, k=0;
+   for(i=0; i<n; i++)
+/**********found**********/
+     if( std[i].score[0]<60__(2)__std[i].score[1]<60 ) 
+     { k++;printf("学号:%s ",std[i].num);}
+/**********found**********/
+   return __(3)__ ;
+}
+main()
+{  STU std[4]={ "N1001", 76.5,82.0 ,"N1002", 53.5,73.0, 
+                "N1005", 80.5,66.0,"N1006", 81.0,56.0 };
+  printf( "\n共有%d位学生有不及格科目\n" , fun(std,4) );
+}
+
+
+程序填空题(二十)
+用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5,7,11,13,17,19,23,…
+函数fun的作用是:用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。
+请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
+注意:不得增行或删行,也不得更改程序的结构!
+试题程序:
+#include <stdio.h>
+int fun(int n)
+{  int a[10000], i,j, count=0;
+   for (i=2; i<=n; i++)  a[i] = i;
+   i = 2;
+   while (i<n)
+   {
+/**********found**********/
+      for (j=a[i]*2; j<=n; j+=___1___)
+         a[j] = 0;
+	  i++;
+/**********found**********/
+      while (___2___==0)
+         i++;
+   }
+   printf("\nThe prime number between 2 to %d\n", n);
+   for (i=2; i<=n; i++)
+/**********found**********/
+     if (a[i]!=___3___)
+	 {  count++;
+	    printf( count%15?"%5d":"\n%5d",a[i]);  
+	 }
+	 return  count;
+}
+main()
+{  int  n=20, r;
+   r = fun(n);
+   printf("\nThe number of prime is  :  %d\n", r);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 733 - 0
C2/程序设计题1-20.txt

@@ -0,0 +1,733 @@
+程序设计题(一)
+请编写函数fun,它的功能是计算下列级数和,和值由函数值返回。
+S=1+x+x^2/2!+x^3/3!+…+x^n/n!
+例如,当n=10,x=0.3时,函数值为1.349859。
+注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include<conio.h>
+#include<stdio.h>
+#include<math.h>
+#include<stdlib.h>
+double fun(double x, int n)
+{
+  
+
+}
+void main()
+{ 
+  FILE *wf;
+  system("CLS");
+  printf("%f ",fun(0.3,10));
+/******************************/
+  wf=fopen("out.dat","w");
+  fprintf(wf,"%f",fun(0.3,10));
+  fclose(wf);
+/*****************************/
+}
+
+程序设计题(二)
+编写函数fun,其功能是:求出1~1000之间能被7或11整除,但不能同时被7和11整除的所有整数,并将其放在a所指的数组中,通过n返回这些数的个数。
+注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include <stdio.h>
+void  fun (int *a, int *n)
+{
+
+
+}
+main( )
+{  int aa[1000], n, k ;
+   void NONO (  );
+   fun ( aa, &n ) ;
+   for ( k = 0 ; k < n ; k++ )
+      if((k + 1) % 10 == 0) printf("\n") ;
+      else printf("%5d", aa[k]) ;
+   NONO( );
+}
+void NONO ( )
+{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
+  int aa[1000], n, k ;
+  FILE *fp ;
+  fp = fopen("out.dat","w") ;
+  fun ( aa, &n ) ;
+  for ( k = 0 ; k < n ; k++ )
+    if((k + 1) % 10 == 0) fprintf(fp, "\n") ;
+    else fprintf(fp, "%5d", aa[k]) ;
+  fclose(fp) ;
+}
+
+程序设计题(三)
+请编写函数fun,该函数的功能是:将s所指字符串中ASCII码值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
+例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符B的ASCII码值为偶数,字符2的ASCII码值为偶数,都应当删除,其他依此类推。最后t所指的数组中的内容应是"ACEG135"。
+注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
+#include<stdio.h>
+#include<string.h>
+#include<conio.h>
+#include<stdlib.h>
+void fun(char  *s, char t[])
+{
+  
+
+}
+void main()
+{
+  FILE *wf;
+  char s[100],t[100];
+  system("CLS");
+  printf("\nPlease enter string S: ");  
+  scanf("%s",s);
+  fun(s,t);
+  printf("\nThe result is :%s\n",t);
+/******************************/
+  wf=fopen("out.dat","w");
+  fun("ABCDEFG12345",t);
+  fprintf(wf,"%s",t);
+  fclose(wf);
+/*****************************/
+}
+
+程序设计题(四)
+请编写函数void  fun (int x, int pp[], int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
+例如,若x中的值为30,则有4个数符合要求,它们是1、3、5、15。
+注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include <conio.h>
+#include <stdio.h>
+#include <stdlib.h>
+void fun (int x, int pp[], int *n)
+{
+  
+
+}
+void main ()
+{ 
+  FILE *wf;
+  int  x,aa[1000], n, i ;
+  system("CLS");
+  printf("\nPlease enter an integer number : \n ") ;
+  scanf ("%d", &x) ;
+  fun (x, aa, &n) ;
+  for (i=0 ; i<n ; i++)
+      printf ("%d ", aa [i]);
+  printf ("\n ") ;
+/******************************/
+  wf=fopen("out.dat","w");
+  fun (30, aa, &n) ;
+  for (i=0 ; i<n ; i++)
+      fprintf (wf,"%d ", aa [i]);
+  fclose(wf);
+/*****************************/
+}
+
+程序设计题(五)
+请编函数fun,其功能是将一个数字字符串转换成与其面值相同的长整型整数。可调用strlen函数求字符串的长度。例如:在键盘输入字符串2345210,函数返回长整型数2345210。
+注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。
+#include   <stdio.h>
+#include   <string.h>
+void NONO();
+long  fun( char  *s )
+{
+
+
+}
+main()
+{  char  s[10];  long  r;
+   printf("请输入一个长度不超过9个字符的数字字符串 :  ");  gets(s);
+   r = fun( s );
+   printf(" r = %ld\n" , r );
+   NONO();
+}
+void NONO()
+{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
+  FILE *fp, *wf ;
+  int i;  long r;
+  char s[10], *p;
+  fp = fopen("in.dat","r") ;
+  wf = fopen("out.dat","w") ;
+  for(i = 0 ; i < 10 ; i++) {
+    fgets(s, 10, fp);
+    p = strchr(s, '\n');
+    if(p) *p = 0;
+    r = fun(s);
+    fprintf(wf, "%ld\n", r);
+  }
+  fclose(fp) ;
+  fclose(wf) ;
+}
+
+程序设计题(六)
+假定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了尾部的*号之外,将字符中的其它的*号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。
+例如,字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容应当是ABCDEFG*******。
+注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include <stdio.h>
+void  fun( char *a, char *p )
+{
+
+
+}
+main()
+{  char  s[81],*t;
+   void NONO (  );
+   printf("Enter a string:\n");gets(s);
+   t=s;
+   while(*t)t++;
+   t--;
+   while(*t=='*')t--;
+   fun( s , t );
+   printf("The string after deleted:\n");puts(s);
+   NONO();
+}
+void NONO()
+{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
+  FILE *in, *out ;
+  int i ; char s[81],*t ;
+  in = fopen("in.dat","r") ;
+  out = fopen("out.dat","w") ;
+  for(i = 0 ; i < 10 ; i++) {
+    fscanf(in, "%s", s) ;
+    t=s;
+    while(*t)t++;
+    t--;
+    while(*t=='*')t--;
+    fun(s,t) ;
+    fprintf(out, "%s\n", s) ;    
+  }
+  fclose(in) ;
+  fclose(out) ;
+}
+
+程序设计题(七)
+编写函数void fun(char *tt,int pp[]),统计在tt所指的字符串中'a'到'z'26个小写字母各自出现的次数,并依次放在pp所指的数组中。
+例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:
+3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include <stdio.h>
+#include <string.h>
+void fun(char *tt, int pp[])
+{
+
+
+}
+main( )
+{  char aa[1000] ;
+   int  bb[26], k ;
+   void NONO (  );
+   printf( "\nPlease enter  a char string:" ) ; scanf("%s", aa) ;
+   fun(aa, bb ) ;
+   for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ;
+   printf( "\n" ) ;
+   NONO ( ) ;
+}
+void NONO ( )
+{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
+  char aa[1000] ;
+  int bb[26], k, i ;
+  FILE *rf, *wf ;
+  rf = fopen("in.dat","r") ;
+  wf = fopen("out.dat","w") ;
+  for(i = 0 ; i < 10 ; i++) {
+    fscanf(rf, "%s", aa) ;
+    fun(aa, bb) ;
+    for ( k = 0 ; k < 26 ; k++ ) fprintf (wf, "%d ", bb[k]) ;
+    fprintf(wf, "\n" ) ;
+  }
+  fclose(rf) ;
+  fclose(wf) ;
+}
+
+程序设计题(八)
+下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:将数组左下半三角元素中的值全部置成0。例如a数组中的值为:
+1  9  7
+2  3  8
+4  5  6
+则返回主程序后a数组中的值应为:
+0  9  7
+0  0  8
+0  0  0
+注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include <conio.h>
+#include <stdio.h>
+#include <stdlib.h>
+#define N 5
+void fun (int a[][N])
+{
+ 
+
+}
+void main()
+{ 
+  FILE *wf;
+  int a[N][N],i,j;
+  int b[N][N]={1,9,7,2,4,2,3,8,1,2,4,5,6,7,5,4,0,6,8,0,2,7,1,6,4};
+  system("CLS");
+  printf("*****The array*****\n");
+  for(i=0;i<N;i++)              /*产生一个随机的5*5矩阵*/
+  { for(j=0;j<N;j++)
+        {a[i][j]=rand()%10; 
+         printf("%4d", a[i][j]);
+        }
+     printf("\n");
+  }
+  fun(a);
+  printf("THE RESULT\n");
+  for(i=0;i<N;i++)
+  { for(j=0;j<N;j++) 
+        printf("%4d",a[i][j]);
+     printf("\n");
+  }
+/******************************/
+  wf=fopen("out.dat","w");
+  fun(b);
+  for(i=0;i<N;i++)
+  { for(j=0;j<N;j++) 
+       fprintf(wf,"%4d",b[i][j]);
+    fprintf(wf,"\n");
+  }
+  fclose(wf);
+/*****************************/
+}
+
+程序设计题(九)
+请编写函数fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
+例如,若一维数组中的数据是:
+2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
+删除后,数组中的内容应该是:
+2 3 4 5 6 7 8 9 10。
+注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
+#include <stdio.h>
+#define N 80
+int fun(int a[], int n)
+{
+  
+
+}
+void main()
+{ 
+  FILE *wf;
+  int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}, i, n=20;
+  printf("The original data :\n");
+  for(i=0; i<n; i++)  
+     printf("%3d",a[i]);
+  n=fun(a,n);
+  printf("\nThe data after deleted :\n");
+  for(i=0; i<n; i++)  
+     printf("%3d",a[i]);  
+  printf("\n");
+/******************************/
+  wf=fopen("out.dat","w");
+  for(i=0; i<n; i++)  
+     fprintf(wf,"%3d",a[i]);
+  fclose(wf);
+/*****************************/
+}
+
+程序设计题(十)
+函数fun的功能是:将s所指字符串中除下标为偶数同时ASCII码值也为偶数的字符外,其余的全部删除;字符串中剩余字符所形成的新串放在t所指的数组中。
+例如,若s所指字符串中的内容为"ABCDEFG123456",其中字符A的ASCII码值为奇数,因此应当删除;字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;字符2的ASCII码值为偶数,在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是"246"。
+注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include <stdio.h>
+#include <string.h>
+void fun(char *s, char t[])
+{
+
+
+}
+main()
+{
+  char  s[100], t[100];
+  void NONO (  );
+  printf("\nPlease enter string S:"); scanf("%s", s);
+  fun(s, t);
+  printf("\nThe result is: %s\n", t);
+  NONO();
+}
+void NONO ( )
+{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
+  char s[100], t[100] ;
+  FILE *rf, *wf ;
+  int i ;
+  rf = fopen("in.dat","r") ;
+  wf = fopen("out.dat","w") ;
+  for(i = 0 ; i < 10 ; i++) {
+    fscanf(rf, "%s", s) ;
+    fun(s, t) ;
+    fprintf(wf, "%s\n", t) ;
+  }
+  fclose(rf) ;
+  fclose(wf) ;
+}
+
+程序设计题(十一)
+请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。
+注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include <stdio.h>
+#define M 4
+int fun (int a[][M])
+{
+
+
+}
+main( )
+{  int arr[2][M]={5,8,3,45,76,-4,12,82} ;void NONO ();
+   printf("max =%d\n", fun(arr)) ;
+   NONO( ) ;
+}
+void NONO ()
+{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
+  FILE *wf ;
+  int arr[][M]={5,8,3,90,76,-4,12,82} ;
+
+  wf = fopen("out.dat","w") ;
+  fprintf(wf, "max=%d\n", fun(arr)) ;
+  fclose(wf) ;
+}
+
+程序设计题(十二)
+请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。
+例如,若输入"abc4Efg",则应输出"aBc4EFg"。
+注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include<conio.h>
+#include<stdio.h>
+#include<string.h>
+#include<stdlib.h>
+void fun(char *ss)
+{
+ 
+ 
+}
+void main()
+{
+  FILE *wf;
+  char tt[81],s[81]="abc4Efg";
+  system("CLS");
+  printf("\nPlease enter an string within 80 characters:\n");
+  gets(tt);
+  printf("\nAfter changing, the string\n  %s",tt);
+  fun(tt);
+  printf("\nbecomes\n %s\n",tt);
+/******************************/
+  wf=fopen("out.dat","w");
+  fun(s);
+  fprintf (wf,"%s",s);
+  fclose(wf);
+/*****************************/
+}
+
+程序设计题(十三)
+请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
+例如,若二维数组中的数据为
+W W W W
+S S S S
+H H H H
+则字符串中的内容应是:WSHWSHWSHWSH。
+注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
+#include<stdio.h>
+#define  M  3
+#define  N  4
+void fun(char (*s)[N],char *b)
+{
+ 
+ 
+}
+void main()
+{ 
+  FILE *wf;
+  char a[100],w[M][N]={{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}};
+  int i,j;
+  printf("The matrix:\n");
+  for(i=0;i<M;i++)
+  { for(j=0;j<N;j++) 
+       printf("%3c",w[i][j]);
+    printf("\n");
+  }
+  fun(w,a);
+  printf("The A string:\n");
+  puts(a);
+  printf("\n ");
+/******************************/
+  wf=fopen("out.dat","w");
+  fprintf(wf,"%s",a);
+  fclose(wf);
+/*****************************/
+}
+
+程序设计题(十四)
+已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。
+注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+#include<stdio.h>
+#include<string.h>
+#include<conio.h>
+#include<stdlib.h>
+#define N 10
+typedef struct ss    /*定义结构体*/
+{ char num[10]; 
+  int s;
+} STU;
+fun(STU a[], STU *s)
+{
+
+  
+}
+void main()
+{ 
+  FILE *wf;
+  STU a[N]={{ "A01",81},{ "A02",89},{ "A03",66},{ "A04",87},{ "A05",77},
+  { "A06",90},{ "A07",79},{ "A08",61},{ "A09",80},{ "A10",71}},m;
+  int i;
+  system("CLS");
+  printf("*****The original data*****");
+  for(i=0;i<N;i++) 
+     printf("No=%s Mark=%d\n", a[i].num,a[i].s);
+  fun(a,&m);
+  printf("*****THE RESULT*****\n");
+  printf("The top :%s, %d\n",m.num,m.s);
+/******************************/
+  wf=fopen("out.dat","w");
+  fprintf(wf,"%s,%d",m.num,m.s);
+  fclose(wf);
+/*****************************/
+}
+
+程序设计题(十五)
+请编写函数fun,其功能是:判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。例如:若输入的数据为 123,则输出结果为:输入的数字是3位。
+注意:请勿改动主函数main和其他函数中的任何
+内容,仅在函数fun的花括号中填入所编写的若干语句。
+#include  <stdio.h>
+void NONO();
+int  fun(int  n)
+{
+
+
+}
+main()
+{  int  n, place ;
+   do{
+      printf("请输入一个4位以内的正整数:    ");
+      scanf("%d", &n);
+     }  while (n<0 || n>9999);
+   place = fun(n);
+   printf( "输入的数字是%d位\n", place );
+   NONO();
+}
+void NONO()
+{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
+  FILE *fp, *wf ;
+  int i, n, place ;
+  fp = fopen("in.dat","r") ;
+  wf = fopen("out.dat","w") ;
+  for( i=0; i<10; i++ )
+  {
+     fscanf(fp,"%d ", &n);
+     place = fun(n);
+     fprintf(wf, "%d\n", place);
+  }
+  fclose(fp) ;
+  fclose(wf) ;
+}
+
+程序设计题(十六)
+请编写函数fun,其功能是:计算并输出3~n之间所有素数的平方根之和。
+例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。
+注意:n的值要大于2但不大于100。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+试题程序:
+#include <stdio.h>
+#include <math.h>
+double fun(int n)  
+{
+
+}
+main()
+{
+	int n;
+	double sum;
+    FILE *out;
+	printf("Input  n=");
+	scanf("%d",&n);
+	sum=fun(n);
+	printf("\nsum=%f\n",sum);
+ /******************************/
+	out=fopen("out.dat","w");
+	fprintf(out,"%f\n",fun(180));
+	fclose(out);
+ /******************************/
+}
+
+程序设计题(十七)
+编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。
+例如,当a=45,b=12时,调用该函数后,c=5142。
+注意:数据文件IN.DAT中的数据不得修改。
+试题程序:
+#include <stdio.h>
+void fun(int a,int b,long *c)
+{
+
+}
+main()
+{  int a,b; long c;
+   void NONO( );
+   printf("Input a, b:");
+   scanf("%d%d", &a, &b);
+   fun(a,b,&c);
+   printf("The result is: %d\n", c);
+   NONO();
+}
+void NONO( )
+{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
+	FILE *rf, *wf ;
+	int i, a,b ; long c ;
+	rf=fopen("in.dat", "r");
+	wf=fopen("out.dat","w");
+	for(i=0;i<10;i++)
+	{
+	  fscanf(rf, "%d,%d",&a,&b);
+	  fun(a, b, &c) ;
+	  fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);
+	}
+	fclose(rf);
+	fclose(wf);
+}
+
+程序设计题(十八)
+请编写函数fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出"YES",否则返回0,主函数中输出"NO"。回文是指顺读和倒读都一样的字符串。
+例如,字符串LEVEL是回文,而字符串123312就不是回文。
+注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+试题程序:
+#include <stdio.h>
+#define N 80
+int fun(char *str)
+{
+
+}
+main()
+{
+	char s[N];
+	FILE *out;
+	char *test[]={"1234321","123421","123321","abcdCBA"};
+	int i;
+	printf("Enter a string : "); 
+	gets(s);
+	printf("\n");
+	puts(s);
+	if(fun(s))
+		printf("YES\n");
+	else
+		printf("NO\n"); 
+	 /************************************/
+	out=fopen("out.dat","w");
+	for(i=0;i<4;i++)
+		if(fun(test[i]))
+			fprintf(out,"YES\n");
+		else
+			fprintf(out,"NO\n");
+		fclose(out);
+	 /************************************/
+}
+
+程序设计题(十九)
+请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,原来的字符串为"CEAedca",排序后输出为"CedcEAa"。
+注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
+试题程序:
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+void fun(char *s,int num)
+{
+
+}
+main()
+{
+  void NONO( );
+  char s[10];
+  printf("输入7个字符的字符串:");
+  gets(s);
+  fun(s,7);
+  printf("\n%s",s);
+  NONO();
+}
+void NONO()
+{
+/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
+   输出数据,关闭文件。 */
+   char s[10] ;
+   FILE *rf, *wf ;
+   int i = 0 ;
+   rf=fopen("in.dat","r") ;
+   wf=fopen("out.dat","w") ;
+   while(i<10)
+   {
+	fgets(s,10,rf) ;
+	s[7] = 0 ;
+       fun(s,7);
+       fprintf(wf, "%s\n", s) ;
+       i++ ;
+   }
+   fclose(rf) ;
+   fclose(wf) ;
+}
+
+程序设计题(二十)
+请编写函数fun,其功能是:将一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回。函数形参a指向存放得分的数组,形参n中存放得分个数(n>2)。
+例如,若输入9.9  8.5  7.6  8.5  9.3  9.5  8.9  7.8  8.6  8.4十个得分,则输出结果为:8.687500。
+注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
+试题程序:
+#include <stdio.h>
+void NONO();
+double fun(double a[ ],int n)
+{
+
+}
+main()
+{   double  b[10], r; int i;
+    printf("输入10个数放入b数组中 :  ");
+    for (i=0; i<10; i++)   
+		scanf("%lf",&b[i]);
+    printf("输入的10个数是 :  ");
+    for (i=0; i<10; i++)   
+		printf("%4.1lf ",b[i]);    
+	printf("\n");
+	r=fun(b,10);
+    printf("去掉最高分和最低分后的平均分 :  %f\n", r );
+    NONO();
+}
+void NONO()
+{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
+  FILE *fp, *wf;
+  int i, j ;
+  double b[10], r;
+  fp = fopen("in.dat","r");
+  wf = fopen("out.dat","w");
+  for(i = 0 ; i < 10 ; i++)
+  {
+    for(j = 0 ; j < 10 ; j++) 
+	{
+      fscanf(fp,"%lf ",&b[j]);
+    }
+    r = fun(b, 10);
+    fprintf(wf, "%f\n", r);
+  }
+  fclose(fp);
+  fclose(wf);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 7 - 0
base/01-hello.c

@@ -1,6 +1,13 @@
 #include <stdio.h>
 
+/*
+ * 函数: main
+ * 功能: 程序的入口点,输出 "Hello, World!" 到标准输出。
+ * 参数: 无
+ * 返回值: int - 程序的退出状态,0 表示正常退出。
+ */
 int main() {
+    // 输出 "Hello, World!" 字符串到控制台
     printf("Hello, World!\n");
     return 0;
 }

+ 19 - 0
base/02-Variables.c

@@ -1,11 +1,30 @@
 #include <stdio.h>
 
+/*
+ * 函数名: main
+ * 功能描述: 程序入口函数,用于演示基本数据类型的声明和输出。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示正常退出。
+ */
 int main() {
+  // 声明并初始化整型变量age,表示年龄
   int age = 20;
+  
+  // 声明并初始化浮点型变量weight,表示体重
   float weight = 65.5;
+  
+  // 声明并初始化字符型变量grade,表示等级
   char grade = 'A';
+  
+  // 输出年龄信息
   printf("Age: %d\n", age);
+  
+  // 输出体重信息,保留两位小数
   printf("Weight: %.2f\n", weight);
+  
+  // 输出等级信息
   printf("Grade: %c\n", grade);
+  
+  // 返回0表示程序正常结束
   return 0;
 }

+ 15 - 2
base/03-stdio.c

@@ -1,9 +1,22 @@
 #include <stdio.h>
 
+/*
+ * 函数名: main
+ * 功能描述: 程序的入口函数,用于接收用户输入的一个整数并将其输出。
+ * 参数: 无
+ * 返回值: int - 程序执行成功时返回0,表示正常退出。
+ */
 int main() {
-    int num;
+    int num;  // 声明一个整型变量用于存储用户输入的数字
+
+    // 提示用户输入一个数字
     printf("Enter a number: ");
+    
+    // 读取用户输入的整数并存储到变量num中
     scanf("%d", &num);
+    
+    // 输出用户输入的数字
     printf("You entered: %d\n", num);
-    return 0;
+    
+    return 0;  // 返回0表示程序正常结束
 }

+ 18 - 6
base/04-if-else.c

@@ -1,15 +1,27 @@
 #include <stdio.h>
 
+/*
+ * 函数名: main
+ * 功能描述: 主函数,程序入口点。用于读取用户输入的一个整数,
+ *           并判断该数字是正数、负数还是零,然后输出相应的结果。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示正常退出。
+ */
 int main() {
-  int num;
+  int num;  // 声明一个整型变量用于存储用户输入的数字
+
+  // 提示用户输入一个数字
   printf("Enter a number: ");
-  scanf("%d", &num);
+  scanf("%d", &num);  // 从标准输入读取一个整数并存储到变量num中
+
+  // 判断输入数字的正负性并输出对应信息
   if (num > 0) {
-    printf("Positive number\n");
+    printf("Positive number\n");  // 如果num大于0,输出"Positive number"
   } else if (num < 0) {
-    printf("Negative number\n");
+    printf("Negative number\n");  // 如果num小于0,输出"Negative number"
   } else {
-    printf("Zero\n");
+    printf("Zero\n");  // 如果num等于0,输出"Zero"
   }
-  return 0;
+
+  return 0;  // 返回0表示程序正常结束
 }

+ 9 - 0
base/05-for-while.c

@@ -1,13 +1,22 @@
 #include <stdio.h>
 
+/*
+ * 函数: main
+ * 功能: 程序入口点,演示了三种循环结构的使用:for循环、while循环和do-while循环。
+ * 参数: 无
+ * 返回值: int - 程序执行成功时返回0
+ */
 int main() {
+  // 使用for循环打印数字1到8
   for (auto i = 1; i <= 8; i++)
     printf("%d ", i);
 
+  // 使用while循环从8递减打印到1
   int j = 8;
   while (j > 0)
     printf("%d ", j--);
 
+  // 使用do-while循环打印数字1到8
   int k = 1;
   do {
     printf("%d ", k++);

+ 14 - 0
base/06-array.c

@@ -1,12 +1,26 @@
 #include <stdio.h>
 
+/*
+ * 函数名: main
+ * 功能描述: 程序入口函数,用于演示数组的基本操作和输出。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示正常退出。
+ */
 int main() {
+  // 定义一个包含5个整数的数组,并初始化为{1, 2, 3, 4, 5}
   int numbers[5] = {1, 2, 3, 4, 5};
+
+  // 输出数组的第一个元素
   printf("First element: %d\n", numbers[0]);
+
+  // 输出数组的第二个元素
   printf("Second element: %d\n", numbers[1]);
 
+  // 使用循环遍历数组并逐个输出所有元素
   for (int i = 0; i < 5; i++) {
     printf("%d ", numbers[i]);
   }
+
+  // 返回0表示程序正常结束
   return 0;
 }

+ 15 - 3
base/07-fun.c

@@ -1,11 +1,23 @@
 #include <stdio.h>
 
+/**
+ * 函数名: add
+ * 功能: 计算两个整数的和
+ * 参数: 
+ *   a - 第一个整数
+ *   b - 第二个整数
+ * 返回值: 两个整数的和
+ */
 int add(int a, int b) { 
     return a + b; 
 }
 
 int main() {
-  int result = add(2, 3);
-  printf("Result: %d\n", result);
-  return 0;
+    // 调用add函数计算2和3的和,并将结果存储在result变量中
+    int result = add(2, 3);
+    
+    // 打印计算结果
+    printf("Result: %d\n", result);
+    
+    return 0;
 }

+ 13 - 0
base/08-char-string.c

@@ -1,13 +1,26 @@
 #include <stdio.h>
 
+/*
+ * 函数: main
+ * 功能: 程序入口点,演示字符串的定义、输出以及用户输入的读取和显示。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示正常退出。
+ */
 int main() {
+  // 定义一个字符数组并初始化为"John Doe",用于存储姓名
   char name[20] = "John Doe";
+  // 输出姓名到控制台
   printf("Name: %s\n", name);
 
+  // 定义一个字符数组用于存储用户输入的消息
   char message[50];
+  // 提示用户输入消息
   printf("Enter a message: ");
+  // 从标准输入读取一行文本到message数组中
   fgets(message, sizeof(message), stdin);
+  // 输出用户输入的消息到控制台
   printf("You entered: %s\n", message);
 
+  // 返回0表示程序正常结束
   return 0;
 }

+ 16 - 2
base/09-struct.c

@@ -5,13 +5,27 @@ typedef struct {
   int age;
 } Person;
 
+/*
+ * 函数: main
+ * 描述: 程序的入口点,用于创建一个Person结构体实例,
+ *       初始化其成员变量,并打印相关信息。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示正常退出。
+ */
 int main() {
-  Person person;
+  Person person;  // 声明一个Person类型的变量
+
+  // 初始化person的name字段为"John Doe"
   strcpy(person.name, "John Doe");
+
+  // 初始化person的age字段为25
   person.age = 25;
 
+  // 打印person的name字段
   printf("Name: %s\n", person.name);
+
+  // 打印person的age字段
   printf("Age: %d\n", person.age);
 
-  return 0;
+  return 0;  // 返回0表示程序正常结束
 }

+ 17 - 0
base/10-pointer.c

@@ -1,13 +1,30 @@
 #include <stdio.h>
 
+/*
+ * 函数名: main
+ * 功能描述: 演示指针的基本用法,包括变量的值、地址以及指针的声明、赋值和解引用操作。
+ * 参数: 无
+ * 返回值: int - 程序执行成功时返回0
+ */
 int main() {
+  // 声明一个整型变量并初始化为10
   int num = 10;
+  
+  // 声明一个指向整型的指针,并将num的地址赋给该指针
   int *ptr = &num;
 
+  // 打印变量num的值
   printf("Value: %d\n", num);
+  
+  // 打印变量num的内存地址
   printf("Address: %p\n", &num);
+  
+  // 打印指针ptr中存储的地址(即num的地址)
   printf("Pointer value: %p\n", ptr);
+  
+  // 解引用指针ptr,打印其指向的值(即num的值)
   printf("Dereference pointer: %d\n", *ptr);
 
+  // 程序正常结束,返回0
   return 0;
 }

+ 16 - 0
base/11-file.c

@@ -1,14 +1,30 @@
 #include <stdio.h>
 
+/*
+ * 函数: main
+ * 功能: 创建一个文件并写入文本内容,然后关闭文件。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示成功,非0表示失败。
+ */
 int main() {
+  // 打开文件以进行写入操作
   FILE *file = fopen("file.txt", "w");
+  
+  // 检查文件是否成功打开
   if (file != NULL) {
+    // 向文件中写入文本内容
     fprintf(file, "This is some text.");
+    
+    // 关闭文件
     fclose(file);
+    
+    // 输出成功信息
     printf("File created and written successfully.\n");
   } else {
+    // 输出错误信息
     printf("Error opening file.\n");
   }
 
+  // 返回程序执行状态
   return 0;
 }

+ 25 - 8
base/12-enum.c

@@ -1,18 +1,34 @@
 #include <stdio.h>
 
+/**
+ * @brief 定义一个星期中各天的枚举类型。
+ *
+ * 该枚举类型用于表示一周中的每一天,从星期一到星期日。
+ * 枚举值依次为:MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY。
+ */
 typedef enum {
-  MONDAY,
-  TUESDAY,
-  WEDNESDAY,
-  THURSDAY,
-  FRIDAY,
-  SATURDAY,
-  SUNDAY
+  MONDAY,      /**< 星期一 */
+  TUESDAY,     /**< 星期二 */
+  WEDNESDAY,   /**< 星期三 */
+  THURSDAY,    /**< 星期四 */
+  FRIDAY,      /**< 星期五 */
+  SATURDAY,    /**< 星期六 */
+  SUNDAY       /**< 星期日 */
 } Day;
-
+/**
+ * 主函数,程序的入口点。
+ *
+ * 该函数定义了一个枚举变量 `today`,表示当前的星期几,
+ * 并通过 `switch` 语句根据 `today` 的值输出对应的星期信息。
+ *
+ * 返回值:
+ *   int - 程序执行状态,0 表示正常退出。
+ */
 int main() {
+  // 定义一个枚举变量 `today`,并初始化为 `TUESDAY`
   Day today = TUESDAY;
 
+  // 使用 switch 语句根据 `today` 的值输出对应的星期信息
   switch (today) {
   case MONDAY:
     printf("It's Monday.\n");
@@ -37,5 +53,6 @@ int main() {
     break;
   }
 
+  // 返回 0,表示程序正常结束
   return 0;
 }

+ 14 - 0
base/12-malloc.c

@@ -1,24 +1,38 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+/*
+ * 函数: main
+ * 功能: 主函数,演示动态内存分配、数组初始化、遍历输出以及内存释放的过程。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,正常退出返回0。
+ */
 int main() {
+  // 动态分配一个包含5个整数的数组内存空间
   int *numbers = (int *)malloc(5 * sizeof(int));
+  
+  // 检查内存分配是否成功
   if (numbers != NULL) {
+    // 初始化数组元素
     numbers[0] = 1;
     numbers[1] = 2;
     numbers[2] = 3;
     numbers[3] = 4;
     numbers[4] = 5;
 
+    // 遍历并打印数组中的每个元素
     int i;
     for (i = 0; i < 5; i++) {
       printf("%d ", numbers[i]);
     }
 
+    // 释放动态分配的内存
     free(numbers);
   } else {
+    // 内存分配失败时输出错误信息
     printf("Memory allocation failed.\n");
   }
 
+  // 返回程序执行状态
   return 0;
 }

+ 14 - 0
base/14-recursion.c

@@ -1,17 +1,31 @@
 #include <stdio.h>
 
+/**
+ * 计算给定整数的阶乘。
+ *
+ * @param n 输入的整数,必须为非负数。
+ * @return 返回 n 的阶乘结果。如果 n <= 1,返回 1。
+ */
 int factorial(int n) {
+  // 递归终止条件:当 n 小于等于 1 时,返回 1
   if (n <= 1) {
     return 1;
   } else {
+    // 递归调用:返回 n 与 (n-1) 的阶乘的乘积
     return n * factorial(n - 1);
   }
 }
 
 int main() {
+  // 定义一个整数变量并赋值为 5
   int num = 5;
+  
+  // 调用 factorial 函数计算 num 的阶乘,并将结果存储在 result 中
   int result = factorial(num);
+  
+  // 打印结果到控制台
   printf("Factorial of %d is %d.\n", num, result);
 
+  // 程序正常退出
   return 0;
 }

+ 24 - 3
base/16-nodes.c

@@ -1,19 +1,28 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+// 定义链表节点结构体
 typedef struct Node {
-  int data;
-  struct Node *next;
+  int data;           // 节点存储的数据
+  struct Node *next;  // 指向下一个节点的指针
 } Node;
 
+/**
+ * 向链表中插入新节点
+ * @param head: 指向链表头节点的指针的地址
+ * @param data: 要插入的新节点的数据
+ */
 void insert(Node **head, int data) {
+  // 创建新节点并分配内存
   Node *newNode = (Node *)malloc(sizeof(Node));
   newNode->data = data;
   newNode->next = NULL;
 
+  // 如果链表为空,则将新节点设为头节点
   if (*head == NULL) {
     *head = newNode;
   } else {
+    // 遍历链表找到最后一个节点,并将新节点连接到末尾
     Node *temp = *head;
     while (temp->next != NULL) {
       temp = temp->next;
@@ -22,7 +31,12 @@ void insert(Node **head, int data) {
   }
 }
 
+/**
+ * 打印链表中的所有节点数据
+ * @param head: 链表的头节点指针
+ */
 void display(Node *head) {
+  // 遍历链表并打印每个节点的数据
   Node *temp = head;
   while (temp != NULL) {
     printf("%d ", temp->data);
@@ -31,11 +45,18 @@ void display(Node *head) {
   printf("\n");
 }
 
+/**
+ * 主函数:测试链表的插入和显示功能
+ */
 int main() {
-  Node *head = NULL;
+  Node *head = NULL;  // 初始化链表头节点为空
+
+  // 插入三个节点到链表中
   insert(&head, 1);
   insert(&head, 2);
   insert(&head, 3);
+
+  // 显示链表内容
   display(head);
 
   return 0;

+ 32 - 2
base/17-ptr-fun.c

@@ -1,19 +1,49 @@
 #include <stdio.h>
 
+/*
+ * 函数名: add
+ * 功能: 计算两个整数的和
+ * 参数: 
+ *   a - 第一个整数
+ *   b - 第二个整数
+ * 返回值: 两个整数的和
+ */
 int add(int a, int b) { 
-  return a + b; }
+  return a + b; 
+}
 
+/*
+ * 函数名: subtract
+ * 功能: 计算两个整数的差
+ * 参数: 
+ *   a - 被减数
+ *   b - 减数
+ * 返回值: 两个整数的差
+ */
 int subtract(int a, int b) { 
-  return a - b; }
+  return a - b; 
+}
 
+/*
+ * 函数名: main
+ * 功能: 主函数,演示函数指针的使用
+ * 参数: 无
+ * 返回值: 程序执行状态码
+ */
 int main() {
+  // 声明一个指向函数的指针,该函数接受两个int参数并返回int
   int (*ptr)(int, int);
 
+  // 将函数指针指向add函数
   ptr = add;
+  // 调用add函数并通过函数指针打印结果
   printf("Addition: %d\n", ptr(2, 3));
 
+  // 将函数指针指向subtract函数
   ptr = subtract;
+  // 调用subtract函数并通过函数指针打印结果
   printf("Subtraction: %d\n", ptr(5, 3));
 
+  // 返回程序执行成功状态
   return 0;
 }

+ 11 - 0
base/19-define.c

@@ -3,11 +3,22 @@
 #define PI 3.14159
 #define SQUARE(x) ((x) * (x))
 
+/*
+ * 函数名: main
+ * 功能描述: 计算给定半径的圆的面积,并将结果打印到控制台。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示正常退出。
+ */
 int main() {
+    // 定义圆的半径为2.5
     float radius = 2.5;
+    
+    // 使用宏SQUARE计算半径的平方,并结合PI计算圆的面积
     float area = PI * SQUARE(radius);
     
+    // 打印计算得到的圆的面积,保留两位小数
     printf("Area: %.2f\n", area);
     
+    // 返回0表示程序正常结束
     return 0;
 }

+ 14 - 3
base/20-errno.c

@@ -2,14 +2,25 @@
 #include <errno.h>
 #include <string.h>
 
+/*
+ * 函数: main
+ * 功能: 程序入口点,尝试打开一个名为 "nonexistent.txt" 的文件进行读取操作。
+ *       如果文件不存在或无法打开,则输出错误信息;否则执行文件操作并关闭文件。
+ * 参数: 无
+ * 返回值: int - 程序退出状态码,正常退出返回 0。
+ */
 int main() {
+    // 尝试以只读模式打开文件 "nonexistent.txt"
     FILE *file = fopen("nonexistent.txt", "r");
+    
+    // 检查文件是否成功打开
     if (file == NULL) {
+        // 输出文件打开失败的错误信息,包含系统错误描述
         printf("Error opening file: %s\n", strerror(errno));
     } else {
-        // 文件操作
-        fclose(file);
+        // 文件操作(此处未实现具体逻辑)
+        fclose(file); // 关闭已打开的文件
     }
     
-    return 0;
+    return 0; // 返回程序退出状态码
 }

+ 30 - 13
base/21-bit-field.c

@@ -1,20 +1,37 @@
 #include <stdio.h>
 
+/**
+ * 结构体 Flags 用于表示三种颜色标志位的状态。
+ * 每个成员变量占用1位,分别表示红色、绿色和蓝色是否被激活。
+ */
 struct Flags {
-    unsigned int isRed : 1;
-    unsigned int isGreen : 1;
-    unsigned int isBlue : 1;
+    unsigned int isRed : 1;   // 红色标志位,1表示激活,0表示未激活
+    unsigned int isGreen : 1; // 绿色标志位,1表示激活,0表示未激活
+    unsigned int isBlue : 1;  // 蓝色标志位,1表示激活,0表示未激活
 };
 
+/**
+ * 主函数:演示如何使用 Flags 结构体设置和读取颜色标志位。
+ * 
+ * 功能描述:
+ * 1. 初始化一个 Flags 结构体实例。
+ * 2. 设置各个颜色标志位的值。
+ * 3. 打印每个标志位的当前状态。
+ * 
+ * 返回值:
+ * - 返回 0 表示程序正常结束。
+ */
 int main() {
-    struct Flags f;
-    f.isRed = 1;
-    f.isGreen = 0;
-    f.isBlue = 1;
-    
-    printf("Red: %u\n", f.isRed);
-    printf("Green: %u\n", f.isGreen);
-    printf("Blue: %u\n", f.isBlue);
-    
-    return 0;
+    struct Flags f;           // 声明一个 Flags 结构体变量
+
+    f.isRed = 1;              // 设置红色标志位为激活状态
+    f.isGreen = 0;            // 设置绿色标志位为未激活状态
+    f.isBlue = 1;             // 设置蓝色标志位为激活状态
+
+    // 打印各个颜色标志位的状态
+    printf("Red: %u\n", f.isRed);    // 输出红色标志位的值
+    printf("Green: %u\n", f.isGreen); // 输出绿色标志位的值
+    printf("Blue: %u\n", f.isBlue);   // 输出蓝色标志位的值
+
+    return 0;                 // 程序正常退出
 }

+ 10 - 0
base/22-type-conver.c

@@ -1,12 +1,22 @@
 #include <stdio.h>
 
+/*
+ * 函数名: main
+ * 功能描述: 程序入口函数,演示基本的变量声明、类型转换和输出操作。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示正常退出。
+ */
 int main() {
+    // 声明并初始化整型变量a和双精度浮点型变量b
     int a = 10;
     double b = 3.14;
     
+    // 将整型变量a强制转换为双精度浮点型,并与变量b相加,结果存储在result中
     double result = (double)a + b;
     
+    // 输出结果,保留两位小数
     printf("Result: %.2f\n", result);
     
+    // 返回0表示程序正常结束
     return 0;
 }

+ 19 - 0
base/23-fun-arg.c

@@ -1,15 +1,34 @@
 #include <stdio.h>
 
+/**
+ * 函数: greet
+ * 功能: 打印问候语,包含姓名和消息。
+ * 参数:
+ *   - name: 指向字符数组的指针,表示要问候的姓名。如果为NULL,则默认使用"Guest"。
+ *   - message: 指向字符数组的指针,表示要显示的消息。
+ * 返回值: 无
+ */
 void greet(char *name, char *message) {
+  // 如果name为NULL,则将其设置为默认值"Guest"
   if (name == NULL) {
     name = "Guest";
   }
+  // 打印问候语,格式为"Hello, [name]! [message]"
   printf("Hello, %s! %s\n", name, message);
 }
 
+/**
+ * 函数: main
+ * 功能: 程序入口点,调用greet函数进行测试。
+ * 参数: 无
+ * 返回值: 整型,表示程序退出状态(0表示正常退出)。
+ */
 int main() {
+  // 调用greet函数,传入NULL作为姓名,测试默认值逻辑
   greet(NULL, "Welcome to the program.");
+  // 调用greet函数,传入具体姓名和消息
   greet("John", "Nice to meet you.");
 
+  // 返回0表示程序正常结束
   return 0;
 }

+ 12 - 0
base/24-struct-arrow.c

@@ -6,15 +6,27 @@ typedef struct {
   int y;
 } Point;
 
+/*
+ * 函数: main
+ * 功能: 主函数,演示动态内存分配和结构体成员访问的基本用法。
+ * 参数: 无
+ * 返回值: int - 程序执行状态,0表示正常退出。
+ */
 int main() {
+  // 动态分配一个Point结构体的内存空间,并将指针赋值给p
   Point *p = (Point *)malloc(sizeof(Point));
+  
+  // 初始化结构体成员x和y的值
   p->x = 2;
   p->y = 3;
 
+  // 打印结构体成员x和y的值
   printf("x: %d\n", p->x);
   printf("y: %d\n", p->y);
 
+  // 释放动态分配的内存
   free(p);
 
+  // 返回程序执行状态
   return 0;
 }

+ 8 - 0
base/25-comma.c

@@ -1,10 +1,18 @@
 #include <stdio.h>
 
+/*
+ * 函数名: main
+ * 功能描述: 程序入口函数,执行一系列算术运算并输出结果。
+ * 参数: 无
+ * 返回值: int - 程序退出状态,0表示正常退出。
+ */
 int main() {
   int a = 2, b = 3, c = 4, result;
 
+  // 执行复合表达式:先计算 (a * b) + (c - a),然后对 a、b、c 进行自增操作
   result = (a * b) + (c - a), a++, b++, c++;
 
+  // 输出计算结果和变量 a、b、c 的当前值
   printf("Result: %d\n", result);
   printf("a: %d\n", a);
   printf("b: %d\n", b);