c语言入门经典必背个程序
10个经典的C语言基础算法及代码

10个经典的C语言基础算法及代码1.冒泡排序算法冒泡排序是一种简单但效率较低的排序算法,在每一轮遍历中比较相邻的两个元素,如果顺序不正确则交换它们,直到整个数组有序为止。
```cvoid bubbleSort(int arr[], int n)for (int i = 0; i < n-1; i++)for (int j = 0; j < n-1-i; j++)if (arr[j] > arr[j+1])int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}```2.选择排序算法选择排序是一种简单直观的排序算法,它每次从待排序的数组中选择最小(或最大)的元素,并放到已排序的数组末尾。
```cvoid selectionSort(int arr[], int n)for (int i = 0; i < n-1; i++)int min_index = i;for (int j = i+1; j < n; j++)if (arr[j] < arr[min_index])min_index = j;}}int temp = arr[i];arr[i] = arr[min_index];arr[min_index] = temp;}```3.插入排序算法插入排序的基本思想是将数组分为已排序和未排序两部分,每次将未排序的元素插入到已排序的合适位置。
```cvoid insertionSort(int arr[], int n)for (int i = 1; i < n; i++)int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key)arr[j+1] = arr[j];j--;}arr[j+1] = key;}```4.快速排序算法快速排序使用分治法的思想,每次选择一个基准元素,将小于基准的元素放到左边,大于基准的元素放到右边,然后递归地对左右两个子数组进行排序。
C语言常用算法程序汇总

C语言常用算法程序汇总C语言是一门广泛应用于计算机编程的语言,具有较高的效率和灵活性。
在C语言中,常见的算法程序包括排序算法、查找算法、递归算法等等。
以下是一些常用的C语言算法程序的汇总:1.排序算法:-冒泡排序:通过多次迭代比较相邻元素并交换位置,将最大的元素逐渐移动到正确的位置。
-插入排序:将待排序的元素与已排序的部分依次比较并插入到正确的位置。
-选择排序:每次从待排序的元素中选择最小的元素并与已排序的部分交换位置。
-快速排序:通过选择一个基准元素,将数组划分为两个子数组进行递归排序。
2.查找算法:-顺序查找:逐个比较数组中的元素,直到找到目标元素或到数组末尾。
-二分查找:通过比较目标元素与数组中间元素的大小,逐步缩小范围,直到找到目标元素。
-哈希查找:通过散列函数将目标元素映射到哈希表的索引位置进行查找。
3.递归算法:-阶乘:通过递归调用自身计算一个正整数的阶乘。
-斐波那契数列:通过递归调用自身计算斐波那契数列的第n个数。
-二叉树遍历:通过递归调用自身遍历二叉树的各个节点。
4.图算法:- 最短路径算法:如Dijkstra算法和Floyd算法,用于计算图中两个节点之间的最短路径。
-拓扑排序:通过对有向无环图进行排序,使得所有的边从排在前面的节点指向排在后面的节点。
- 最小生成树:如Prim算法和Kruskal算法,用于找到图中连接所有节点的最小子树。
5.动态规划:-最长公共子序列:通过寻找两个字符串中的最长公共子序列,解决字符串匹配问题。
-背包问题:通过动态规划解决在给定容量下选取物品使得总价值最大的问题。
-最大子序列和:通过动态规划解决一个数组中选取连续子序列使得和最大的问题。
以上只是一些C语言中常用的算法程序的汇总,实际上,还有很多其他的算法,如逆波兰表达式、霍夫曼编码、最小割等等。
通过学习这些算法,可以更好地理解C语言的应用和开发。
(完整版)c语言初学必背代码

//1.成绩判断#include <stdio.h>int main(){//成绩int score;printf("请输入你的成绩:\n");scanf("%d", &score);//判断if(score >=0 && score < 60){printf("不及格\n");}else if(60 <= score && score < 80){printf("中等\n");}else if(80 <= score && score < 100){printf("优秀\n");}else{printf("输入错误!\n");}}//2.计算1到100的和#include <stdio.h>int main(){int sum = 0;//存结果变量int i;for(i=1;i <= 100;i++){sum = sum + i;}printf("sum=%d\n", sum);}//3.最大公约数#include <stdio.h>//求m,n的最大公约数int main(){int m, n;int i, k;printf("请输入两个数:");scanf("%d %d", &m, &n);//三元运算符找较小的那个k = m < n ? m : n;//从较小的那个数倒着往前找for(i=k; i>=1; i--){//这是公约数if((m % i == 0) && (n % i ==0)){printf("最大公约数是%d\n", i);break;//跳出for循环}}}//4.最小公倍数#include <stdio.h>//求m,n的最小公倍数int main(){int m, n;int max, min;//m,n中较大,较小的那个int k;//max, 2*max, 3*max, .....printf("请输入两个数:");scanf("%d %d", &m, &n);//也可以交换m,n,保证m小n大max = m > n ? m : n;min = m < n ? m : n;k = max;//从max开始while(k % min != 0){k += max;//每次倍增}printf("最小公倍数是%d\n", k); }//5.金字塔#include <stdio.h>//金字塔int main(){int i;//外层int j;//内层for(i=1;i<=10;i++){//当前是在第i行//先补空格10-i个for(j=1;j<=10-i;j++){printf(" ");}//再打2i-1个*for(j=1;j<=2*i-1;j++){printf("*");}printf("\n");}}//6.九九乘法表#include <stdio.h>//打印九九乘法表int main(){int i,j;for(i=1;i<=9;i++)//外层一定是9行{for(j=1; j<=i; j++)//内层第几行走几遍{printf("%d*%d=%d ", i, j, i*j);}printf("\n");}}//7.百钱买百鸡#include <stdio.h>/**百钱买百鸡,类似1,2,5凑100银币问题*/int main2(){int i,j;//公鸡,母鸡个数for(i=0; i<=20; i++)//公鸡{for(j=0; j<=33; j++)//母鸡{if( (15*i + 9*j + (100-i-j)) == 300){printf("公鸡%d,母鸡%d,小鸡%d\n", i, j, 100-i-j);}}}}//1,2,5凑100银币问题int main3(){int count = 0;//情况数int i,j;//5分个数,2分个数for(i=0; i<=20; i++)//5分个数{for(j=0; j<=50; j++)//2分个数{if( ( 5*i + 2*j ) <= 100 ){count++;printf("%d: 5分%d个,2分%d 个,1分%d个\n", count, i, j, 100-5*i-2*j);}}}}//8.一维数组的最大值、最小值、平均值#include <stdio.h>#define N 10//宏定义常量int main(){int i;//下标索引int max, min;double sum = 0;//累加和int a[N] = {58, 58, 96, 100, 25, 55, 66, 88, 99, 77};max = a[0];//假设第一个最大min = a[0];//假设第一个最小for(i=1; i<N; i++){if(a[i] > max)//比最大值还大max = a[i];//你才是最大if(a[i] < min)//比最小值还小min = a[i];//你才是最小sum += a[i];}printf("max=%d, min=%d\n", max, min);printf("average = %.2lf\n", sum/N);}//9.二维数组的最大值、最小值、平均值#include <stdio.h>int main(){int i; //第几行int j; //第几列int a[3][4] = { {1,2,3,4}, {5,-6,7,8}, {9,19,39,0}};int max = a[0][0];//假设你最大int min = a[0][0];//假设你最小double average;//平均值double sum = 0; //总和for(i=0; i<3; i++)//必定3行{for(j=0; j<4; j++)//必定4列{printf("%5d ", a[i][j]);sum += a[i][j];if(a[i][j] > max)max = a[i][j];if(a[i][j] < min)min = a[i][j];}printf("\n");}average = sum / (3*4);printf("max=%d, min=%d, avg=%.2lf\n", max, min, average);}//10.二维数组转置#include <stdio.h>//二维数组转置:行变列,列变行int main(){int i; //第几行int j; //第几列int a[3][4] = { {1,2,3,4}, {5,-6,7,8}, {9,19,39,0}};int b[4][3];for(i=0; i<3; i++){for(j=0; j<4; j++){printf("%5d", a[i][j]);}printf("\n");}//矩阵转置for(i=0; i<3; i++){for(j=0; j<4; j++){b[j][i] = a[i][j];}}for(i=0; i<4; i++){for(j=0; j<3; j++){printf("%5d", b[i][j]);}printf("\n");}}//11.冒泡排序#include <stdio.h>#define N 10//宏定义常量int main(){int i;//下标索引int j;int tmp;//临时交换用int a[N] = {58, 58, 96, 100, 25, 55, 66, 88, 99, 77};//外层循环一定是N-1for(i=0; i<N-1; i++){//两两交换,大的往后走for(j=0; j<N-i-1; j++){//交换if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;}}}for(i=0; i<N; i++){printf("%d ", a[i]);;}printf("\n");}//12.结构冒泡排序#include <stdio.h>//结构定义,用户自定义类型typedef struct student{char sno[20];//学号char name[20];//姓名int age;//年龄char gender;//性别char tel[20];//电话};int main(){int i;int j;double sum = 0;struct student tmp;//两两交换临时用;//结构数组struct student team[5];for(i=0; i<5; i++){printf("请输入第%d个队员的信息:\n", i+1);scanf("%s %s %d %c %s", team[i].sno, team[i].name, &team[i].age, &team[i].gender, team[i].tel);}//按年龄冒泡排序for(i=0; i<5; i++){for(j=0; j<5-i-1; j++){//两两交换if(team[j].age > team[j+1].age){tmp = team[j];team[j] = team[j+1];team[j+1] = tmp;}}}//取值printf("%-12s %-10s %-5s %-5s %-15s\n", "学号", "姓名", "年龄", "性别", "电话");for(i=0; i<5; i++){printf("%-12s %-10s %-5d %-5c %-15s\n", team[i].sno, team[i].name, team[i].age, team[i].gender, team[i].tel);}}//13.结构数组找年龄最大值#include <stdio.h>//结构定义,用户自定义类型typedef struct student{char sno[20];//学号char name[20];//姓名int age;//年龄char gender;//性别char tel[20];//电话};int main(){int i;struct student tmp;//找最大临时用//结构数组struct student team[5];for(i=0; i<5; i++){printf("请输入第%d个队员的信息:\n", i+1);scanf("%s %s %d %c %s", team[i].sno, team[i].name, &team[i].age, &team[i].gender, team[i].tel);}//取值printf("%-12s %-10s %-5s %-5s %-15s\n ", "学号", "姓名", "年龄", "性别", "电话");for(i=0; i<5; i++){printf("%-12s %-10s %-5d %-5c %-15s\ n", team[i].sno, team[i].name, team[i].age, team[i].gender, team[i].tel);}//找学号最大的那一个tmp = team[0];for(i=1; i<5; i++){if(strcmp(team[i].sno,tmp.sno) >0 ){tmp = team[i];}}printf("学号最大的队员如下:\n");printf("%-12s %-10s %-5d %-5c %-15s\ n", tmp.sno, , tmp.age, tmp.gender, tmp.tel);}//14.文件读写#include <stdio.h>#include <stdlib.h>//结构定义,用户自定义类型typedef struct student{char sno[20];//学号char name[20];//姓名int age;//年龄char gender;//性别char tel[20];//电话};//文件读写int main(){struct student * s, * p1;//个数未知FILE * fp;int i, n = 0;char buf[1024];//fgets缓冲区//打开文件fp = fopen("e:\\test.txt", "r");while(fgets(buf, 1024, fp) != NULL)n++;fclose(fp);//指向一个可以存储n个student结构的内存空间s = (struct student *)malloc(sizeof(struct student) * n);p1 = s;//不要动头位置s的值//打开文件fp = fopen("e:\\test.txt", "r");for(i=0; i<n; i++){//从文件中读入一行fscanf(fp, "%s %s %d %c %s", p1->sno, p1->name, &p1->age, &p1->gender, p1->tel);p1++;}fclose(fp);p1 = s;for(i=0; i<3; i++){printf("%s %s %d %c %s\n", p1->sno, p1->name, p1->age, p1->gender, p1->tel);}free(s);}//15.输入三角形三边长计算周长和面积#include<stdio.h>#include<math.h>int main(){double area,perimeter,s,a,b,c;printf("请输入三边长a b c:");scanf("%lf%lf%lf",&a,&b,&c);if((a+b>c) && (a+c>b) && (b+c>a)){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));perimeter=a+b+c;printf("area=%.2f,perimeter=%.2f\ n",area,perimeter);}else{printf("三边长无法构成三角形。
c语言初学必背代码

c语言初学必背代码为了帮助C语言初学者顺利入门,我将为大家列出一些C语言初学必背的代码片段。
这些代码片段涵盖了C语言的基础知识和常用功能,可以作为初学者学习和练习的参考。
下面是一些常见的C语言代码片段:1. 输出语句:```#include <stdio.h>int main() {printf("Hello, world!\n");return 0;}```这段代码用于输出"Hello, world!"。
`printf`函数是C语言中用于输出的函数。
2. 输入语句:```#include <stdio.h>int main() {int num;printf("请输入一个整数: ");scanf("%d", &num);printf("你输入的整数是:%d\n", num);return 0;}```这段代码用于获取用户输入的整数,并输出用户输入的整数。
3. 条件语句:```#include <stdio.h>int main() {int num;printf("请输入一个整数: ");scanf("%d", &num);if (num >= 0) {printf("你输入的是非负数。
\n");} else {printf("你输入的是负数。
\n");}return 0;}```这段代码用于判断用户输入的整数是正数还是负数,并输出相应的结果。
4. 循环语句:```#include <stdio.h>int main() {int i;for (i = 1; i <= 10; i++) {printf("%d ", i);}printf("\n");return 0;}```这段代码用于输出1到10的整数。
C语言基础必须掌握的知识点

C语言基础必须掌握的知识点C语言是一种通用的高级计算机编程语言,是学习其他编程语言的基础。
掌握C语言基础知识对于提升编程水平和解决实际问题非常重要。
本文将介绍C语言基础必须掌握的知识点。
1.基本语法:了解C语言的基本语法,包括标识符、关键字、注释、数据类型、变量、常量、运算符、表达式、语句、循环和条件语句等。
2.数据类型:掌握C语言中的基本数据类型,包括整型、浮点型、字符型和指针等。
了解它们的存储大小和范围,以及它们之间的转换。
3. 输入输出:了解C语言中的输入输出函数,包括scanf和printf 等。
掌握格式化输入输出的用法,以及如何进行输入和输出的格式控制。
4.数组:了解数组的概念和用法,包括一维数组和多维数组。
掌握数组的声明、初始化、访问和遍历等操作,以及数组和指针之间的关系。
5. 字符串:了解C语言中的字符串类型和常用的字符串处理函数,包括strlen、strcpy、strcat和strcmp等。
掌握字符串的输入和输出方法,以及字符串的常见操作。
6.函数:了解函数的概念和用法,包括函数的声明、定义、调用和返回值等。
掌握函数的参数传递方式,包括值传递和引用传递。
了解递归函数的原理和应用。
7.结构体:了解结构体的概念和用法,包括结构体的定义、访问和操作等。
掌握结构体数组和指针的使用,以及结构体和函数之间的关系。
8.文件操作:了解C语言中的文件操作函数,包括文件的打开、关闭、读取和写入等。
掌握文本文件和二进制文件的读写方法,以及文件指针的使用。
9. 动态内存管理:了解动态内存分配的原理和方法,包括malloc、calloc和realloc等函数的使用。
掌握内存的申请、释放和管理,防止内存泄漏和内存溢出。
10.指针:掌握指针的概念和用法,包括指针的声明、初始化、访问和操作等。
了解指针和数组、指针和函数之间的关系,以及指针的高级应用,如指向指针的指针和指针的运算。
11. 预处理器:了解C语言中的预处理器指令和宏定义,包括#include、#define和#ifdef等。
郝斌C语言详细笔记(附源码)

郝斌老师的C语言:课堂讲解全程动手敲代码,讲解细致,对于重要知识点的讲解不厌其烦,是一个难得的C语言入门教程。
在这里对老师的辛勤付出表示感谢。
郝斌c语言视频教程·概述:课程计划为什么学习c语言:Fortran语言主要用于科学计算,在第三代语言中,以1980年为分水岭,分为结构化和面向对象语言。
Basic语言是vb的前生,pascal语言一般是用于教学。
C语言是最重要的,其他的语言一般很少用了。
结构化的代表语言是c语言。
结构化语言的数据和操作是分离的,导致在写大项目的时候,会出现各种各样莫名其妙的问题。
在面向对象的语言中c++是最复杂的语言。
由于c++语言太复杂,sun公司对c++进行了改装,产生了java语言。
而c#是由微软开发的,和java相似,几乎一模一样。
在高级语言的执行速度上,c是最快的,c++其次,而java 和c#是最后的。
Java和c#流行,主要的一个原因是可以跨平台。
C语言的发展和过程:C语言的特点:·优点:代码量小,速度快,功能强大。
·缺点:危险性高,开发周期长,可移植性弱。
危险性高:写同一个程序,在java中会报错,而在c中不会报错,为什么呢,因为c认为程序你想怎么写就怎么写,c语言认为你写的程序不是很离谱,他都认为你写的这个程序有特殊的含义。
可以直接通过,而java 则不可以。
开发周期长:c语言是面向过程的语言,面向过程的语言的特点就是在开发大项目的时候,很容易崩溃,好比盖大楼,C语言还要造大量的砖块、钢筋等结构原材料,而C++ C# JAVA则进行了一定的继承封装等操作,相当于原材料直接给你,你只需要用它盖楼即可。
现在市场上的语言分三块C/c++:单纯的学习c是什么都做不了的。
JavaC#可移植性不强:这是针对java来说的,因为java的可移植性太强了,所以就感觉说c的可移植性不强。
金山公司最主要是靠wps办公软件来发展的。
Wps是c 语言开发的,其安装包比Office少了10多倍。
c语言必背18个经典程序

c语言必背18个经典程序
C语言是一种广泛使用的计算机编程语言,它的灵活性和可移植性使其成为许多软件开发的首选语言。
C语言的经典程序有18个,
它们是:1. Hello World程序;2. 求和程序;3. 求最大值程序;
4. 求最小值程序;
5. 求平均值程序;
6. 求阶乘程序;
7. 求阶
乘和程序;8. 求最大公约数程序;9. 求最小公倍数程序;10.
求素数程序;11. 求素数和程序;12. 求斐波那契数列程序;13. 求菲波那切数列程序;14. 求欧几里得算法程序;15. 求欧几里
得算法程序;16. 求欧几里得算法程序;17. 求欧几里得算法程序;18. 求欧几里得算法程序。
C语言的经典程序是计算机编程语言中的重要组成部分,它们可以帮助开发者更好地理解和掌握C语言的基本概念,从而更好地实
现自己的软件开发目标。
其中,Hello World程序是C语言学习的第一步,它可以帮助开发者了解C语言的基本语法,从而更好地
开发软件。
C语言常用算法程序汇总

C程序设计的常用算法算法(Algorithm):计算机解题的基本思想方法和步骤。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、简单数值类算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
1、求阶乘:n!=1*2*384…..*n; n!= n*(n-1)!=下列程序用于求n的阶乘.在累乘之前,一定要将用于存放乘积的变量的值初始化为1.long func(int n){int i;long t=1;for(i=2;i<=n;i++)t*=i;return t;}printf("\n");}main(){ int n;scanf("%d", &n);printf("n!=%ld\n", fac(n));}2、整数拆分问题:把一个整数各个位上的数字存到数组中#define N 4 /* N代表整数位数*/viod split(int n, int a[ ])/* 1478: a[ 3]=8, a[2 ]=7, a[1 ]=4…*/{int i;for(i=N-1;i!=0; i--){ a[i]=n%10;n=n/10;}}main(){int i,m=1478,b[N-1];split(m, b);for(i=0;i<4; i++)printf(“%5d”, b[i]);}3、求整数的因子之和12=1*2*3*4 long factor(int n){int i;long sum=0;for(i=1;i<=n;i++)if(n%i= =0)sum+=i;return sum;}注意:因子包括1和自身。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c语言入门经典必背个程序c语言入门经典必背18个程序1 、/* 输出9*9 口诀。
共9 行9 列,i 控制行,j 控制列。
*/#include "stdio.h"main(){int i,j,result;for (i=1;i<10;i++){ for(j=1;j<10;j++){result=i*j;printf("%d*%d=%-3d",i,j,result);/*-3d 表示左对齐,占3 位*/}printf("\n");/* 每一行后换行*/}}2 、/* 古典问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?兔子的规律为数列1,1,2,3,5,8,13,21....*/main(){long f1,f2;int i;f1=f2=1;for(i=1;i<=20;i++){ printf("%12ld %12ld",f1,f2);if(i%2==0) printf("\n");/* 控制输出,每行四个*/f1=f1+f2; /* 前两个月加起来赋值给第三个月*/f2=f1+f2; /* 前两个月加起来赋值给第三个月*/}}3 、/* 判断101-200 之间有多少个素数,并输出所有素数及素数的个数。
程序分析:判断素数的方法:用一个数分别去除 2 到sqrt( 这个数) ,如果能被整除,则表明此数不是素数,反之是素数。
*/#include "math.h"main()int m,i,k,h=0,leap=1;printf("\n");for(m=101;m<=200;m++){ k=sqrt(m+1);for(i=2;i<=k;i++)if(m%i==0){leap=0;break;}if(leap) /* 内循环结束后,leap 依然为1 ,则m 是素数*/{printf("%-4d",m);h++;if(h%10==0)printf("\n");}leap=1;}printf("\nThe total is %d",h);}4 、/* 一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1 +2 +3. 编程找出1000 以内的所有完数。
*/main(){static int k[10];int i,j,n,s;for(j=2;j<1000;j++){n=-1;s=j;for(i=1;i<j;i++){if((j%i)==0){ n++;s=s-i;k[n]=i;}}if(s==0){printf("%d is a wanshu: ",j);for(i=0;i<n;i++)printf("%d,",k[i]);printf("%d\n",k[n]);}}}5 、/* 下面程序的功能是将一个4 ×4 的数组进行逆时针旋转90 度后输出,要求原始数组的数据随机输入,新数组以 4 行 4 列的方式输出,请在空白处完善程序。
*/main(){ int a[4][4],b[4][4],i,j; /*a 存放原始数组数据,b 存放旋转后数组数据*/printf("input 16 numbers: ");/* 输入一组数据存放到数组a 中,然后旋转存放到b 数组中*/for(i=0;i<4;i++)for(j=0;j<4;j++){ scanf("%d",&a[i][j]);b[3-j][i]=a[i][j];}printf("array b:\n");for(i=0;i<4;i++){ for(j=0;j<4;j++)printf("%6d",b[i][j]);printf("\n");}}6 、/* 编程打印直角杨辉三角形*/main(){int i,j,a[6][6];for(i=0;i<=5;i++){a[i][i]=1;a[i][0]=1;}for(i=2;i<=5;i++)for(j=1;j<=i-1;j++)a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i<=5;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}7 、/* 通过键盘输入3 名学生4 门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个 4行5 列的数组中,输入时同一人数据间用空格, 不同人用回车其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。
*/#include <stdio.h>#include <stdlib.h>main(){ float a[4][5],sum1,sum2;int i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%f",&a[i][j]);for(i=0;i<3;i++){ sum1=0;for(j=0;j<4;j++)sum1+=a[i][j];a[i][4]=sum1/4;}for(j=0;j<5;j++){ sum2=0;for(i=0;i<3;i++)sum2+=a[i][j];a[3][j]=sum2/3;}for(i=0;i<4;i++){ for(j=0;j<5;j++)printf("%6.2f",a[i][j]);printf("\n");}}8 、/* 完善程序,实现将输入的字符串反序输出,如输入windows 输出swodniw 。
*/#include <string.h>main(){ char c[200],c1;int i,j,k;printf("Enter a string: ");scanf("%s",c);k=strlen(c);for (i=0,j=k-1;i<k/2;i++,j--){ c1=c[i];c[i]=c[j];c[j]=c1; }printf("%s\n",c);}指针法:{int i,j,k;char t;k=strlen(s);for(i=0,j=k-1;i<k/2;i++,j--){ t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; }}main(){ FILE *fp;char str[200],*p,i,j;if((fp=fopen("p9_2.out","w"))==NULL){ printf("cannot open the file\n");exit(0);}printf("input str:\n");gets(str);printf( “\n%s ”,str);fprintf(fp, “%s ”,str);invert(str);printf( “\n%s ”,str);fprintf(fp, “\n%s ”,str);fclose(fp);}9 、/* 下面程序的功能是从字符数组s 中删除存放在c 中的字符。
*/#include <stdio.h>main(){ char s[80],c;int j,k;printf("\nEnter a string: ");gets(s);printf("\nEnter a character: ");c=getchar( );for(j=k=0;s[j]!= '\0';j++)if(s[j]!=c)s[k++]=s[j];s[k]= '\0';printf("\n%s",s);}10 、/* 编写一个void sort(int *x,int n) 实现将x 数组中的n 个数据从大到小排序。
n 及数组元素在主函数中输入。
将结果显示在屏幕上并输出到文件p9_1.out 中*/#include<stdio.h>{int i,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]>x[k]) k=j;if(k!=i){t=x[i];x[i]=x[k];x[k]=t;}}}void main(){FILE *fp;int *p,i,a[10];fp=fopen("p9_1.out","w");p=a;printf("Input 10 numbers:");for(i=0;i<10;i++)scanf("%d",p++);p=a;sort(p,10);for(;p<a+10;p++){ printf("%d ",*p);fprintf(fp,"%d ",*p); }system("pause");fclose(fp);}11 、已知数组a 中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组 a 中,插入后,数组 a 中的元素仍然由小到大顺序排列*/main(){ int a[10]={0,12,17,20,25,28,30}; /*a[0] 为工作单元,从a[1] 开始存放数据*/ int x , i, j=6; /*j 为元素个数*/printf("Enter a number: ");scanf("%d",&x);a[0]=x;i=j; /* 从最后一个单元开始*/while(a[i]>x){ a[i+1]=a[i]; i--; } /* 将比x 大的数往后移动一个位置*/a[++i]=x;j++; /* 插入x 后元素总个数增加*/for(i=1;i<=j;i++) printf("%8d",a[i]);printf("\n");}12 、/* 编写函数replace(char *s,char c1,char c2) 实现将s 所指向的字符串中所有字符c1 用c2 替换,字符串、字符c1 和 c 2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上,并输出到文件p10_2.out 中*/#include<stdio.h>replace(char *s,char c1,char c2){ while(*s!='\0'){ if (*s==c1)*s=c2;s++;}}main(){ FILE *fp;char str[100],a,b;if((fp=fopen("p10_2.out","w"))==NULL){ printf("cannot open the file\n");exit(0); }printf("Enter a string:\n");gets(str);printf("Enter a&&b:\n");scanf("%c,%c",&a,&b);printf("%s\n",str);fprintf(fp,"%s\n",str);replace(str,a,b);printf("The new string is----%s\n",str);fprintf(fp,"The new string is----%s\n",str);fclose(fp);}13 、/* 在一个字串s1 中查找一子串s2 ,若存在则返回子串在主串中的起始位置,不存在则返回-1 。