c语言保姆级笔记六

一维数组

int a[5];

scanf("%d", &a[0]); //a[0] 是元素

printf("%d", a[0]);

sizeof(a); //20

sizeof(a[0]); //4

字符串 常量

"hello" ---> 字符串 'h' 'e' 'l' 'l' 'o' '\0'

char a[] = "hello";

printf("%s\n", a); //

char a[100] = { 0 };

scanf("%s", a); //a是数组名,同时也是数组首地址

随机数

srand(time(0)); //time(0) 能读到当前系统时间(秒值)

int a = rand() % 35 + 1; //rand 伪随机数, 需要给一个随机种子

二维数组(存储矩阵)

int a[3][4]; //3行 4列

a[0][0] 第一行第一列

a[0][1] 第一行第二列

....

作业答案

/*

//2:输入一个字符串,转换为数字

// "1234"--> int 1234 //char a[] = "1234"; ----> int 1234

//

// '4'- '0' = 4

// '0''1' '2' ... '9'

1) 取出每个字符 '1' 变成数字1 '1' -'0' 1

'4' -'0' 4

2) 写一个循环,每次取出一个字符,第二次取出一个字符时,第一次那个数*10

'1' - '0' = 1

'2' - '0' = 2 + 1 * 10 = 12

'3' - '0' = 3 + 12 * 10 = 123

'4' - '0' = 4 + 123 * 10 = 1234

#include <stdio.h>

int main()

{

inti = 0, b = 0, c = 0; //b 新取出的数,c是上次取出的数 b + c * 10

chara[100] = { 0 };

scanf("%s",a);

while(a[i]!= '\0')

{

b= a[i] - '0';

c= b + c * 10;

i++;

}

printf("cis %d\n", c);

}

*/

int a = atoi("1234"); //此函数能将字符串转成整形, 将"1234"转成1234

#include <stdio.h>

int main()

{

inta = atoi("1234");

printf("ais %d\n", a);

a= atoi("12345a12");

printf("ais %d\n", a);

a= atoi("1234.99");

printf("ais %d\n", a);

//doubleb = atof("1234.56");

//printf("bis %.2lf\n", b);

}

//3:判断一个字符串中是否存在某个子串

// string1 "ftdajgfdajkfdasklfdsa"

// string2"dajk"

#include <stdio.h>

#include <string.h>

int main()

{

inti, j;

chara[] = "ftgfdajkfdasklfdsa";

charb[] = "dajk";

for(i = 0; i < strlen(a); i++)

{

for(j = 0; j < strlen(b); j++)

{

if(a[i + j] != b[j])

{

break; //发现了一个不一致字符

}

}

if(j == strlen(b))

{

printf("存在\n");

}

}

}

练习:

1 请输入字符,然后输出其对应方向 ,示例: 输入a,输出“Left”.

a---left

s---down

w---up

d---right

#include <stdio.h>

int main()

{

chara;

scanf("%c",&a);

switch(a)

{

case'w':

printf("UP\n");

break;

case's':

printf("DOWN\n");

break;

case'd':

printf("RIGHT\n");

break;

case'a':

printf("LEFT\n");

break;

default:

printf("inputerror\n");

break;

}

}

2 输入学生成绩,程序中加入循环,可以反复输入成绩查看等级,输入-1停止

90-100 分打印 A

80-89 分打印 B

70-79 分打印 C

60-69 分打印 D

其他不及格

#include <stdio.h>

int main()

{

inta;

while(1)

{

scanf("%d",&a);

if(a== -1)

break; //结束while(1)

a= a / 10;

switch(a)

{

case10:

case9:

printf("A\n"); break; //结束switch

case8:

printf("B\n"); break;

case7:

printf("C\n"); break;

case6:

printf("D\n"); break;

default:

printf("bujige\n");break;

}

}

}

3 输入一个字符串, 再输入一个字符, 判断此字符串中有对应字符

如: 输入"hello"

再输入 'l'

输出 2

char a[100] = { 0 }; //存字符串 "hello"

char b; //存字符 'l'

scanf("%s", a); //hello + 回车,回车被留在输入缓冲区了

getchar(); //取走回车

scanf("%c", &b); //取出'l'

#include <stdio.h>

int main()

{

inti = 0, n = 0;

chara[100] = { 0 }; //存字符串 "hello"

charb; //存字符 'l'

scanf("%s",a); //hello + 回车,回车被留在输入缓冲区了

getchar(); //取走回车

scanf("%c",&b); //取出'l'

while(a[i]!= '\0')

{

if(a[i]== b)

{

n++;

}

i++;

}

printf("nis %d\n", n);

}

4 输入一个小写字母,判断是否是元音字母。 a e i o u

#include <stdio.h>

int main()

{

chara;

scanf("%c",&a);

if(a== 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u')

{

printf("yes\n");

}

else

{

printf("no\n");

}

}

5 输入一个整数,统计其中有多少个二进制的1。

比如: 48 ----> 0x30 ---> 0011 0000 ---> 有2个1

7---> 111

7 % 2 = 1; //1个

7 / 2 = 3;

3 % 2 = 1; //2个

3 / 2 = 1;

1 % 2 = 1; //3个

1 / 2 = 0; //结束

48 % 2 = 0;

48 / 2 = 24;

24 % 2 = 0;

24 / 2 = 12;

12 % 2 = 0;

12 / 2 = 6;

6 % 2 = 0;

6 / 2 = 3;

3 % 2 = 1; //1个

3 / 2 = 1;

1 % 2 = 1; //2个

1 / 2 = 0; //结束

#include <stdio.h>

int main()

{

inta, n = 0;

scanf("%d",&a);

while(a!= 0)

{

if(a% 2 == 1)

{

n++;

}

a= a / 2;

}

printf("nis %d\n", n);

}

6 输入1-10之内的10个数,其中有一个重复的,请编程挑出此数

如: 1,2,3,4,5,6,7,3,9,10

#include <stdio.h>

int main()

{

inta[10] = { 0 };

intb[10];

inti;

for(i= 0; i < 10; i++)

{

scanf("%d",&b[i]);

}

for(i= 0; i < 10; i++)

{

a[b[i]- 1]++; // b[0] = 2 ====> a[2 - 1]++ ===> a[1]++

}

for(i= 0; i < 10; i++)

{

if(a[i]== 2)

printf("%d\n",i + 1);

}

}

7 输入一个数,求出此数的阶乘

如: 5! = 5 * 4 * 3 * 2 * 1

#include <stdio.h>

int main()

{

intn;

intx = 1;

scanf("%d",&n);

while(n> 1)

{

x= n * x;

n--;

}

printf("n!is %d\n", x);

}

8 定义整数类型数组,10个元素,初始化,找到其中的质数,打印它的角标(下标 index)

int a[10] = {2,45,8,0,7,13,3,6,45,78};//4个质数0 4 5 6

#include <stdio.h>

int main()

{

inta[10] = {2,45,8,0,7,13,3,6,45,78};

inti, j;

for(i= 0; i < 10; i++) //取出数组中每一个数

{

if(a[i]== 0 || a[i] == 1)//0和1不是质数

continue;

for(j= 2; j < a[i]; j++)

{

if(a[i]% j == 0)

{

break;

}

}

if(j== a[i])

printf("%d,%d\n", i, a[i]);

}

}

9 定义一个10个int元素的数组并初始化,找到数组中最大值和最小值所在位置的下标,并交换最大值和最小值的位置。

12,45,78,9,43,99,32,7,8,23

int max = 0, min = 100, x, y; //x最大值下标 y最小值下标

从头到尾扫描,找到最大值,x记录下标,找到最小值,记录下标

然后两个值交换

#include <stdio.h>

int main()

{

inta[10] = {12, 45, 78, 9, 43, 99, 32, 7, 8, 23};

intmax = 0, min = 100, x, y, i, t; //x最大值下标 y最小值下标

for(i= 0; i < 10; i++)

{

if(a[i]> max)

{

max= a[i];

x= i;

}

if(a[i]< min)

{

min= a[i];

y= i;

}

}

t= a[x];

a[x]= a[y];

a[y]= t;

for(i= 0; i < 10; i++)

{

printf("%d\n",a[i]);

}

}

10 短路求值:

例1:

int a = 1, b = 5;

if(a && (b = 1))

{

;

}

执行完 b ? 1

例2:

int a = 0, b = 5;

if(a && (b = 1)) //在与条件中,如果前面的值是false,后面的不执行,不判断

{

;

}

执行完 b ? 5

例3:

int a = 1, b = 5;

if(a || (b = 1)) //再或操作中,如果前面的条件是true,后面的不执行,不判断

{

;

}

执行完 b ? 5

例4:

int a = 0, b = 5;

if(a || (b = 1))

{

;

}

执行完 b ? 1

练习

1) intx = 0, y = 9;

if(x== 1 || y++ == 5)

{

;

}

printf("xis %d, y is %d\n", x, y); //???? x = 0, y = 10

2) intx = 0, y = 9;

if(x== 0 || y++ == 5)

{

;

}

printf("xis %d, y is %d\n", x, y); //???? x = 0, y = 9

3) intx = 0, y = 9;

if(x== 0 && y++ == 5)

{

;

}

printf("xis %d, y is %d\n", x, y); //???? x = 0, y = 10

4)

intx = 0, y = 9;

if(x== 1 && y++ == 5)

{

;

}

printf("xis %d, y is %d\n", x, y); //???? x = 0, y = 9

5)

int x = 5, y = 9;

x > y ? x++ : y++;

执行完,x ? 5 y ? 10

6)

int x=10,y=9;

int a,b,c;

a=(--x==y++)?--x:++y;

b=x++;

c=y;

执行完 a? 8 b ? 8 c ? 10

/

作业 1 输入一个整数,将这个数的各个位的值分别存入到数组的各个元素中。

inta[20] = { 0 };

1234---->a[0] 1 a[1] 2 a[2] 3 a[3] 4

作业答案

1 输入一个整数,将这个数的各个位的值分别存入到数组的各个元素中。

inta[20] = { 0 };

1234---->a[0] 1 a[1] 2 a[2] 3 a[3] 4

#include <stdio.h>

int main()

{

intn, i = 0, j;

inta[20] = { 0 }, b[20] = { 0 };

scanf("%d",&n); //12345----> (a[0]-->1 a[1]---> 2.... a[4]---> 5)

while(n> 0)

{

a[i]= n % 10; //a[0]--> 5 a[1] = 4 .... a[4] = 1

n= n / 10;

i++; //会加到5

}

//倒过来放到数组中

for(j= 0; j < i; j++)

{

b[j]= a[i - j - 1]; //b[0] = a[4] b[1] = a[3] ...

printf("%d\n",b[j]);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值