首页
动态
归档
Github
留言
工具箱
更多
邻居
壁纸
音乐
Search
1
欢迎访问我的日志空间
8,244 阅读
2
C语言读写程序文件-学习三十二
742 阅读
3
WEB音乐播放器源码
712 阅读
4
Typecho - Joe主题魔改版(持续更新)
660 阅读
5
Typecho-1.1/17.10.30-定制版源码
639 阅读
学习笔记
源码库
BUG
第九艺术
登录
Search
标签搜索
学习笔记
C语言
typecho
Java
扫雷
源码
PHP
插件
网站源码
音乐播放器
模板
git
github
bug
XG.孤梦
累计撰写
50
篇文章
累计收到
44
条评论
首页
栏目
学习笔记
源码库
BUG
第九艺术
页面
动态
归档
Github
留言
工具箱
邻居
壁纸
音乐
搜索到
39
篇与
的结果
2022-02-07
C语言字符数组-学习十四
字符数组定义用来存放字符数据的数组。字符数组中的一个元素存放一个字符。一般形式char c [10];字符数组也可以是二维或多维数组例如: char c[5][10]; 即为二维字符数组。字符数组初始化逐个字符赋给数组中各元素。例如:char c[10]={'A','b',' ','2',' ','h','a','b','c','d'}; 如果花括号中提供的初值个数大于数组长度,则语法错误;如果初值个数小于数组长度只将这符赋给数组中前面那些元素,其余为'\0';如果初值个数与预定的数组长度相同,在定义时可以省略各数组长度,系统会自动根据初值个数确定数组长度。例如:char c[]={'A','b',' ','2',' ','h','a','b','c','d'}; 例子输出一个字符串。#include <stdio.h> void main() { char c[15] = { 'M','y',' ','n','a','m','e',' ','i','s',' ','X','G','G','M'}; for (int i = 0; i < 15; i++) printf("%c", c[i]); printf(" \n"); }字符串和字符串结束标志在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。有时,人们关心的是有效字符串的长度而不是字符数组的长度。例如,定义一个字符数组长度为100,而实际有效字符只有40个。 为了测定字符串的实际长度,C语言规定了一个“字符串生束标志”,以字符'\0'代表。如果有一个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。 也就是说,在遇到字符'\0'时,表示字符串结束,由它前面的字符组成字符串。可以把一个字符串直接赋给一个字符数组所表示的变量,以初始化字符数组。例如:char c[]={"l am happy"};也可以省略花括弧,直接写成 char c[]=“l am happy";用字符串方式赋值比用字符逐个赋值要多占一个字节,用于存放字符串结束标志'\0'。注意:这里不用单个字符作为初值。而是用一个字符串作为初值。数组c的长度不是10,而是11,因为字符串常量的最后由系统加上一个'\0'。因此,初始化 char c[]="I am happy"; 与 char c[]={'I',' ','a','m',' ','h','a','p','p','y','\0'}; 等价。char c[10]={"China"};字符数组的输入输出逐个字符输入输出。用格式符 “%c” 输入或输出一个字符。将整个字符串一次输入或输出。用符 “%s” 输入或输出一个字符串。注意:用%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名,或&c。如果数组长度大于字符串实际长度,也只输出到 '\0' 结束。输出字符不包括结束符 '\0' 。如果一个字符数组中包含一个以上 '\0',则遇到第一个 '\0' 时输出就结束。可以用scanf函数输入一个字符串。例如:char c[20]; scanf("%s",c);如果利用一个scanf函数输入多个字符串,则以空格分隔。例如:#include <stdio.h> #pragma warning(disable:4996) void main() { char str1[5], str2[5], str3[5]; scanf("%s%s%s", str1, str2, str3); printf("%s %s %s\n", str1, str2, str3); }数组首地址在前面介绍过,scanf的各输入项必须以地址方式出现,如&a, &b等。但在前例中却是以数组名方式出现的,这是为什么呢?这是由于在C语言中规定,数组名就代表了数组的首地址。整个数组是以首地址开头的一个连续的内存单元。字符串处理函数C语言提供了丰富的字符串处理函数,大致可分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索几类。使用这些函数可大大减轻编程的负担用于输入输出的字符串函数,在使用前应包含头文件“stdio.h”。使用其它字符串函数则应包含头文件“string. h”。puts(str)作用:将一个字符串(以‘\0结束的字符序列)输出到终端,并且自动换行。例如:#include <stdio.h> #include <string.h> void main() { char str[] = { "China\nBeijin" }; puts(str); }gets(str)作用:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。例如:#include <stdio.h> #include <string.h> void main() { char str[10]; gets(str); puts(str); }注意:用gets和puts函数只能输入或输出一个字符串不能写成: puts (str1, str2); 或 gets(str1, str2);当输入的字符串中含有空格时,输出仍为全部字符串。说明函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。strcat()作用:把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串标志"\0",结果放在字符数组1中。本函数返回值是字符数组1的首地址。一般形式:strcat(字符数组名1,字符数组名2);要注意的是,字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。例如:#include <stdio.h> #include <string.h> #pragma warning(disable:4996) void main() { char str1[10],str2[5]; printf("输入数组1的值:\n"); gets(str1); printf("输入数组2的值:\n"); gets(str2); strcat(str1, str2); puts(str1); }strcpy()作用:把字符数组2中的字符串拷贝到字符数组1中。字符串结束标志 "\0" 也一同拷贝。字符数组2也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。一般形式:strcpy(字符数组名1,字符数组名2);可以用strcpy函数将字符串2中前面若干个字符复制到字符数组1中去。例如:strncpy( str1,str2,2); 拷贝str2的前两个字符和'\O'。要注意的是字符数组1的值会被覆盖,字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。str1="China" ; str1=str2; 是错误的,把字符串赋给某个字符数组,只能用strcpy函数。例如:#include <stdio.h> #include <string.h> #pragma warning(disable:4996) void main() { char str1[10], str2[]="China"; strcpy(str1, str2); puts(str1); }strcmp()作用:按照ASCII码从左向右逐个比较两个数组中的字符,直到出现不同字符或 '\0',并由函数返回值返回比较结果。字符串1 = 字符串2,返回值 = 0;字符串1 > 字符串2,返回值 > 0;字符串1 < 字付串2,返回值 < 0;一般形式:strcmp(字符数组名1,字符数组名2);注意:对两个字符串比较,不能以下形式:if(str1>str2) printf("yes");而只能用 if(strcmp(str1,str2)>O) printf("str1>str2");例如:#include <stdio.h> #include <string.h> void main() { int a; char str1[10], str2[]="China"; gets(str1); a = strcmp(str1, str2); if (a == 0) printf("str1 = str2\n"); if (a > 0) printf("str1 > str2\n"); if (a < 0) printf("str1 < str2\n"); }strlen()作用:测字符串的实际长度(不含字符串结束标志“10')并作为函数返回值。一般形式:strlen(字符数组名);例如:#include <stdio.h> #include <string.h> void main() { int a; char str[] = "China"; a = strlen(str); printf("字符串的长度是 %d\n", a); }strlwr()格式:strlwr(字符串);作用:将字符串中大写字母换成小写字母。strupr()格式:strupr 宁等串);作用:将字符串中小写字母换成大写字母。例子输入一串字符,统计数字的个数。#include <stdio.h> #include <string.h> void main() { char str[10],c; int i, num=0; gets(str); for (i = 0; (c = str[i]) != '\0'; i++) if (c >= '0'&&c <= '9') num++; printf("%d\n", num); }输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#include <stdio.h> #include <string.h> void main() { int i,word=0,num=0; char c,str[80]; gets(str); printf("i\t,str[i]\t,word\t,num\n"); for (i = 0; (c = str[i]) != '\0'; i++) { if (c == ' ') word=0; else if (word == 0) { word = 1; num++; } printf("%d\t,%c\t,%d\t,%d\n", i, str[i], word, num); } printf("单词的个数是 %d\n", num); }
2022年02月07日
304 阅读
0 评论
0 点赞
2022-02-05
C语言二维数组-学习十三
二维数组一般形式:类型说明符 数组名 [常量表达式] [常量表达式];例如int a[3][4]; 说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。二维数组在内存中的存放二维数组在概念上是二维的,但是,实际的硬件存储器却是连续编址的也就是说存储器单元是按一维线性排列的。在C语言中,二维数组是按行排列,即放完一行之后顺次放入第二行。二维数组的引用一般形式:数组名 [下标] [下标]例如b[1][2]=a[2][3]/2;下标可以是整型表达式。例如:a[2][3], a[2-1][2*2-1]下标值应在已定义的数组大小的范围内。例如: int a[3][4]; a[3][4]=3;错误 定义a为3行4列的数组,下标从0开始,行的最大下标为2,列最大下标为3二维数组的初始化分行给二维数组赋初值。例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。例如:int a[3][4]={{1,2,3,4,5,6,7,8,9,10,11,12};对部分元素赋初值。例如:int a[3][3]={{1},{2},{3}}; 对每一行的第一列元素赋值,未赋值的元素取0值。赋值后1 0 02 0 03 0 0对所有元素赋初值,则定义数组时,对第一维的长度可以不指定,但第二维长度不能省略。例如:int a[3][4]={{1,2,3,4,5,6,7,8,9,10,11,12};可以写成:int a[][4]={{1,2,3,4,5,6,7,8,9,10,11,12};例子有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。#include<stdio.h> main() { int max, a[3][4],i,j,x,y; max = a[0][0]; printf("请输入数据\n"); for (i = 0; i <= 2; i++){ for (j = 0; j <= 3; j++) { scanf_s("%d", &a[i][j]); } } for (i = 0; i <= 2; i++) { for (j = 0; j <= 3; j++) { if (max < a[i][j]) { max = a[i][j]; x = i+1; y = j+1; } } } printf("max=%d,在第%d行,第%d列", max, x, y); }将一个二维数组行和列的元素互换,存到另一个二维数组中。#include<stdio.h> main() { int a[2][4],b[4][2],i,j; printf("请输入数据\n"); for (i = 0; i <= 1; i++){ for (j = 0; j <= 3; j++) { scanf_s("%d", &a[i][j]); } } printf("\n"); for (i = 0; i <= 1; i++) { for (j = 0; j <= 3; j++) { b[j][i] = a[i][j]; printf("%d ", a[i][j]); } printf("\n"); } printf("\n"); for (i = 0; i <= 3; i++) { for (j = 0; j <= 1; j++) { printf("%d ", b[i][j]); } printf("\n"); } }二维数组a10的对角线为1,其他为0。#include<stdio.h> void main() { int a[10][10],i,j; for (i = 0; i <= 9; i++){ for (j = 0; j <= 9; j++) { if (i == j||i+j==9) { a[i][j] = 1; } else { a[i][j] = 0; } } } printf("\n"); for (i = 0; i <= 9; i++) { for (j = 0; j <= 9; j++) { printf("%d ", a[i][j]); } printf("\n"); } }打印出以下的杨辉三角形10行1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1#include<stdio.h> void main() { int a[10][10],i,j; for (i = 0; i <= 9; i++){ for (j = 0; j <= i; j++) { if (j == 0 || j == i) { a[i][j] = 1; } else { a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; } } } printf("\n"); for (i = 0; i <= 9; i++) { for (j = 0; j <= i; j++) { printf("%d ", a[i][j]); } printf("\n"); } }
2022年02月05日
274 阅读
0 评论
0 点赞
2022-02-03
C语言一维数组-学习十二
数组数组是一组有有序数据的集合,数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。数组中的每一个元素都属于同一个数据类型。数组必须先定义后使用。定义类型符 数组名 [常量表达式]一维数组定义的一般形式类型符 数组名 [常量表达式];例如: int a[4+6]; int b[10];引用数组元素的表示形式数组名 [下标] -例如: a[1] = 10; a[0]=a[5]+a[7]-a[2*3];注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值数组的复制#include<stdio.h> void main() { int a[10] = { 1,2,3,4,5,6,7,8,9,10 }, b[10]; for (int i = 0; i < 10; i++){ b[i] = a[i]; printf("%d ", b[i]); } }一维数组的赋值给数组赋值的方法:用赋值语句对数组元素逐个赋值;采用初始化赋值;动态赋值(scanf())。数组初始化赋值:在数组定义时给数组元素赋初值。数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。一般形式类型说明符 数组名[常量表达式] = {值,值,...,值};例如: int a [10] ={0,1,2,3,4,5,6,7,8,9}; int a [10] ={0,1,2,3,4};如果想使一个数组中全部元素值为0。可以写成: int a[10]={0,0,0,0,0,0,0,0,0,0}; 或 int a[10]={0};在对全部数组元素赋初值时,可以不指定数组。例如: int a[5]={1,2,3,4,5}; 可以写成: int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。例如: for( i=0;i<10;i++) scanf_s( "%d", &a[il);例子对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输#include<stdio.h> void main() { int a[10], i; for (i = 0; i < 10; i++) a[i] = i; for (i=9; i >= 0 ; i--) printf("%d ",a[i]); }将数组中各元素交换,将数组的第一个元素与最后一个交换,第二个元素与倒数第二个交换,以此类推。#include<stdio.h> void main() { int a[10], i,j; for (i = 0; i <= 9; i++) a[i] = i; for (i = 0; i < 10 / 2; i++) { j = a[i]; a[i] = a[9 - i]; a[9 - i] = j; } for(i=0;i<=9;i++) printf("%d ",a[i]); }求一维数组中最大元素及其下标。#include<stdio.h> void main() { int a[10], i,j,max; for (i = 0; i < 10; i++) scanf_s("%d",&a[i]); max = a[0]; for (i = 0; i <10; i++) if (a[i]>max){ max = a[i]; j = i; } printf("max=%d,j=%d\n", max, j); }用数组处理求Fibonacci数列问题#include<stdio.h> void main() { int i; int f[10] = { 1,1 }; for (i = 2; i < 10; i++) f[i] = f[i - 2] + f[i - 1]; for (i = 0; i < 10; i++) { printf("%12d\n",f[i]); } }练习{card-default width="100%" label="练习"]1、以下对一维数组a的正确说明是___。(A)int a(10);(B)int n=10,a[n];(C)int n;scanf("%d",&n);(D) #define SIZE 10 int a[SIZE]; 2、以下能对一维数组a进行正确初始化的语句是___。(A) int a[10]= (0,0,0,0,0);(B)int a[10] = {};(C)int a[] = {0};(D)int a[10] = {10*1};3、当从键盘输入18并回车后,下面程序的运行结果是___。#include<stdio.h> main() { int x, y, i, a[8], j, u, v; scanf_s("%d", &x); y = x; i = 0; do { u = y / 2; a[i] = y % 2; i++; y = u; }while (y >= 1); for (j = i - 1; j >= 0; j--) printf("%d", a[j]); }(A)10010(B)10001(C)01001(D)00110{collapse}{collapse-item label="答案"]1、D 2、C 3、A [/collapse-item]{/collapse}{/card-default}
2022年02月03日
261 阅读
0 评论
0 点赞
2022-02-02
选择与循环结构练习题-学习十一
练习{card-default width="100%" label="练习"]1、已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是___。if(x>y) z=x; x=y; y=z;(A)10 20 30(B)20 30 10(C)20 30 30(D)30 20 102、以下不正确的语句是___。(A)if(x>y) x=1;(B)if(x=y)&&(x!=0) x+=y;(C)if(x!=y) scanf("%d",&x);(D)if(x<y){x++;y++};3、请读以程序写出程序的输出结果___。#include <stdio.h> main() { int x = 1, y = 0, a = 0, b = 0; switch (x) { case 1: switch (y) { case 0: a++; break; case 1: b++; break; } case 2: a++; b++; break; } printf("a=%d,b=%d", a, b); }(A)a=1,b=0(B)a=2,b=1(C)a=2,b=2(D)a=0,b=04、写出下面程序的运行结果是___。#include <stdio.h> main() { int i; for (i = 1; i <= 5; i++) switch (i % 5) { case 0: printf("*"); break; case 1: printf("#"); break; default:printf("\n"); case 2:printf("&"); } }(A)#& & &*(B)#& &*(C)#& &(D)#&&&*5、下面程序的运行结果是___。#include <stdio.h> main() { int i = 0, j = 0, k = 0, m; for (m = 0; m < 3; m++) switch (m) { case 0: i = m++; case 1: j = ++m; break; case 2: k = m++; case 3: ++m; } printf("%d, %d, %d,%d", i, j, k, m); }(A)0,2,0,4(B)1,2,1,4(C)0,2,0,3(D)0,3,2,46、下列程序的输出结果为___。#include <stdio.h> main() { int sum = 10; for (int i = 100; i <= 10; i++) sum = sum + i; printf("%d", sum); }(A)10(B)100(C)5050(D)50057、假设i的初始值为0,每循环一次后i的值增加1。如果想要让循环执行6次,那么for语句中循环继续的条件应该是:(A)i>6(B)i<=6(C)i<7(D)i<68、有以下程序,写出输出结果___。#include <stdio.h> main(){ int i; for (i = 0; i < 3; i++) switch (i) { case 0: printf("%d", i); case 1: printf("%d", i); default: printf("%d",i); } }9、设一个三位数可以表示为abc,若其能满足条件a3+b3+c3=abc,则称其为水仙花数,编程求出所有的水仙花数。例如: 153是一个“水仙花数”,因为153=13+53+33。10、输入一行字符,分别统计出其中的英文字母、空格、数字、和其他字符的个数。11、输入一个大于3的整数n,判定它是否素数(prime,又称质数)。12、求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始该数是其前面两个数之和。F1=1 (n=1) F2=1 (n=2) .... Fn=F(n-2)+F(n-1) (n>2){/card-default}答案选择题{collapse}{collapse-item label="选择填空答案"]1、C 2、D 3、B 4、A 5、C 6、A 7、D 8、000112 [/collapse-item]{/collapse}应用题答案9、#include <stdio.h> main(){ int a,b,c,i; for (i = 100; i <= 999; i++) { a = i / 100; b = i % 100 / 10; c = i % 10; if (i == a*a*a + b*b*b + c*c*c) printf("%d,", i); } }10、#include <stdio.h> void main(){ int z,k,s,q; char c; z = k = s = q = 0; for (c = getchar(); c != '\n';) { if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z') z++; else if (c == ' ') k++; else if (c >= '0'&&c <= '9') s++; else q++; c = getchar(); } printf("字母:%d,空格:%d,数字:%d,其他:%d", z, k, s, q); }11、#include <stdio.h> void main() { int n, i; printf("请输入一个大于3整数:"); scanf_s("%d", &n); for (i = 2; i <= n - 1; i++) if (n%i == 0) break; if (i < n) printf("%d 不是素数\n", n); else printf("%d 是素数\n", n); }12、#include <stdio.h> void main() { int f1 = 1, f2 = 1, f3; int i; printf("%12d\n%12d\n", f1, f2); for (i = 1; i <= 38; i++) { f3 = f1 + f2; printf("%12d\n", f3); f1 = f2; f2 = f3; } }
2022年02月02日
280 阅读
0 评论
0 点赞
2022-02-01
C语言循环结构与循环嵌套-学习十
break语句和continue语句用break语句提前终止循环。break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。只能用于循环语句和switch语句之中,而不能单独使用用continue语句提前结束本次循环。有时并不希望终止整个循环的操作,只希望提前结束本次循环,而接着执行下次循环,这时可以用continue语句。break语可和continue语句的区别:continue语句只结束本次循环,而不是终止整个循环的执行。break语句结束整个循环过程,不再判断执行循环的条件是否成立。例子捐款活动,当人数达到1000人,或者捐款总额度达到100000,不再接受捐款,计算出平均每人捐款数额。(break)#include <stdio.h> #define SUM 100000 void main() { float amount, aver, total, i; for (i=1,total=0;i<= 1000;i++) { printf("请输入数额:"); scanf_s("%f", &amount); total = amount + total; if (total >= SUM) break; } aver = total / i; printf("平均:%f\n", aver); }要求输出100~200之间的整数不能被3整除的数。(continue)#include <stdio.h> void main() { int i; for (i=100;i<= 200;i++) { if (i % 3 != 0) printf("%d, ", i); else continue; } }循环嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环3种循环(while循环、do...while循环和for循环)可以互相嵌套时钟就是典型的循环嵌套:秒针走一圈,分针走一格;分针走一圈,时针走一格。例子,键盘输入打印行数,输出下列图案 * ** *** **** ***** ...#include <stdio.h> void main() { int i,j,n; printf("请输入打印的行数:"); scanf_s("%d", &n); for (i=1;i<= n;i++) { for (j = 1; j <= n - i; j++) printf(" "); for (j = 1; j <= i; j++) printf("*"); printf("\n"); } } 输出四行五列随机数#include <stdio.h> #include <stdlib.h> #include <time.h> void main() { srand(time(0)); //根据系统时间设置随机数种 int i,j,n =0; for (i=1;i<= 4;i++) { for (j = 1; j <= 5; j++) printf("%d\t",rand()% 100); //取得区间[O,100)的随机整数 printf("\n"); } }
2022年02月01日
304 阅读
0 评论
0 点赞
1
...
5
6
7
8