谭浩强 c程序设计第六章
c语言程序设计第6章(谭浩强)PPT版本

/*ch5_1.c*/ #include <stdio.h> main() { int i,sum=0; 循环初值 i=1; loop: if(i<=100) { sum+=i; 循环变量增值 i++; goto loop; } printf("%d",sum); }
循环条件 sum=0+1 sum==1+2=3 sum=3+3=6 sum=6+4 …… sum=4950+100=5050 循环终值
例:#include<stdio.h> main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); }
例:#include<stdio.h> 例:#include<stdio.h> 运行结果:abcdefghij main( main( ) ) { {intint i=0; i=0; for(;i<10;) for(;i<10;putchar(‘a’+i),i++) ; putchar(‘a’+(i++)); } }
while 假(0) expr 真(非0) …… break; …… 真(非0)
do
…… break; …... while expr
假(0)
for expr1 switch 假(0) expr2 真(非0) …… break; …... const 1 语句组1 break; expr case const 2 语句组2 break; …... const n 语句组n break; default 语句组 break;
清华大学谭浩强教授的C++教程第6章

行开头的int是指 第2行开头的 是指: 所定义的指针变量是指向整 行开头的 是指: 型数据的指针变量.也就是说,指针变量pointer_1 型数据的指针变量.也就是说,指针变量 只能用来指向整型数据(例如 和pointer_2只能用来指向整型数据 例如 和j),而 只能用来指向整型数据 例如i和 , 不能指向浮点型变量a和 .这个int就是指针变量 不能指向浮点型变量 和b.这个 就是指针变量 的基类型. 的基类型.指针变量的基类型用来指定该指针变量 可以指向的变量的类型. 可以指向的变量的类型. 定义指针变量的一般形式为
图6.6 (2) *&a的含义是什么?先进行 的运算,得a的 的含义是什么? 的运算, 的含义是什么 先进行&a的运算 的 地址,再进行*运算 运算, 所指向的变量, 地址,再进行 运算,即&a所指向的变量,*&a和 所指向的变量 和 *pointer_1的作用是一样的(假设已执行了 的作用是一样的( 的作用是一样的 ),它们等价于变量 "pointer_1=&a;"),它们等价于变量 .即*&a ),它们等价于变量a. 等价, 与a等价,见图 . 等价 见图6.7.
图6.7 输入a和 两个整数 按先大后小的顺序输出a 两个整数, 例6.2 输入 和b两个整数,按先大后小的顺序输出 和b(用指针变量处理 . 用指针变量处理). 用指针变量处理 解此题的思路是: 设两个指针变量p1和 , 解此题的思路是: 设两个指针变量 和p2,使它 们分别指向a和 . 指向a和 中的大者 中的大者, 指 们分别指向 和b.使p1指向 和b中的大者,p2指 指向 向小者,顺序输出*p1,*p2就实现了按先大后小的 向小者,顺序输出 就实现了按先大后小的 顺序输出a和 .按此思路编写程序如下: 顺序输出 和b.按此思路编写程序如下:
谭浩强C程序设计课件第六章2009

特点:先执行循环体,后判断表达式 说明: 至少执行一次循环体 do~while可转化成while结构
循环体 While循环 假(0) expr 真(非0) 循环体
例 用do~while循环求
#include <stdio.h> main() { int i,sum=0; i=1; do { sum+=i; i++; }while(i<=100); printf("%d",sum); }
6.6循环的嵌套
三种循环和分支语句可互相嵌套,层数不限 外层循环可包含两个以上内循环,但不能相互交叉 嵌套循环的执行流程
(3) for( ; ;) (1) while() (2) do { …… { …… { …… do while() while() { …… { …… { …… }while(); } } …… …... …... while() } }while( ); { …… } 嵌套循环的跳转 …... 禁止: } 外循环 (4) if () (6) for( ; ;) { …… { …… do if 内循环 { () …… while() }while( ); (5) ……. ()~ while else { …… ~ } …... 内循环 swtich () else ~ } ~ ……. }
运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100
6.4 do~while语句
一般形式: do 循环体语句; while(表达式); 执行流程:
do
循环体 真(非0) while expr 假(0)
#include<stdio.h> main() { char c; for(;(c=getchar())!='\n';) printf("%c ",c); } #include <stdio.h> main() { int i,c; for(i=0;(c=getchar())!='\n';i+=3) printf("%c ",i+c); }
修——C语言程序设计(第三版)第六章-谭浩强

Computer↙ (输入) 其作用是每读入一个字符后立即输出该字符,直到输入 Computer (输出) 一个“换行”为止。请注意,从终端键盘向计算机输入 时,是在按Enter键以后才将一批数据一起送到内存缓 冲区中去的。不是从终端键盘敲入一个字符马上输出一 个字符,而是按Enter键后数据送入内存缓冲区,然 后每次从缓冲区读一个字符,在输出该字符。
循环的嵌套
(4) while( ) (5) for(;;) {… {… do{…} while( ) while( ) { } {…} … } } (6) do {…
for(;;){ } … } while( )
流程的转移控制
• 转移语句用于改变程序的流向。 • C语言提供了4种转移语句: goto语句,break语句,cotinue语句,return语 句
注意: 当for语句中的各表达式省略时,分号间隔符不能少; 在循环体中应实现循环变量的增减和循环条件的判断, 否则成为死循环。
用for 语句实现循环 说明:
(6) 表达式1和表达式3可以是一个简单的表达式,也可 以是逗号表达式。
在逗号表达式内按自左向右顺序求解,整个逗号表 达式的值为其中最右边的表达式的值。
例1:输入3个整数,从小到大排列输出
(way2) #include<stdio.h> void main() {int a, b, c, max, min; scanf(“%d%d%d”, &a, &b, &c); if (a>b) {max=a; min=b;} else {max=b; min =a;} if (max<c) max=c; else if (min<c) min=c; printf (“%d, %d, %d \n”, min, a+b+c-max-min, max); }
第六章课件 C程序设计(第三版) 谭浩强 著

第六章 循环控制
第6章 循环控制
概述 goto语句以及用goto语句构成循环 while语句 do-while语句 for语句 循环的嵌套 几种循环的比较 break语句和continue语句 程序举例
C语言程序设计
第六章 循环控制
§6.1 概述
程序中凡涉及求阶乘、累加、排序等问题都要 用循环解决,因为程序中的某一程序段要重复执行 若干次。 C语言实现循环的语句: 不提倡 goto 和if组合 while语句 do while语句 for语句 重点
< >
do-while 循环,循环体至少执行一次; while和do-while可以解决同一问题,两者可以互换。 while后的表达式一开始就为假时,两种循环结果不同。
C语言程序设计
第六章 循环控制
§6.5 for语句
for 语句是 C 语言中最为灵活,使用最广泛的 循环语句,可完全替代while,do-while语句。 一般形式
<
>
/*省略表达式1、3*/ /*省略表达式 1*/ 3*/ main( ) main( ) { int i,sum=0; { int i=1i,sum=0; ; for(i=1;i<=100;) i=1; for(;i<=100;) for(;i<=100;i++) {sum=sum+i sum=sum+i i++;} printf("%d",sum); }
循环终值
循环条件 循环体
C语言程序设计
第六章 循环控制
关于while循环语句:
while循环先判断表达式,后执行循环体。循环体有可 能一次也不执行。 循环体若包含一个以上语句,应该用{}括起来。 循环体应包含有使循环趋向结束的语句; 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇 break , goto 无限循环 while(1) 循环体 ;
C语言程序设计_课件_第六章(适于清华谭浩强版)

int data[5]={1,2,3,4,5};
注意
(1) 允许初始化一部分元素,而不是全部。 int data[5]={1,2}; (2) 初始化数组时,允许省略数组的长度。 int data[]={1,2,3,4,5}; 与int data[5]={1,2,3,4,5};是完全等价的。 (3) 初始化数组时,不能对整个数组初始化。 例如,int data[5]=1;
程序段一: #Байду номын сангаасefine Size 5 main() { int a[Size],b[Size+10]; /*正确 … } 程序段二: main() { int n=5; int data[n]; /*错误 …… }
*/
*/
6.2.2 一维数组的引用 引用数组单元的一般形式为: 数组名[下标] 数组下标可以是整型变量或整型表达式, 但不能是浮点型的变量或浮点型表达式;并且 下标不能大于[数组长度-1],因为超过部分没 有被定义过,是不能正确使用的。 图。 例如:data[4]、data[i+j]、data[i++]都是 合法的引用方式。
地址二维数组在概念上是二维的,可以说 是数组的数组,二维数组的下标在行和列两个方 向变化。但是,计算机的内存是连续编址的,也 就是说存储器单元是按一维线性排列的。那么, 如何按照地址的顺序存放二维数组呢?一般有两 种方式来存储二维数组,第一种称为按行排列, 方法是先存储完第一行中的每个元素,再存放下 一行的每个元素;第二种称为按列排列,方法是 先存储完第一列中的每个元素,再存放下一列的 每个元素。C语言的编译系统采用按行排列。
每个数组在使用之前都需要定义。 定义数组的语法是: 数据类型说明符 数组名[数组长度];
C语言程序设计第四版第六章答案_谭浩强
C语言程序设计第四版第六章答案_谭浩强1、用筛选法求100之内的素数。
解:#include#includeint main(){int i,j,n,a[101];for (i=1;i<=100;i++)a[i]=i;a[1]=0;for (i=2;i<sqrt(100);i++)< bdsfid="73" p=""></sqrt(100);i++)<>for (j=i+1;j<=100;j++){if(a[i]!=0 && a[j]!=0)if (a[j]%a[i]==0)a[j]=0;}printf("\");for (i=2,n=0;i<=100;i++){ if(a[i]!=0){printf("%5d",a[i]);n++;}if(n==10){printf("\");n=0;}}printf("\");return 0;}2、用选择法对10整数排序。
解:#includeint main(){int i,j,min,temp,a[11];printf("enter data:\");for (i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("\");printf("The orginal numbers:\");for (i=1;i<=10;i++)printf("%5d",a[i]);printf("\");for (i=1;i<=9;i++){min=i;for (j=i+1;j<=10;j++)if (a[min]>a[j]) min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\The sorted numbers:\");for (i=1;i<=10;i++)printf("%5d",a[i]);printf("\");return 0;}3、求一个3×3的整型矩阵对角线元素之和。
《C语言程序设计》教案(清华谭浩强)
《C语言程序设计》教案(清华谭浩强)第一章:C语言概述1.1 课程介绍介绍C语言的历史和发展解释C语言的特点和应用范围强调学习C语言的重要性和目的1.2 C语言的基本概念解释编程语言和编译器的概念介绍C语言的基本数据类型和变量讲解C语言的语法结构和程序结构1.3 C语言的编译过程解释编译器的角色和功能介绍编译过程中的预处理、编译、汇编和步骤强调编译过程中产生的文件和它们的作用第二章:基本数据类型和运算符2.1 基本数据类型介绍整型、浮点型、字符型和布尔型的概念和用法解释不同数据类型的存储方式和大小强调数据类型的选择和使用场景2.2 变量和常量解释变量的概念和作用介绍变量的声明和初始化方法讲解常量的概念和用法2.3 运算符介绍算术运算符、关系运算符和逻辑运算符的概念和用法解释赋值运算符和条件运算符的作用强调不同运算符的优先级和使用规则第三章:控制语句3.1 条件语句介绍if语句的语法和用法讲解switch语句的概念和用法强调条件语句的选择和嵌套使用3.2 循环语句介绍for循环、while循环和do-while循环的概念和用法解释循环控制语句如break和continue的作用强调循环条件的设置和循环次数的控制3.3 跳转语句介绍goto语句的概念和用法讲解label标签的作用和跳转规则强调跳转语句的使用场景和可能导致的问题第四章:函数和指针4.1 函数的基本概念介绍函数的定义和声明讲解函数的参数传递和返回值强调函数的命名规则和命名规范4.2 指针的概念和用法解释指针的概念和作用介绍指针的声明和初始化方法讲解指针的赋值和指针运算4.3 指针和数组介绍数组的概念和用法解释指针和数组的关系强调指针在数组操作中的应用第五章:结构体和文件操作5.1 结构体的概念和用法介绍结构体的定义和声明讲解结构体的成员访问和内存布局强调结构体在数据组织中的应用5.2 文件操作的基本概念解释文件的概念和文件操作的重要性介绍文件打开、读写、关闭等操作的方法强调文件操作中的错误处理和文件指针的管理第六章:动态内存分配6.1 动态内存分配的概念介绍动态内存分配的原因和必要性解释malloc、calloc和realloc函数的作用和用法强调动态内存分配的注意事项和错误处理6.2 链表的概念和用法介绍链表的定义和结构讲解链表的创建、插入、删除和遍历操作强调链表的优势和应用场景6.3 动态内存分配的应用实例通过实例演示动态内存分配在实际编程中的应用讲解内存泄漏和内存溢出的概念强调编写高效和安全的程序的重要性第七章:字符串处理7.1 字符串的基本概念介绍字符串的定义和表示方法解释字符串的长度和字符串的结束标志强调字符串与数组的区别和联系7.2 字符串的常用函数介绍字符串的输入输出函数如printf和scanf 讲解字符串的拷贝、连接、比较等操作函数强调字符串处理函数的使用和注意事项7.3 字符串处理的应用实例通过实例演示字符串处理在实际编程中的应用讲解字符串排序、查找和替换等操作强调字符串处理在文本分析和数据处理中的应用第八章:标准库函数8.1 标准输入输出库函数介绍标准输入输出库stdio.h中的常用函数讲解文件读写、数据转换等函数的用法和功能强调标准库函数的使用场景和注意事项8.2 字符串处理库函数介绍字符串处理库string.h中的常用函数讲解字符串比较、查找和替换等函数的用法和功能强调字符串处理库函数的使用和与其他库函数的配合8.3 数学计算库函数介绍数学计算库math.h中的常用函数讲解数学运算、三角函数和指数函数等函数的用法和功能强调数学计算库函数在数学计算和科学计算中的应用第九章:并发编程和同步机制9.1 并发编程的基本概念介绍并发编程的定义和目的解释进程和线程的概念和关系强调并发编程的优势和挑战9.2 并发编程的同步机制介绍互斥锁、条件变量和信号量等同步机制的原理和用法讲解同步机制在多线程编程中的应用和注意事项强调同步机制在避免竞态条件和数据一致性中的重要性9.3 并发编程的应用实例通过实例演示并发编程在实际应用中的优势和挑战讲解多线程的创建、同步和通信等操作强调并发编程在多任务处理和性能优化中的应用第十章:C语言编程实践10.1 编程实践的重要性强调编程实践在学习和掌握C语言中的重要性解释编程实践对于提高编程能力和解决问题的作用强调编程实践中的代码质量和编程规范10.2 编程实践的项目和案例介绍常见的编程实践项目和案例讲解实际编程中的问题解决方法和技巧强调编程实践中的调试和测试的重要性10.3 编程实践的资源和工具介绍编程实践中的常用工具和环境讲解集成开发环境(IDE)的使用和代码管理强调编程实践中的团队合作和代码分享的重要性重点和难点解析重点环节1:C语言的基本概念和特点需要重点关注C语言的历史和发展,以及其特点和应用范围。
c程序设计第二版谭浩强课后答案
c程序设计第二版谭浩强课后答案C程序设计第二版是谭浩强教授编写的一本广泛使用的计算机程序设计教材,它以C语言为基础,深入浅出地介绍了程序设计的基本概念、语法规则和编程技巧。
这本书的课后习题对于加深理解C语言的知识点非常有帮助。
以下是部分课后习题的答案,供参考:第一章程序设计和C语言概述1. 问题一:简述程序设计的基本步骤。
- 答案:程序设计的基本步骤包括需求分析、设计、编码、测试和维护。
2. 问题二:C语言的主要特点是什么?- 答案:C语言的主要特点包括简洁高效、结构化、可移植性、丰富的运算符、灵活的数据类型和内存管理能力。
第二章 C语言程序的结构1. 问题一:C语言程序的基本结构是什么?- 答案:C语言程序的基本结构包括预处理指令、函数定义和主函数。
2. 问题二:什么是函数?C语言中函数的定义规则是什么?- 答案:函数是一段具有特定功能的代码块,可以被重复调用。
C 语言中函数的定义规则包括返回类型、函数名和参数列表。
第三章数据类型、运算符和表达式1. 问题一:C语言中的基本数据类型有哪些?- 答案:C语言中的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)。
2. 问题二:算术运算符有哪些?它们的优先级是怎样的?- 答案:算术运算符包括加(+)、减(-)、乘(*)、除(/)和模(%)。
它们的优先级从高到低依次是乘除、模、加减。
第四章控制语句1. 问题一:C语言中的条件语句有哪些?- 答案:C语言中的条件语句包括if语句、if...else语句和switch语句。
2. 问题二:循环语句有哪些?它们的基本结构是什么?- 答案:C语言中的循环语句包括while循环、do...while循环和for循环。
它们的基本结构是初始化、条件判断和迭代。
第五章数组1. 问题一:什么是数组?数组的声明方式有哪些?- 答案:数组是相同数据类型元素的集合。
数组的声明方式包括在函数内部声明和全局声明。
c程序设计第四版(谭浩强)第六章答案
# include<stdio.h># include<math.h># include<string.h>/*int main() //筛选法求100以内的素数{intp,m=0,i,j;for(i=2;i<100;i++){p=(int)sqrt(i);for(j=2;j<=p;j++)if(i%j==0)break;if(j==p+1){printf("%-3d",i);m+=1;}if(m%10==0)printf("\n");}putchar('\n');}void sort(int a[],int n) //选择法排序{inti,j,k;for(i=1;i<n;i++)for(j=i;j<n;j++)if(a[i-1]>a[j]){k=a[i-1];a[i-1]=a[j];a[j]=k;}}int main(){int a[10],i;printf("10 munber:");for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10);printf("sort:");for(i=0;i<10;i++)printf("%-2d",a[i]);putchar('\n');}int main(){int a[3][3],i,j,s=0; //求对角线元素之和printf("输入矩阵:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)s+=a[i][i];printf("对角线元素之和为:%d\n",s);}int main(){int a[]={1,2,3,4,6,7,8,9}; //向已排好序的数组插入新数ints,b,i,j;s=sizeof(a)/4;printf("enter number:");scanf("%d",&b);for(i=0;i<s;i++)if(b>a[i]&&i!=s-1)continue;else if(i==s-1)a[s]=b;else{for(j=s;j>i;j--)a[j]=a[j-1];a[i]=b;break;}printf("new sort:");for(i=0;i<=s;i++)printf("%-2d",a[i]);printf("\n");}int main(){int a[9]={1,2,3,4,5,6,7,8,9},i,n,t,l; //逆序输出l=sizeof(a)/4;n=l/2;for(i=0;i<=n;i++){t=a[i];a[i]=a[l-i-1];a[l-i-1]=t;}for(i=0;i<l;i++)printf("%d ",a[i]);putchar('\n');}int main(){int a[10][10],i,j; //杨辉三角for(i=0;i<10;i++)for(j=0;j<10;j++)if(j==0||i==j)a[i][j]=1;else if(i>j)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<10;i++)for(j=0;j<10;j++){if(i>=j)printf("%-4d",a[i][j]);if(j==9)putchar('\n');}putchar('\n');}int a[25][25]={0}; //魔方阵void array(int n){staticint b[2];inti,j,k;for(k=1;k<=n*n;k++){if(k==1){a[0][n/2]=k;b[0]=0;b[1]=n/2;}else{if(b[0]==0&&b[1]<n-1){a[n-1][(b[1]+1)]=k;b[0]=n-1;b[1]=b[1]+1;}else if(b[0]>0&&b[1]==n-1){a[b[0]-1][0]=k;b[0]=b[0]-1;b[1]=0;}else if(b[0]==0&&b[1]==n-1){a[1][n-1]=k;b[0]=1;b[1]=n-1;}else if(a[b[0]-1][b[1]+1]!=0){a[b[0]+1][b[1]]=k;b[0]=b[0]+1;}else{a[(b[0]-1)][(b[1]+1)]=k;b[0]=b[0]-1;b[1]=b[1]+1;}}}for(i=0;i<n;i++)for(j=0;j<n;j++){printf("%-5d",a[i][j]);if(j==n-1)putchar('\n');}}int main(){int n;printf("输入小于25的奇数:");scanf("%d",&n);array(n);}int main()int a[3][3],i,j,k,l,max; //寻找鞍点printf("输入矩阵:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){max=a[i][0];l=0;for(j=1;j<3;j++){k=0;if(max<a[i][j]){max=a[i][j];l=j;}if(j==2){for(;k<3;k++)if(max<=a[k][l])continue;elsebreak;}if(k==3)printf("鞍点为:%d\n",max);}}}void star(){printf("* * * * *\n"); //打印图案}int main(){inti,j;for(i=0;i<5;i++){for(j=0;j<2*i;j++)printf(" ");star();}#define N 15voidnum(int a[],int n){int min=0,max=N-1,mid=N/2; //折半查找法while(min<=max){mid=(max+min)/2;if(n>a[mid]){min=mid+1;}else if(n<a[mid]){max=mid-1;}else{printf("第%d个数\n",mid+1);break;} }if(min>max)printf("无此数!\n");}int main(){int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},n,i;for(i=0;i<N;i++)printf("%-3d",a[i]);printf("\nenter number:");scanf("%d",&n);num(a,n);}int main(){char a[3][80],u=0,l=0,n=0,b=0,o=0,i,j;for(i=0;i<3;i++)for(j=0;j<80;j++)scanf("%c",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<80;j++){if(a[i][j]>='A'&&a[i][j]<='Z')u+=1;else if(a[i][j]>='a'&&a[i][j]<='z')l+=1;else if(a[i][j]>='0'&&a[i][j]<='9')n+=1;else if(a[i][j]==' ')b+=1;elseo+=1;}printf("\n大写字母个数:%d\n小写字母个数:%d\n数字个数:%d\n空格个数:%d\n 其他字符个数:%d\n",u,l,n,b,o);}# define N 20int main(){char a[N]="512/R olevblf",b[N];inti=0,j=0;printf("密码:");while(a[i]){printf("%c",a[i]);i++;}printf("\n原文:");while(a[j]){if(a[j]>='a'&&a[j]<='z')b[j]='a'+'z'-a[j];else if(a[j]>='A'&&a[j]<='Z')b[j]='A'+'Z'-a[j];elseb[j]=a[j];j++;}b[j]='\0';printf("%s\n",b);}#define N 20void str_cat(char a[],char b[]) //字符串连接{int s1=strlen(a),i=0;while(b[i]){a[s1+i]=b[i];i++;}a[s1+i]='\0';}int main(){char a[N]="I ",b[N]="love you!";str_cat(a,b);printf("%s\n",a);}#define N 20void str_cpy(char a[],char b[]) //字符串复制{inti=0;while(a[i]=b[i])i++;}int main(){char s1[N],s2[]="I love you!";str_cpy(s1,s2);printf("s2=%s\ns1=%s\n",s2,s1);}*/#define N 20intstr_cmp(char a[],char b[]) //字符串比较{inti=0,n;n=strlen(b);while(a[i]==b[i]){i++;if(i==n)break;}printf("%d",a[i]-b[i]);}int main(){char s1[N],s2[N];gets(s1);gets(s2);str_cmp(s1,s2);putchar('\n');}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言第六章习题答案第一题,筛选法选素数哈哈#include<stdio.h>void main(){int m=100,i,j,flag=1,x=1;int a[100]={0};for(i=0;i<m;i++){a[i]=i+1;}for(i=2;i<=m;i++){flag=1;for(j=i;j<m;j++){if(a[j]==0){continue;}if(a[j]%i==0){a[j]=0;}else if(a[j]%i!=0&&flag==1){flag=0;}}}for (i=1;i<m;i++){if (a[i]!=0){printf("%d ",a[i]);}}}第二题用选择法对10个整数排序#include<stdio.h>void main(){int a[10];int i,j,max,m;for(i=0;i<10;i++){scanf("%d",&a[i]);}for(i=0;i<10;i++){for(j=i+1;j<=10;j++){if(a[j]<a[i]){max=a[i];a[i]=a[j];a[j]=max;}}}for(i=0;i<10;i++){printf("%d ", a[i]);}}第三题求3*3的整型二位数组,很easy,我用的是傻瓜算法。
#include<stdio.h>void main(){int a[3][3]={1,3,44,55,56,77,100,143,789};int m,n;m=a[0][0]+a[1][1]+a[2][2];n=a[0][2]+a[1][1]+a[2][0];printf("左高右低的对角线的和为%d\n",m);printf("左高右低的对角线的和为%d\t",n);}第四题拍好序的数组原以为会很快解决的问题,拖了好长的时间。
数组的组标的问题搞了半天,,不应该,以后尽量少犯。
#include<stdio.h>void main(){int a[10]={1,22,33,44,555,664,666,888,999,10000}; int b[11]={0};int i,x,m;for(i=0;i<=9;i++){b[i]=a[i];}scanf("%d",&x);if(x<=a[0]);{m=0;}if(x>=a[9]){m=10;}for(i=1;i<10;i++){if (x<=a[i]&&x>=a[i-1]){m=i;}}if (m<10){for(i=m;i<=9;i++){b[11+m-i-1]=b[11+m-i-2];}b[m]=x;}else{b[10]=x;}for(i=0;i<11;i++){printf("%d\n",b[i]);}}第五题重新排序#include<stdio.h>void main(){int a[10]={1,22,33,44,555,664,666,888,999,10000};int b[10]={0};int i ;for(i=0;i<10;i++){b[9-i]=a[i];}for(i=0;i<10;i++){printf("%d\n",b[i]);}}相较第四题,第五题简单了很多。
第六题调试程序越来越熟练了。
#include<stdio.h>void main(){int a[10]={1};int b[10]={1};int i,j,m;for(i=0;i<10;i++){for(j=0;j<=i;j++){if (i>=1&&j>=1){a[j]=b[j]+b[j-1];}printf("%d ",a[j]);}printf("\n");for(m=0;m<10;m++){b[m]=a[m];}第七题魔方阵,感觉很好玩的样子。
但是很难的样子感觉要定义,变化的矩阵啊。
肿么办?第八题就容易了不就是两个比较大小吗?怎么从数学上证明,一个矩阵鞍点只有一个呢??#include<stdio.h>void main(){int i,j,min,max,x,y,m,flag=1;int a[3][3]={1,2,3,4,5,1,6,7,8};max=a[0][0];for(i=0;i<=2;i++){for(j=0;j<=2;j++){if (max<=a[i][j]){max=a[i][j];x=i;y=j;}min=a[x][y];for(m=0;m<=2;m++){if (min>=a[m][y]){min=a[m][y];}}if(max==min){flag=0;printf("鞍点是第%d行第%d列,值为:%d\n",x,y,a[x][y]);}}if (flag){printf("该矩阵没有鞍点");}}第九题搞了半天终于搞完了。
#include<stdio.h>void main(){int a[15]={0,2,3,4,56,77,88,99,345,456,567,678,1234,2345,3456};int midlle,max=a[14],min=a[0],n=14,m,x,max_r=14,min_r=0;n=n/2;scanf("%d",&x);while(max!=min){if(a[n]==x){printf("这个数字在第%d位\n",n+1);break;}else if(min==x){printf("这个数字在第%d位\n",min_r+1);break;}else if(x==max){printf("这个数字在第%d位\n",max_r+1);break;}else if(x<a[n]&&x>min){max_r=n-1;max=a[max_r];n=(max_r+min_r)/2;}else if(x>a[n]&&x<max){min_r=n+1;min=a[min_r];n=(max_r+min_r)/2;}else{printf("查无次数!!!\n");break;}}}第十题不按照原题来做了,用一个简单的例子将原题中的。
#include<stdio.h>main(){char text[49]={"I,who can't forget you will leave here in 3 days"};int i,flag,Scharacter=0,Bcharacter=0,number=0,letter=0,space=0,others=0;for(i=0;i<=48;i++){if(text[i]>=48&&text[i]<=57){number+=1;}else if(text[i]>=97&&text[i]<=122){Scharacter+=1;}else if(text[i]>=65&&text[i]<=90){Bcharacter+=1;}else if(text[i]==32){space+=1;}else{others+=1;}}printf("大写字母的个数为:%d\n",Bcharacter); printf("小写字母的个数为:%d\n",Scharacter); printf("数字的个数为:%d\n",number);printf("空格的个数为:%d\n",space);printf("其它字符的个数为:%d\n",others);}第十一题这题真简单。
#include<stdio.h>void main(){char m='*';int i,j,n;for(i=1;i<=5;i++){for(j=2;j<=i;j++){printf(" ");}for(n=1;n<=5;n++){printf("%c ",m);}printf("\n");}}第十二题密码翻译;#include<stdio.h>main(){char c[10]="axcBDCVFM";char b[10]={" "};int i;for(i=0;i<9;i++){if(c[i]>=65&&c[i]<=90){b[i]=155-c[i];}if(c[i]>=97&&c[i]<=122 ){b[i]=219-c[i];}}printf("密码是:");for(i=0;i<9;i++){printf("%c",c[i]);}printf("\n");printf("原码是:");for(i=0;i<9;i++){printf("%c",b[i]);}printf("\n");}第13题看到打出来的字有点心酸啊,希望她能过的很好!!!!#include<stdio.h>main(){char c[10]="I love ";char b[10]="fluency!!";char a[20]=" ";int i;for(i=0;i<=6;i++){a[i]=c[i];}for(i=7;i<=16;i++){a[i]=b[i-7];}for(i=0;i<=19;i++){printf("%c",a[i]);}printf("\n");}第14题是比较简单的。