黑马程序员——ios基础---练习:3
来源:互联网 发布:ubuntu touch 平板安装 编辑:程序博客网 时间:2024/06/01 21:32
C7--------------------------------------------------------------------
C8--------------------------------------------------------------------
一、选择题
1. 以下关于数组的描述正确的是(C)。
A. 数组的大小是固定的,但可以有不同的类型的数组元素
B. 数组的大小是可变的,但所有数组元素的类型必须相同
C. 数组的大小是固定的,所有数组元素的类型必须相同
D. 数组的大小是可变的,可以有不同的类型的数组元素
2. 以下对一维整型数组a的错误说明是(a )。
A.int a(10); B. int n=10,a[n];
C.int n; D. #define SIZE 10
scanf("%d",&n); int a[SIZE];
int a[n];
3. 以下对一维数组m进行错误初始化的是( A )。
A. int m[10]=(0,0,0,0) ; B. int m[10]={ };
C. int m[ ]={0}; D. int m[10]={10*2};
4. 若有定义:int bb[8];。则以下表达式中不能代表数组元bb[1]的地址的是(C )。
A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1
5. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(D )。
A. 3 B. 6 C. 10 D. 20
6. 若有以下说明:
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};
char c='a',d,g;
则数值为4的表达式是(d )
A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c]
7. 以下程序段给数组所有的元素输入数据,请选择正确答案填入( )。
#include<stdio.h>
main()
{
int a[10],i=0;
while(i<10) scanf("%d",_____A___ );
┇
}
A. a+(i++) B. &a[i+1] C. a+i D. &a[++i]
8. 执行下面的程序段后,变量k中的值为( A )。
int k=3, s[2];
s[0]=k; k=s[1]*10;
A. 不定值 B. 33 C. 30 D. 10
9. 以下程序的输出结果是(c )
main()
{
int i, a[10];
for(i=9;i>=0;i--) a[i]=10-i;
printf("%d%d%d",a[2],a[5],a[8]);
}
A. 258 B. 741 C. 852 D. 369
10. 以下程序运行后,输出结果是( d )。
main()
{
int n[5]={0,0,0},i,k=2;
for(i=0;i<k;i++) n[i]=n[i]+1;
printf("%d\n",n[k]);
}
A. 不确定的值 B. 2 C. 1 D. 0
二、编程题
12、
/*
随机产生20个[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和。
*/
int main(int argc, const char * argv[])
{
// 1、定义max用于保存最最大值,将其初始化为一个小于等于最小值的数,这里初始化为0 ,来确保找出的最大值不会有问题,同理定义min来保存最小值,其初始值为大于等于区间最大值的数,这里初始化为51,定义一个sum将其初始化为0.因为0加上任何数还是原来的数。
int max = 0,min = 51,sum = 0;
// 2、定义average用于记录平均值
float average = 0;
// 3、第一个元素个数为20的数组
int number[20] = {0};
// 4、使用循环产生[10,50]随机值,并计算
for (int i = 0; i < 20; i++) {
//arc4random_uniform(41) 用于产生 0 ~ 40 的随机数,那么
///arc4random_uniform(41) + 10 就是[10,50]的随机数
number[i] = arc4random_uniform(41) + 10;
// printf("%d ",number[i]);
// 获取最大值
max = max > number[i] ? max : number[i];
// 获取最小值
min = min < number[i] ? min : number[i];
// 计算和
sum += number[i];
}
// 计算平均值
average = sum * 1.0 / 20;
// 输出结果
printf("\n%d %d %d %.2f",max,min,sum,average);
return 0;
}
一、选择题
1. 若说明:int a[2][3]; 则对a数组元素的正确引用是(c ) 。
A. a(1,2) B. a[1,3] C. a[1>2][!1] D. a[2][0]越界
2. 若有定义:int b[3][4]={0};则下述正确的是(c ) 。
A. 此定义语句不正确
B. 没有元素可得初值0
C. 数组b中各元素均为0
D. 数组b中各元素可得初值但值不一定为0
3. 若有以下数组定义,其中不正确的是(d ) 。
A. int a[2][3];
B int b[][3]={0,1,2,3};
C. int c[100][100]={0};
D. int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
4. 若有以下的定义:int t[5][4];能正确引用t数组的表达式是(c )。
A. t[2][4] B. t[5][0] C. t[0][0] D. t[0,0]
5. 在定义int m[ ][3]={1,2,3,4,5,6};后,m[1][0]的值是(a )。
A. 4 B. 1 C. 2 D. 5
6. 在定义int n[5][6]后第10个元素是( c )。
A. n[2][5] B. n[2][4] C. n[1][3] D. n[1][4]
7. 若有以下定义语句,
float x[3][3]={{1.0,2.0,3.0},{4.0,5.0,6.0}};
则表达式“x[1][1]*x[2][2]”的值是( A )。
A. 0.0 B. 4.0 C. 5.0 D. 6.0
8. 以下程序运行后,输出结果是 (a )。
main()
{
int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);
}
A. 0650 B. 1470 C. 5430 D. 输出值不定
9. 以下程序运行后,输出结果是(b )。
main()
{
int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
int i,s=0;
for(i=0;i<4;i++) s+=aa[i][1];
printf(“%d\n”,s);
}
A. 11 B. 19 C. 13 D. 20
10. 有以下程序
main( )
{
int a[3][4]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++) s+=a[i][j];
printf("%d\n",s);
}
该程序的输出结果是( B )。
A. 18 B. 19 C. 20 D. 21
11. 若定义如下变量和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是( C )。
for(i=0;i<3;i++) printf("%d",x[i][2-i]);
A. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9
12. 不能把字符串:Hello!赋给数组str的语句是( B )。
A. char str[10]= {'H', 'e', 'l', 'l', 'o', '! '};
B. char str[10];str="Hello!";
C. char str[10];strcpy(str,"Hello!");
D. char str[10]="Hello!";
13. 若给出以下定义:
char x[ ]="abcdefg";\0
char y[ ]={'a','b','c','d','e','f','g'};
则正确的叙述为(C )。
A. 数组x和数组y等价 B. 数组x和数组y的长度相同
C. 数组x的长度大于数组y的长度 D. 数组x的长度小于数组y的长度
14. 若有数组定义: char array [ ]="China"; 则数组 array所占的空间为( c)。
A. 4个字节 B. 5个字节 C. 6个字节 D. 7个字节
15. 若有定义和语句:
char s[10];s="abcd";printf("%s\n",s);
则结果是(以下└┘代表空格)( D )。
A. 输出abcd B. 输出a C. 输出abcd└┘└┘└┘└┘ D. 编译不通过
16. 运行下面的程序,如果从键盘上输入:ABC时,输出的结果是(A )。
#include<string.h>
main()
{
char ss[10]="12345";
strcat(ss, "6789" );
gets(ss);printf("%s\n",ss);
}
A. ABC B. ABC9 C. 123456ABC D. ABC456789
17. 判断两个字符串是否相等,正确的表达方式是( C )。
A. while(s1==s2) B. while(s1=s2)
C. while(strcmp(s1,s2)==0) D. while(strcmp(s1,s2)=0)
18. 以下程序的输出结果是( A)。
main()
{
char str[12]={ 's','t','r','i','n','g'};
printf("%d\n",strlen(str));
}
A. 6 B. 7 C. 11 D. 12
19. 若有以下程序片段:
char str[ ]="ab\n\012\\\"";
printf("%d",strlen(str));
上面程序片段的输出结果是 (C )。
A. 3 B. 4 C. 6 D. 12
20. 若有以下程序段,输出结果是(A )。
char s[ ]="\\141\141abc\t";
printf ("%d\n",strlen(s));
A. 9 B. 12 C. 13 D. 14
21. 设有static char str[ ]="Beijing";
则执行printf("%d\n", strlen(strcpy(str,"China")));
后的输出结果为 (A )。
A. 5 B. 7 C. 12 D. 14
23. 以下程序运行后,输出结果是(A )。
main()
{
char arr[2][4];
strcpy(arr,"you"); strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s \n",arr);
}
A. you&me B. you C. me D. err
三、编程题
1.
输入6个字符串,并对它们按从小到大的顺序排序后输出。
1.
int main(void)
{
char string[6][100] = {0};
printf("please input 6 strings:\n");//遇到 空格 或者 回车 都会认为1个字符串输入结束了。
for(int i = 0; i < 6; i++) {
scanf("%s",string[i]);
}
//排序(冒泡排序)
for(int i = 0; i < 6 - 1;i++){
for (int j = 0; j < 6 - 1 - i; j++) {
if (strcmp(string[j], string[j+1]) > 0) {
char temp[100] = {0};
strcpy(temp, string[j]);
strcpy(string[j], string[j+1]);
strcpy(string[j+1], temp);
}
}
}
for (int i = 0; i < 6; i++) {
printf("%s\t\t",string[i]);
}
return 0;
}
C9-------------------------------------------------------------------------------------------------
一、选择题
1. 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;
2. 若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D
A. 无确定值 B. a的地址 C. 512 D. 511
3. 已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);
4. 变量的指针,其含义是指该变量的(B)。
A. 值 B. 地址 C. 名 D. 一个标志
5. 若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
A. scanf("%d%d%d", &a, &b, d);
B. scanf("%d%d%d", a, b, d);
C. scanf("%d%d%d", &a, &b, &d);
D. scanf("%d%d%d", a, b,*d);
7. 若有语句int *p, a=10; p=&a; 下面均代表地址的一组选项是(D)。
A. a, p, *&a B. &*a, &a, *p
C. *&p, *p, &a D. &a, &*p, p
8. 若需要建立如图所示的存储结构,且已有说明double *p, x=0.2345; 则正确的赋值语句是(B)。
A. p=x; B. p=&x;
C. *p=x; D. *p=&x;
9. 若有说明:int *p, a=1, b; 以下正确的程序段是(D)。
A. p=&b; B. scanf("%d", &b);
scanf("%d", &p); *p=b;
C. p=&b; D. p=&b;
scanf("%d", *p); *p=a;
10.有如下语句:int m=6, n=9, *p, *q; p=&m; q=&n; 如图1所示,若要实现下图所示的存储结构,可选用的赋值语句是(C)。
A. *p=*q; B. p=*q;
C. p=q; D. *p=q;
13.下面判断正确的是(C)。
A. char *s="girl"; 等价于 char *s; *s="girl";
B. char s[10]={"girl"}; 等价于 char s[10]; s[10]={"girl"};
C. char *s="girl"; 等价于 char *s; s="girl";
D. char s[4]= "boy", t[4]= "boy"; 等价于char s[4]=t[4]= "boy"
14.设char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是(C)。
A. 9 B. 5 C. 6 D. 7
15.下面程序段中,for循环的执行次数是(C)。
char *s="\ta\018bc";
for (;*s!='\0';s++) printf("*");
A. 9 B. 5 C. 6 D. 7
16.以下不能正确进行字符串赋初值的语句是(A)。
A. char str[5]= "good!";
B. char *str="good!";
C. char str[]="good!";
D. char str[5]={'g', 'o','o', 'd'};
18.下面程序段的运行结果是(C)。
char *s="abcde";
s+=2;
printf("%d", s);
A. cde B. 字符'c' C. 字符'c'的地址 D. 无确定的输出结果
20.以下正确的程序段是(c)。
A. char s[20]; B. char *s;
scanf("%s", &s); scanf("%s", s);
C. char s[20]; D. char s[20], *t=s;
scanf("%s", &s[2]); scanf("%s", t[2]);
21.下面程序段的运行结果是(C)。
#include "stdio.h"
main()
{
int m=10, n=20;
char *format="%s, m=%d, n=%d\n";
m*=n;
printf(format, "m*=n", m,n);
}
A. format, "m*=n", m, n B. format, "m*=n"
C. m*=n, m=200, n=20 D. 以上结果都不对
24.以下正确的程序段是(C)。
A. char s[]="12345", t[]="6543d21"; strcpy( s,t);
B. char s[20], *t="12345"; strcat(s,t);
C. char s[20]=" ", *t="12345"; strcat(s, t);
D. char *s="12345", *t="54321"; strcat (s,t);
26.若有以下定义和语句:
int s[4][5], (*ps)[5];
ps=s;
则对s数组元素的正确引用形式是()。
A. ps+1 B. *(ps+3) C. ps[0][2] D. *(ps+1)+3
27.不合法的main函数命令行参数表示形式是:(B)。
A. main( int a, char *c[]) B. main(int argc, char *argv)
C. main( int arc, char **arv) D. main( int argv, char *argc[])
29.若已定义char s[10];则在下面表达式中不表示s[1]地址的是(B)。
A. s+1 B. s++ C. &s[0]+1 D. &s[1]
30.下面程序段的运行结果是(D)。(注:└┘代表空格)
#include "stdio.h"
main()
{ char s[6];
s="abcd";
printf("\"%s\"\n", s);
}
A. "abcd" B. "abcd└┘" C. \"abcd\" D. 编译出错
37.下列程序的输出结果是(C)。
#include "stdio.h"
main()
{
int a[]={1,2,3,4,5,6,7,8,9,0}, *p;
p=a;
printf("%d\n", *p+9);
}
A. 0 B. 1 C. 10 D. 9
40.有以下程序
#include "string.h"
#include "stdio.h"
main()
{
char *p="abcde\0fghjik\0";
printf("%d\n", strlen(p));
}
程序运行后的输出结果是(D)。
A. 12 B. 15 C. 6 D. 5
44.下面程序的运行结果是(D)。//char *s传递的过程?
#include "stdio.h"
#include "string.h"
fun( char *s)
{
char t[10];
s=t;
strcpy(t, "example");
}
main()
{
char *s;
fun(s);
puts(s);
}
A.example└┘└┘└┘ B.example└┘└┘ C.example D.不确定的值
45.下列程序段的输出结果是()。// xy传递的过程??
#include "stdio.h"
void fun( int * x, int *y)
{
printf("%d%d", *x, *y);
*x=3;
*y=4;
}
main()
{
int x=1, y=2;
fun(&y, &x);
printf("%d %d", x, y);
A }
A. 2 1 4 3 B. 1 2 1 2 C. 1 2 3 4 D. 2 1 1 2
46.下列程序的输出结果是(C)。
#include "stdio.h"
main()
{
char a[10]={9,8,7,6,5,4,3,2,1,0}, *p=a+5;
printf("%d", *--p);
}
A. 非法 B. a[4]的地址 C. 5 D. 3
48.有以下函数:B
char *fun(char *s)
{ …
return s;
}
该函数的返回值是()。
A. 无确定值 B. 形参s中存放的地址值
C. 一个临时存储单元的地址 D. 形参s自身的地址值
二、编程题。
1.
自己实现strcpy函数(有以下两种实现方法)
2.
自己实现strlen函数
C11----------------------------------------------------------------------
一、改错题
1.
void test();
int main()
{
struct Date
{
int year;
int month;
int day;
};
test();
return 0;
}
void test()
{
// struct Date这个结构体类型是在main函数中定义的
// 因此struct Date只能用在main函数中
// struct Date date = {2011, 9, 10};
}
// 1个错误
2.
int main()
{
struct Date
{
int year;
int month;
int day;
} d1 = {2011, 9, 10};
// struct Date类型重复定义
//struct Date d2 = {2010,10,11};
struct Date
{
int year;
int month;
int day;
} d2 = {2010, 10, 11};
return 0;
}
3.
#include <stdio.h>
int main()
{
struct Student
{
int age;
char *name;
};
// 定义变量时缺少struct关键字
struct Student stu;
//Student stu;
printf("请输入年龄:\n");
// age属性缺少地址运算符&
scanf("%d", &stu.age);
printf("请输入姓名:\n");
// name属性是一个指针,本来就代表了姓名的地址,这里不用写&
scanf("%s", stu.name);
//scanf("%s", &stu.name);
return 0;
}
4.
#include <stdio.h>
typedef struct
{
int age;
char *name;
} Student;
typedef Student * StuP;
int main()
{
Student stu;
StuP p = &stu;
// p是一个指向结构体变量stu的指针
// 指针变量访问结构体成员用的是->,不是.
p->age = 10;
//p.age = 10;
p->name = "rose";
//p.name = "rose";
return 0;
return 0;
}
二、编程题
1.
2.某班有5个学生,三门课。分别编写3个函数实现以下要求:
(1) 求各门课的平均分;
(2) 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;
(3) 找出三门课平均成绩在85-90分的学生,并输出其学号和姓名
1.
typedef struct course{
char name[20];//课程名称
float score;//课程分数
}Course;
typedef struct student{
int number;//学号
char name[20];//姓名
Course courses[3];//三门课程
}Student;
float averageScore(Student stu);
float averageScore(Student stu){
float average = 0;
for (int i = 0; i < 3; i++) {
average += stu.courses[i].score;
}
return average /= 3;
}
void printPoorStudent(Student stu);//打印两门以上不及格的学生信息
void printPoorStudent(Student stu){
if ((stu.courses[0].score < 60 && stu.courses[1].score < 60)||(stu.courses[0].score < 60 && stu.courses[2].score < 60)||(stu.courses[1].score < 60 && stu.courses[2].score < 60)) {
printf("%d\t",stu.number);
if (stu.courses[0].score < 60) {
printf("%s:%.2f\t",stu.courses[0].name,stu.courses[0].score);
}
if (stu.courses[1].score < 60) {
printf("%s:%.2f\t",stu.courses[1].name,stu.courses[1].score);
}
if (stu.courses[2].score < 60) {
printf("%s:%.2f\t",stu.courses[2].name,stu.courses[2].score);
}
printf("\n");
}
}
void printNBestStudentInfo(Student stu);//打印牛best学生的信息
void printNBestStudentInfo(Student stu){
if (averageScore(stu) >= 85 && averageScore(stu) <= 90) {
printf("number:%d name:%s",stu.number,stu.name);
}
}
void studentInfo(void);
void studentInfo(void)
{
Student students[5] = {
{1,"ZhangSan",{{"YuWen",90},{"ShuXue",88},{"English",85}}},
{2,"LiSi",{{"YuWen",75},{"ShuXue",93},{"English",60}}},
{3,"WangWu",{{"YuWen",46},{"ShuXue",59},{"English",52}}},
{4,"ZhaoDa",{{"YuWen",80},{"ShuXue",55},{"English",2}}},
{5,"QianEr",{{"YuWen",58},{"ShuXue",35},{"English",86}}},
};
Course averages[3] = {{"YuWen",0},{"ShuXue",0},{"English",0}};
for (int i = 0; i < 5; i++) {//求每门课的平均成绩
averages[0].score += students[i].courses[0].score;
averages[1].score += students[i].courses[1].score;
averages[2].score += students[i].courses[2].score;
}
printf("三门课的平均成绩\n");
for(int i = 0;i < 3;i++){
printf("%s:%.2f\n",averages[i].name,averages[i].score/=5);
}
printf("有两门以上不及格的学生,并输出其学号和不及格课程的成绩\n");
for (int i = 0; i < 5; i++) {
printPoorStudent(students[i]);
}
printf("三门课平均成绩在85-90分的学生,并输出其学号和姓名\n");
for (int i = 0; i < 5; i++) {
printNBestStudentInfo(students[i]);
}
}
2.
模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、D表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是A、B、C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。
typedef struct candidate{
char candidateName;
int ticketCount;
}Candidate;
void vote(int totalCount);//模拟投票
void vote(int totalCount){
Candidate candidates[4] = {{'A',0},{'B',0},{'C',0},{'D',0}};
for (int i = 0; i < totalCount; i++) {
int choosed = arc4random() % 5 + 65;
switch (choosed) {
case 'A':
candidates[0].ticketCount++;
break;
case 'B':
candidates[1].ticketCount++;
break;
case 'C':
candidates[2].ticketCount++;
break;
case 'D':
candidates[3].ticketCount++;
break;
default:
break;
}
}
for (int i = 0; i < 4 - 1; i++) {
for (int j = 0; j < 4 - 1 - i; j++) {
if (candidates[j].ticketCount < candidates[j+1].ticketCount) {
Candidate temp = candidates[j];
candidates[j] = candidates[j+1];
candidates[j+1] = temp;
}
}
}
for (int i = 0; i < 4; i++) {
printf("%c:%d\n",candidates[i].candidateName,candidates[i].ticketCount);
}
}
3.
主函数创建5个学生的数组,写一个排序函数,让学生按姓名从小到大排序,主函数输出排序后的结果
typedef struct stu
{
char name[20];
int age;
float score;
}Student;
void sort_by_name(Student arr[], int arr_len)
{
for (int i = 0; i < arr_len-1; i++) {
for (int j = 0; j < arr_len-1-i; j++) {
if (strcmp(arr[j].name, arr[j+1].name)>0) {
Student temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
void print_stu_info(Student arr[], int arr_len)
{
for (int i = 0; i < arr_len; i++) {
printf("%-10s%5d%7.2f\n", arr[i].name, arr[i].age,arr[i].score);
}
}
int main(void)
{
Student stus[5] = {{"zhangsan",23, 78.8},
{"lisi",25,89.0},
{"rongyan", 43, 67.5},
{"amumu", 17, 88},
{"gailun",28,91.5}};
sort_by_name(stus, 5);
print_stu_info(stus, 5);
return 0;
}
- 黑马程序员——ios基础---练习:3
- 黑马程序员——ios基础---练习:1
- 黑马程序员——ios基础---练习:2
- 黑马程序员——ios基础---练习:4
- 黑马程序员———ios基础
- 黑马程序员——c语言基础:循环结构练习
- 黑马程序员—java基础_异常多态练习
- 黑马程序员—字符串练习
- 黑马程序员——IOS基础(OC基础)
- 黑马程序员——ios基础---Objective-C:基础语法
- 黑马程序员--ios基础
- 黑马程序员---ios基础
- 黑马程序员——IOS基础——Block
- 黑马程序员——IOS基础——Protocol协议
- 黑马程序员——IOS基础——Copy
- 黑马程序员 ——ios基础 ——循环结构
- 黑马程序员 ——ios基础 ——函数
- 黑马程序员 ——ios基础 ——字符串
- 黑马程序员——ios基础---练习:2
- 集合对象中是线程安全
- adapter刷新
- iOS lipo 判断静态库是否支持64位
- 常用类的练习
- 黑马程序员——ios基础---练习:3
- JSDoc3使用路径名
- 3.Longest Substring Without Repeating Characters
- 好记性不如好博客
- CentOS下yum安装 Nginx
- 黑马程序员——ios基础---练习:4
- 第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记
- iOS如何显示 UITableViewCell detailTextLabel?
- 利用forms元素提交表单