12.20 Lab10
introduction-to-computer-science-laboratory-10.pdf
Sequences can have same element and have the order
-
Finish the exercises present in the tutorial.
-
Identify the issues in the following C programs. Then fix the programs, avoiding the use of global variables while maintaining the original intended functionality:
A.
#include <stdio.h> int n; int i; int prime = 1; void isPrime() { i = 2; while(i < n && prime) if(n % 1 == 0) { prime = 0; } i++; } } int main() { scanf("%d", &n); isPrime(); if(prime) { printf("The number %d is prime\n", n); } else { printf("The number %d is not prime\n", n); } return 0; }
Corrected:
#include <stdio.h> int isPrime(int n) { int i = 2; int prime = 1; if(n <= 1) { prime = 0; return prime; } else if(n == 2) { prime = 1; return prime; } while(i < n && prime) { if(n % i == 0) { prime = 0; return prime; } i++; } return prime; } int main() { int n; scanf("%d", &n); int prime = isPrime(n); if(prime) { printf("The number %d is prime\n", n); } else { printf("The number %d is not prime\n", n); } return 0; }
B.
#include <stdio.h> #define MAX_SIZE 100 int evens; int odds; int arr[MAX_SIZE]; int size; int result; int i; int n; void isEven() { if(n % 2 == 0) { result = 1; } else { result = 0; } } void moreEvens() { for (i = 0; i < size; i++) { n = arr[i]; isEven(); if(result == 1) { evens++; } else { odds++; } } result = evens > odds; } int main() { scanf("%d", &size); for(i = 0; i < size; i++) scanf("%d", &arr[i]); i = 0; evens = 0; odds = 0; moreEvens(); if(result) { printf("There is more evens than odds\n"); } else { printf("There is more or equal odds than evens\n"); } return 0; }
Corrected:
#include <stdio.h> #define MAX_SIZE 100 int isEven(int n, int result) { if (n % 2 == 0) { result = 1; return result; } else { result = 0; return result; } } int moreEvens(int size, int result,int arr[]) { int evens = 0; int odds = 0; for (int i = 0; i < size; i++) { int n = arr[i]; result = isEven(n, result); if (result == 1) evens++; else odds++; } result = (evens > odds); return result; } int main() { int size; int result; int arr[MAX_SIZE]; scanf("%d", &size); for (int i = 0; i < size; i++) scanf("%d", &arr[i]); result = moreEvens(size, result, arr); if (result) printf("There is more evens than odds\n"); else printf("There is more or equal odds than evens\n"); return 0; }
-
For the following C functions over arrays, add the
const
modifier where it is needed.A.
void loadArray(int a[], int size) { for(int i = 0; i < size; i++) { a[i] = i; } }
No need to add
const
B.
void copy(int a[], int b[], int size) { for(int i = 0; i < size; i++) { b[i] = a[i]; } }
Corrected
void copy(const int a[], int b[], int size) { for(int i = 0; i < size; i++) { b[i] = a[i]; } }
C.
void powArray(int a[], int size) { for(int i = 0; i < size; i++) { a[i] = a[i] * a[i]; } }
No need
D.
void sumArrays(int a[], int b[], int c[], int size) { for(int i = 0; i < size; i++) { c[i] = a[i] + b[i]; } }
Corrected:
void sumArrays(const int a[],const int b[], int c[], int size) { for(int i = 0; i < size; i++) { c[i] = a[i] + b[i]; } }
-
Implement a C function that, given 2 strings, determines if they are equal or not. Then write a main function that takes 2 strings from standard input and calls the previously defined function.
#include <stdio.h> int isEqual(char str1[], char str2[]) { for(int i = 0; str1[i] != '\0' || str2[i] != '\0'; i++) { if(str1[i] != str2[i]) return 0; } return 1; } int main() { char str1[1000]; char str2[1000]; fgets(str1, 1000, stdin); fgets(str2, 1000, stdin); if(isEqual(str1, str2)) printf("Yes, they are equal!"); else printf("No, they are not euqal!"); }
-
Design a function that, given a string, calculates its length. Write a main function that takes as input a string from the command line and calculates the string’s length.
#include <stdio.h> int length(char str[]) { int i; for(i = 0; str[i] != '\0'; i++) {} return i - 1; } int main() { char str[1000]; fgets(str, 1000, stdin); int len = length(str); printf("%d", len); }
-
Write a function that, given a string
s
, calculates the reverse ofs
and stores it in the same string. This function cannot use additional arrays. Afterward, write a main function that takes a string from standard input, prints it, and prints the reverse of the input.#include <stdio.h> int length(char str[]) { int i; for(i = 0; str[i] != '\0'; i++) {} return i - 1; } void reverse(char str[]) { char temp; for(int i = 0; i < length(str) - i - 1; i++) { temp = str[length(str) - i - 1]; str[length(str) - i - 1] = str[i]; str[i] = temp; } } int main() { char str[1000]; fgets(str, 1000, stdin); reverse(str); printf("%s", str); }
-
Write a C function that calculates the power of 2 using an array. This array must have a length of
(n + 1)
for everyn
. Then write a main function that takesn
as input from the command line and calculates the power of 2.#include<stdio.h> #include<stdlib.h> void initial(int str[], int size) { for(int i = 0; i < size; i++) { str[i] = 2; } } int powt(int str[], int size) { int result = 1; for(int i = 0; i < size; i++) { result *= str[i]; } return result; } int main(int argc, char *argv[]) { int size = atoi(argv[1]); int str[size]; initial(str, size); printf("%d", powt(str, size)); }
Insert sort
#include <stdio.h>
#include <assert.h>
#define FALSE 0
#define TRUE 1
/* inserts the element at position index into
Its sorted position in the sorted subarray
Seq[0 .. index - 1].
Precondition: index is a valid position of the array
The subarray seq[0..index-1] is sorted.
*/
void sorted_insert(int seq[], int index) {
assert (index >= 0);
if (index > 0 && seq[index] < seq[index - 1]) {
int aux = seq[index];
seq[index] = seq[index - 1];
seq[index - 1] = aux;
sorted_insert(seq, index - 1);
}
}
/* prints array contents from position lower to
Position upper - 1 */
void print_array(int seq[], int lower, int upper) {
printf("{");
for (int i = lower; i < upper - 1; i++) {
printf("%d, ", seq[i]);
}
printf("%d}\n", seq[upper - 1]);
}
/* Sorts an array seq.
* Precondition: size is >= 0, and is the size
* of the array.
*/
void sort(int seq[], int size) {
if(size > 1) {
sort(seq, size - 1);
sorted_insert(seq, size - 1);
}
/* for (int i = 1; i < size; i++) {
sorted_insert(seq, i);
} */
}
int main() {
int seq[11] = {1, 2, 33, 4, 5, 3, 6, 7, 8, 59, 25};
print_array(seq, 0, 11);
sort(seq, 11);
print_array(seq, 0, 11);
return 0;
}