首页
动态
归档
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
留言
工具箱
邻居
壁纸
音乐
搜索到
32
篇与
的结果
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 点赞
2022-01-30
C语言循环结构-学习九
循环结构特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。while语句一般形式: while(表达式){ 语句; }流程图注意:在循环体中应有使循环趋向于结束的语句,否则程序会陷入死循环,无限执行语句。程序陷入死循环,结束用atrl+break循环体中如果包含一个以上的语句,要用{}括起来!例子在控制台输出1-30#include <stdio.h> void main() { int i = 1; while (i <= 30) { printf("%d,", i); i++; } }求sum = 1+2+3+...+100解题思路令sum表示被加数(初始值为0)令i表示加数((初始值为1)进行100次加法后结束,或者加数大于100时结束sum中存放计算结果#include <stdio.h> void main() { int sum = 0; int i = 1; while (i <= 100) { sum = sum + i; i++; } printf("%d\n", sum); }do while语句先执行循环体,再判断, do...while 循环会确保至少执行一次循环一般形式: do{ 语句; } while (表达式);例子求sum = 1+2+3+...+100,用do...while实现#include <stdio.h> void main() { int sum = 0; int i = 1; do{ sum = sum + i; i++; } while (i <= 100); printf("%d\n", sum); }for循环一般形式for ( 表达式1; 表达式2; 表达式3) { 语句; }流程图首先会执行 表达式1 语句,且只会执行一次。这一步允许声明并初始化任何循环控制变量。也可以不在这里写任何语句,只要有一个分号出现即可。接下来会判断 表达式2 语句如果为真,则执行循环主体。如果为假,则不执行循环主体,会执行 for 循环后面的下一条语句。在执行完 for 循环主体后,控制流会跳回上面的 表达式3 语句。该语句允许更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。条件再次被判断。如果为真,则执行循环,这个过程会不断重复。在条件变为假时,for 循环终止。for和while可以完成同样的循环功能,但for更为简洁和高效。例子求sum = 1+2+3+...+100,用for实现#include <stdio.h> void main() { int sum = 0; for (int i = 1; i <= 100;i++) { sum = sum + i; } printf("%d\n", sum); } 一个或两个或三个表达式均可以省略,但 表达式后面的“;” 不能缺省。为了程序正常运行,省略表达式1(循环变量赋初值)和表达式3(循环变量增量)。表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。省略了表达式1。#include <stdio.h> void main() { int sum = 0; int i = 1; for (; i <= 100;i++) { sum = sum + i; } printf("%d\n", sum); }省略了表达式2(循环条件),则不做其它处理时便成为死循环。#include <stdio.h> void main() { int sum = 0; for (int i = 1;;i++) { sum = sum + i; } printf("%d\n", sum); }省略了表达式3。#include <stdio.h> void main() { int sum = 0; for (int i = 1;i <= 100;) { sum = sum + i; i++; } printf("%d\n", sum); }goto语句一般形式:goto 语句标号; //语句标号由字母、数字和下划线组成,不能使用整数 ... 语句标号: 语句;流程图例子求sum = 1+2+3+...+100,用goto和if实现#include <stdio.h> void main() { int sum = 0; int i = 1; loop: if (i <= 100) { sum = sum + i; i++; goto loop; } printf("%d\n", sum); } 四种循环结构的区别四种循环都可以用来处理同一个问题,一般可以互相代替。一般不提倡用goto型循环。while和do-while循环,循环体中应包含使循环趋于结束的语句。for语句功能更强,凡是用while循环能完成的,用for循环都能实现用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。while循环、do-while循环和for循环,都可以用break语句跳出循环,用continue语句结束本次循环。例子思路:设置变量高度h,折叠次数n循环终止条件 h > 8848000折叠的算法 h = pow(2,n); n=n+1; (pow是计算次方的函数)假设一张纸足够大并且可以无限折叠,这张纸的厚度是1mm,那么这张纸折叠多少次可以到达珠穆朗玛峰的高度(8848m)?// while循环 #include <stdio.h> #include <math.h> void main() { int h = 0, n = 0; while (h <= 8848000) { h = pow(2, n); n++; } printf("%d\n", n - 1); } // for循环 #include <stdio.h> #include <math.h> void main() { int n, h=0; for (n=0;h <= 8848000;n++) { h = pow(2, n); } printf("%d\n", n - 1); }
2022年01月30日
249 阅读
0 评论
0 点赞
2022-01-29
C语言多分支语句-学习八
switch语句switch语句用来实现多分支选择结构一般形式:switch(表达式) //表达式必须为整数类型,包括字符型 { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; .... case 常量表达式n: 语句n; break; default: 语句n+1 }说明在case后的各常量表达式值不能相同,否则会出现错误。在case后允许有多个语可以不用{}括起来,没有语句时,什么也不做,执行后面case的语句,直到遇到break。各case和default子句的先后顺序可以变动,而不会影响程序执行结果。default子句可以省略不用。例子要求按照考试成绩的等级输出百分制分数段,A等为90分以上,B等为70~89分,c等为60一69分,D等为60分以下。成绩的等级由键盘输入。#include <stdio.h> void main() { char grade; scanf_s("%c", &grade); switch (grade) { case 'A': printf("90分以上\n"); break; case 'B': printf("70-89分\n"); break; case 'C': printf("60-79分\n"); break; case 'D': printf("60分以下\n"); break; default: printf("输入错误!\n"); } }例2:按照输入的百分制分数,打印相应的评语。要求:用switch语句实现。90—100 优秀80—89 良好70—79 中等60—69 及格<60 不及格#include <stdio.h> void main() { float score; scanf_s("%f", &score); switch ((int)(score/10)) { // case后面只能是常量表达式值,不能是关系表达式 case 0: case 1: case 2: case 3: case 4: case 5: printf("不及格\n"); break; case 6: printf("及格\n"); break; case 7: printf("中等\n"); break; case 8: printf("良好\n"); break; case 9: case 10: printf("优秀\n"); break; default: printf("输入错误!\n"); } }选择结构从键盘输入一个年份,判断是否是闰年,将结果输出到控制台#include <stdio.h> void main() { int year, leap; scanf_s("%d", &year); if (year % 4 == 0) if (year % 100 == 0) if (year % 400 == 0) leap = 1; else leap = 0; else leap = 1; else leap = 0; switch (leap) { case 1: printf("%d是闰年\n", year); break; case 0: printf("%d不是闰年\n", year); break; } }求 ax² + bx + c = 0 方程的解。解题思路:处理以下各情况a = 0 不是二次方程b² -4ac = 0 有两个相等实根b² -4ac > 0 有两个不等实根。b² -4ac < 0 有两个共辄复根。#include <stdio.h> #include <math.h> void main() { float a,b,c,disc,x1,x2,realpart,imagpart; scanf_s("%f %f %f", &a, &b, &c); if (fabs(a) <= 1e-6) printf("这个方程不是一元二次方程\n"); else { disc = b * b - 4*(a * c); if (fabs(disc) <= 1e-6) printf("方程有两相同的实数根为%.2f\n", -b /(2 * a)); else if (disc > 1e-6) { x1 = (-b + sqrt(disc)) / (2 * a); x2 = (-b - sqrt(disc)) / (2 * a); printf("方程有两不同的实数根为 x1=%.2f x2=%.2f\n",x1,x2); } else { realpart = -b / (2 * a); imagpart = sqrt(-disc)/ (2 * a); printf("方程有两个共辄复根\n %.2f+%.2fi\n", realpart, imagpart); printf(" %.2f-%.2fi\n", realpart, imagpart); } } } 不能用if (a==0)因为a是实数,而实数在计算和存储时会有一些微小的误差。采取的办法是判别 a的绝对值 是否小于一个很小的数(如 10^-6 如果小于此数,就认为a等于0。)
2022年01月29日
329 阅读
0 评论
0 点赞
1
...
4
5
6
7