一维数组
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]);
}
}